2022-11-17
引子
2000年拜特科技成立,到今天已有22個(gè)年頭,這二十幾年來信息化技術(shù)可謂突飛猛進(jìn),日新月異,拜特科技作為專業(yè)的資金管理軟件服務(wù)提供商,緊跟技術(shù)潮流,產(chǎn)品一路迭代升級(jí),從C/S架構(gòu)到B/S架構(gòu),從Web/Sevice到踐行SOA,如今又迭代升級(jí)到業(yè)界流行的微服務(wù)架構(gòu)。今天這篇文章,將以一個(gè)運(yùn)維工程師的視角來跟大家一起梳理一下這20多年來,承載系統(tǒng)運(yùn)行的環(huán)境也就是我們常說的“計(jì)算機(jī)”這一路走來經(jīng)歷哪些變遷。
本文核心關(guān)鍵字:C/S架構(gòu)模式、B/S架構(gòu)模式、微服務(wù)架構(gòu)、虛擬化、容器
一、C/S架構(gòu)-物理機(jī)的年代
拜特科技資金管理系統(tǒng)第一個(gè)版本是C/S架構(gòu),是由公司創(chuàng)始人胡德芳先生開發(fā),這個(gè)版本為公司帶來了前期核心的幾十家客戶,也奠定了拜特科技成立的基礎(chǔ)。下圖是當(dāng)年C/S架構(gòu)系統(tǒng)的一個(gè)截圖,現(xiàn)在回頭看,滿滿的年代感。
C/S模式,即Client/Server或客戶/服務(wù)器模式,是服務(wù)器客戶端結(jié)構(gòu)。是一種“一對(duì)多”的模式,一臺(tái)服務(wù)器,處理多個(gè)客戶端發(fā)來的請(qǐng)求,完成了業(yè)務(wù)邏輯之后,再返回給客戶端一些信息。
C/S架構(gòu)下,數(shù)據(jù)庫一般部署在實(shí)體機(jī)上,大型客戶一般在IBM P系列小型機(jī)或者SUN SPARC工作站上,記得當(dāng)時(shí)第一次操作IBMP系列的小型機(jī),就被它強(qiáng)勁的性能和敦實(shí)的外觀深深的吸引(當(dāng)然服務(wù)器價(jià)格也很強(qiáng)勁),在服務(wù)端,系統(tǒng)部署簡單,數(shù)據(jù)庫安裝部署好即可,工作量也不大,由于客戶端需要單個(gè)安裝,就需要到客戶各個(gè)工位,樓上樓下的跑了,通常安裝完畢,大半天就過去了。
C/S模式下,更多依賴“垂直擴(kuò)展”,性能出現(xiàn)問題,基本上就是簡單的硬件升級(jí),在運(yùn)維層面,更多的就是幫助客戶遷移數(shù)據(jù)庫,重新升級(jí)系統(tǒng)。
二、B/S架構(gòu)-日益豐富的企業(yè)應(yīng)用
時(shí)間來到2006年,拜特科技的產(chǎn)品架構(gòu)也迎來了B/S架構(gòu)模式,應(yīng)用服務(wù),第三方接口服務(wù),銀行接口平臺(tái)服務(wù)也需要獨(dú)立部署,用戶客戶端不用直連數(shù)據(jù)庫,所有的交互式業(yè)務(wù)操作都直連應(yīng)用服務(wù)完成,在部署上,需要專門的應(yīng)用服務(wù)器,第三方接口服務(wù)器,銀行接口服務(wù)平臺(tái)服務(wù)器。簡單結(jié)構(gòu)圖如下:
B/S架構(gòu)模式,系統(tǒng)的安裝部署就省心很多了,一般情況下數(shù)據(jù)庫服務(wù)器跟應(yīng)用服務(wù)器都在一個(gè)機(jī)房,之前的服務(wù)的央企客戶都有比較完善的機(jī)房,一進(jìn)機(jī)房,機(jī)器風(fēng)扇發(fā)出的嗡嗡聲和寒氣逼人機(jī)房制冷空調(diào),撲面而來,老實(shí)說在機(jī)房作業(yè)并不是一件令人愉悅的事情,好在安裝運(yùn)維工作在企業(yè)的機(jī)房就能完成了,時(shí)間也不會(huì)太久,至少省去了之前爬高上低的辛苦。
進(jìn)入B/S架構(gòu)時(shí)期,企業(yè)信息化程度已經(jīng)大大向前,加上中心化的部署,為了系統(tǒng)的高可用,也需要冗余部署,所需要的服務(wù)也越來越多,如果只在單臺(tái)服務(wù)器部署一個(gè)應(yīng)用服務(wù),所需要的服務(wù)器也非常多,實(shí)體服務(wù)器過多帶來的挑戰(zhàn)越來越大,具體問題如下:
● 基礎(chǔ)架構(gòu)利用率低;
● 基礎(chǔ)架構(gòu)成本高;
● IT運(yùn)維成本高。
那么能否將多個(gè)應(yīng)用部署到一臺(tái)實(shí)體機(jī)器上呢?理論上這樣做是可以的,但是多應(yīng)用部署到一臺(tái)機(jī)器,就會(huì)存在資源相互影響的問題,例如A應(yīng)用存在bug,造成了內(nèi)存泄漏,B應(yīng)用就會(huì)被連累遭殃,那么如何在充分利用機(jī)器資源的情況下,又能避免相互影響的問題呢?各個(gè)底層應(yīng)用的廠商開始了新的探索。
三、虛擬化技術(shù)-真真假假的世界
虛擬化技術(shù)是底層應(yīng)用廠商對(duì)實(shí)體機(jī)資源管理的一種優(yōu)化技術(shù),通過將計(jì)算機(jī)的各種物理資源(如CPU、內(nèi)存以及磁盤空間、網(wǎng)絡(luò)適配器等 I/O 設(shè)備)予以抽象、轉(zhuǎn)換,然后呈現(xiàn)出來的一個(gè)可供分割并任意組合為一個(gè)或多個(gè)(虛擬)計(jì)算機(jī)的配置環(huán)境。
虛擬化技術(shù)打破了計(jì)算機(jī)內(nèi)部實(shí)體結(jié)構(gòu)間不可切割的障礙,使用戶能夠以比原本更好的配置方式來應(yīng)用這些計(jì)算機(jī)硬件資源。而這些資源的虛擬形式將不受現(xiàn)有架設(shè)方式,地域或物理配置所限制。
IBM最先推出虛擬化產(chǎn)品,在資金系統(tǒng)中,P系列小型機(jī)是使用的虛擬化產(chǎn)品,但是由于成本原因,只能在大的集團(tuán)企業(yè)中使用,使用廣度不夠。隨之VMWare公司基于X86架構(gòu)虛擬化產(chǎn)品的發(fā)展,虛擬化硬件資源在資金系統(tǒng)使用得到了廣泛的應(yīng)用,已經(jīng)占現(xiàn)在系統(tǒng)部署的絕大多數(shù),虛擬機(jī)架構(gòu)體系如下:
四、微服務(wù)架構(gòu)-一起太擠各自放飛
通過虛擬化技術(shù)后,之前的一個(gè)實(shí)體機(jī)被虛擬成多個(gè)虛擬機(jī),既能充分的利用機(jī)器的計(jì)算資源,又能很好實(shí)現(xiàn)應(yīng)用之間的隔離,看起來一切都很美好,但是在微服務(wù)架構(gòu)模式下,虛擬機(jī)模式又迎來了新的挑戰(zhàn)。本文重點(diǎn)不是介紹微服務(wù)的,以下只是舉一個(gè)例子簡單說明下問題所在:
馬丁、福勒:2014.3.25: https://www.cnblogs.com/woshiyourenM/p/14579451.html 第一次系統(tǒng)性的對(duì)微服務(wù)架構(gòu)的闡述。
如上圖之前微服務(wù)架構(gòu)之前,拜特科技的資金系統(tǒng)整體是ALLINONE模式,實(shí)際部署的時(shí)候,一個(gè)tomcat容器就能正常部署,微服務(wù)拆分后系統(tǒng)按細(xì)分領(lǐng)域被劃分成多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)單獨(dú)部署。微服務(wù)后需要部署的單元大大增加,整個(gè)運(yùn)維與部署的工作量也顯著增加,如果我們用虛擬機(jī)為單位來實(shí)現(xiàn)應(yīng)用的部署與隔離,就遇到了新的問題,虛擬的創(chuàng)建與運(yùn)行需要占用大量的系統(tǒng)資源,面對(duì)快速擴(kuò)張的部署單元需求,需要新的技術(shù)來支撐。
五、Docker容器-人微言不輕
與虛擬機(jī)相似的地方,docker也實(shí)現(xiàn)了計(jì)算機(jī)各種資源的虛擬與隔離但是相對(duì)于虛擬機(jī)模式具體的底層實(shí)現(xiàn)原理確有著本質(zhì)的不同。通俗的講容器技術(shù)相對(duì)于虛擬機(jī)的優(yōu)勢可以用“多、快、好、省”四個(gè)字來概括。
虛擬機(jī)和容器的一些對(duì)比:
使用容器化部署的優(yōu)勢:
● 提高硬件資源使用率。
● 一次構(gòu)建,到處運(yùn)行,跨云和操作系統(tǒng)發(fā)行版本的可移植性。
● 保證開發(fā)、測試和生產(chǎn)的環(huán)境一致性。
● 為應(yīng)用程序提供更快的創(chuàng)建和部署。
● 持續(xù)開發(fā)、集成和部署:通過快速簡單的回滾(由于鏡像不可變性),提供可靠且頻繁的容器鏡像構(gòu)建和部署。
● 資源隔離:可預(yù)測的應(yīng)用程序性能。
提供容器化的產(chǎn)品有很多(docker/podman/cri-o/containerd 等),但最有名非Docker莫屬 。下面是CNCF推薦的一些容器運(yùn)行時(shí)產(chǎn)品介紹:
采用docker鏡像部署后,以前安裝系統(tǒng)需要的長長的安裝說明就基本上不需要了,簡單的幾行命令,一個(gè)新的環(huán)境就輕松搞定,回想起,當(dāng)年安裝一個(gè)應(yīng)用jdk,tomcat,應(yīng)用各種拷貝,現(xiàn)在居然還有一絲絲的懷念,運(yùn)維這個(gè)工作曾經(jīng)的臟活累活也由因?yàn)榧夹g(shù)的進(jìn)步逐漸退出歷史舞臺(tái),不由的感慨“科學(xué)技術(shù)是第一生產(chǎn)力”。
六、容器編排(k8s)-運(yùn)籌帷幄
虛擬化時(shí)代,當(dāng)虛擬機(jī)的數(shù)量達(dá)到一定量級(jí)的時(shí)候,單個(gè)去管理虛擬機(jī)簡直就是一個(gè)災(zāi)難,所以便誕生了像 openstack 之類的系統(tǒng),可以大批量的管理虛擬機(jī),運(yùn)維人員只需要通過web界面或CLI就可以管理成百的虛擬機(jī)。
同樣,容器化時(shí)代,當(dāng)容器的數(shù)據(jù)達(dá)到一到量級(jí)的時(shí)候,容器編排系統(tǒng)也隨之誕生了。其中 kubenetes是容器編排系統(tǒng)中最有名的(沒有之一),它已經(jīng)是事實(shí)上的容器編排標(biāo)準(zhǔn)。
k8s能做什么?
● 自我修復(fù):你不需要去手動(dòng)的重啟已經(jīng)掛的程序,k8s會(huì)自動(dòng)幫你重啟。
● 自動(dòng)分配CPU/內(nèi)存資源:可以直接給程序提前分配它所需要的硬件資源。
● 自動(dòng)部署和回滾:自動(dòng)把你的程序部署,也可以自動(dòng)回滾你的程序到之前的版本。
● Secret和配置管理:k8s可以管理機(jī)密信息,而不用把機(jī)密信息暴露到集群外。
● 存儲(chǔ)編排:可以添加任何本地或云廠商提供的存儲(chǔ)產(chǎn)品。
● 服務(wù)發(fā)現(xiàn)和負(fù)載均衡:k8s已經(jīng)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡功能。
● 項(xiàng)目實(shí)戰(zhàn):借助k8s,運(yùn)維人員通過控制臺(tái),就能像坐在中軍帳的諸葛亮一樣,對(duì)機(jī)器的資源運(yùn)籌帷幄了。
后記
一路走來,借助系統(tǒng)架構(gòu)的演變與計(jì)算資源的虛擬化,從C/S架構(gòu)時(shí)代爬上爬下的安裝應(yīng)用,一次部署就要忙碌大半天,到如今借助web管理控制臺(tái),輕輕松松,完成機(jī)器資源的申請(qǐng),擴(kuò)容,縮容,一鍵應(yīng)用程序安裝,真心感嘆人類偉大的創(chuàng)造力與創(chuàng)新精神,作為業(yè)務(wù)系統(tǒng)提供廠商,拜特科技也衷心希望能通過我們的系統(tǒng)迭代升級(jí),功能的完善能給我們的客戶在業(yè)務(wù)支撐上提供更多的驚喜,一路向前,感恩客戶,加油拜特科技!