2018:Spring Cloud 的崛起
2018年剛開(kāi)始接觸 sprig cloud
的時(shí)候氯析,還不知道 分布式計(jì)算
的概念亏较,只知道 Netflix
開(kāi)源了一套 微服務(wù)框架
,里面有很多組件組成:
組件名稱(chēng) | 作用 |
---|---|
eureka | 服務(wù)注冊(cè)與發(fā)現(xiàn) |
zuul | 網(wǎng)關(guān)路由掩缓、反向代理 |
feign | 客戶(hù)端側(cè)負(fù)載均衡 |
hystrix | 熔斷降級(jí) |
seluth & zipkin | 鏈路追蹤 |
config | 配置管理 |
... | ....... |
當(dāng)時(shí)按照書(shū)上所教的雪情,搭建一個(gè)微服務(wù) demo
,就以為 微服務(wù)
不過(guò)如此你辣。興沖沖跑去面試巡通,結(jié)果遇到一個(gè)阿里出來(lái)的大佬,他說(shuō)“只會(huì)問(wèn)你懂的東西舍哄,不會(huì)問(wèn)我懂你不懂的東西”宴凉,結(jié)果就被大佬問(wèn)到 分布式鎖
、分布式事務(wù)
和 分布式任務(wù)調(diào)度
要怎么解決表悬?問(wèn)得我啞口無(wú)言弥锄,只能灰溜溜地回去。蟆沫。籽暇。
后面經(jīng)過(guò)多番的學(xué)習(xí),才知道 分布式計(jì)算
是個(gè)非常龐大的體系饭庞,spring cloud
這套微服務(wù)開(kāi)發(fā)框架所包含的知識(shí)點(diǎn)只不過(guò)是很小的一部分戒悠。說(shuō)到 分布式計(jì)算
,就不得不提 拜占庭將軍問(wèn)題
舟山,業(yè)界基于這套理論衍生出很多組件:
中間件名稱(chēng) | 作用 |
---|---|
redis | 分布式鎖 |
zookeeper | 分布式鎖/同步 |
RocketMQ | 分布式事務(wù) |
xxl-job | 分布式任務(wù)調(diào)度 |
elastic-job | 分布式任務(wù)調(diào)度 |
... | ....... |
說(shuō)了這么多绸狐,事實(shí)上只涵蓋 分布式計(jì)算
很小的一部分,但對(duì)于一個(gè)普通的 Java Web
開(kāi)發(fā)人員來(lái)說(shuō)捏顺,掌握這點(diǎn)知識(shí)點(diǎn)已經(jīng)足夠他在北上廣深拿一兩萬(wàn)工資六孵,過(guò)過(guò)普通日子。
然而即便如此幅骄,在實(shí)際的開(kāi)發(fā)流程中劫窒,Spring Cloud
這套框架還是暴露出它的致命弱點(diǎn):
- 侵入性非常強(qiáng)
- 不支持異構(gòu)應(yīng)用
首先說(shuō)說(shuō) Spring Cloud
侵入性的一面,強(qiáng)侵入性導(dǎo)致了在將以前單體應(yīng)用改造為模塊化的微服務(wù)遇到非常多的麻煩拆座,其中最大的問(wèn)題是 微服務(wù)化改造
過(guò)程非常耗時(shí)耗力主巍,卻沒(méi)有給公司帶來(lái)任何短期收益,而且占用原本的產(chǎn)品研發(fā)的人力物力挪凑。面對(duì)這種情況孕索,一般的公司都會(huì)選擇一邊交付新功能,一邊改造舊服務(wù)的策略躏碳。
其次搞旭,說(shuō)起 異構(gòu)應(yīng)用
,不得不說(shuō)“明日黃花” PHP
和 “后起之秀” NodeJS
。
過(guò)去很多公司會(huì)采用 PHP
開(kāi)發(fā) Web應(yīng)用
肄渗,然而隨著 NodeJS
不斷崛起镇眷,業(yè)界流行起 前后端分離
浪潮,PHP
生態(tài)雖然受到一定的沖擊翎嫡,但不致命欠动。
然而,一波未平一波又起惑申,業(yè)界又興起 微服務(wù)化
的浪潮具伍,不同于以前的是,這次 PHP
徹底掉隊(duì)了圈驼。
之前我在面試的時(shí)候人芽,遇到一個(gè)唯品會(huì)出來(lái)的10年開(kāi)發(fā)經(jīng)驗(yàn)的 PHP
程序員。聽(tīng)他說(shuō)绩脆,前幾年公司招了一個(gè)技術(shù)老總啼肩,中層管理大換血,公司的主要技術(shù)棧也從 PHP
轉(zhuǎn)向 Java
衙伶,他也轉(zhuǎn)向 Java
開(kāi)發(fā)祈坠,然而還是逃不過(guò)被裁員的命運(yùn)。矢劲。赦拘。
這里腦洞大開(kāi)一下:如果 Spring Cloud
支持 異構(gòu)應(yīng)用
,或許 唯品會(huì)
就不需要付出巨大代價(jià)用 Java
重寫(xiě) PHP
應(yīng)用芬沉,PHP
程序員也不用面臨大規(guī)模裁員的困境躺同。
Spring Cloud
不支持 異構(gòu)應(yīng)用
這一特點(diǎn),就是一把雙刃劍丸逸,雖然干掉宿敵 PHP
蹋艺,但并不代表 Java
開(kāi)發(fā)人員就可以高枕無(wú)憂(yōu)。
Spring Cloud
的高光時(shí)刻已經(jīng)過(guò)去了黄刚,黑暗即將來(lái)臨:先是 Eureka
和 Zuul
閉源捎谨,后面雖然有 Nacos
和 Gateway
等代替品,但依舊沒(méi)解決 侵入性強(qiáng)
和 不支持異構(gòu)應(yīng)用
的致命缺陷憔维。
因此面對(duì)即將來(lái)臨的 云原生時(shí)代
涛救,Java
根本就沒(méi)有準(zhǔn)備好!
2019:云原生時(shí)代的曙光
過(guò)去的 2019年
可以說(shuō)是 云原生
元年业扒。
這一年里检吆,Kubernetes
擊敗了 Docker Swarm
、Docker Compose
和 Mesos
等一眾對(duì)手程储,坐穩(wěn) 容器編排
的 第一把交椅
這一年里蹭沛,Istio
擊敗了 對(duì)手 Linkerd
臂寝,成為 Service Mesh
的一哥,劍指曾經(jīng)的大佬 Spring Cloud
摊灭,大有取而代之的趨勢(shì)交煞。
說(shuō)起 Istio
不得不提 Service Mesh
,Service Mesh
中文意思就是 服務(wù)網(wǎng)格
斟或。而在談之前,還需要討論一下 Docker
集嵌。
早在 2015 年萝挤,我就聽(tīng)說(shuō) Docker
的大名。那時(shí)候我還在上大學(xué)根欧,每次因?yàn)檎n程作業(yè)或畢業(yè)設(shè)計(jì)的緣故需要安裝數(shù)據(jù)庫(kù)怜珍,而 SQL Server
和 MySQL
兩者經(jīng)常發(fā)生沖突,每次沖突都只能通過(guò)重裝系統(tǒng)解決凤粗,每個(gè)學(xué)期重裝一次系統(tǒng)都是家常便飯酥泛。雖然想過(guò)裝虛擬機(jī),但那個(gè)時(shí)候的固態(tài)硬盤(pán)和內(nèi)存都特別貴嫌拣,裝完虛擬機(jī)后就卡得要死柔袁。
當(dāng)聽(tīng)到 Docker
的時(shí)候,我就想用它來(lái)代替虛擬機(jī)异逐,然而 Docker
并不支持 Windows
捶索,還需要安裝 Linux
虛擬機(jī)才行,所以后面就不了了之灰瞻。
我敢打包票腥例,即便到了現(xiàn)在依然很多人就跟當(dāng)年的我一樣認(rèn)為 Docker
就是一個(gè)輕量級(jí)的虛擬機(jī),所以在 容器
里運(yùn)行 MySQL
性能會(huì)遠(yuǎn)低于 原生
Mysql酝润,這其實(shí)是一個(gè)天大的 誤會(huì)
燎竖!
然而,即便到了 2019 年要销,Docker
已經(jīng)支持 Windows
容器构回,我終于可以運(yùn)行 容器化
的 SQL Server, 然而在 Windows
上運(yùn)行 Docker
還是需要安裝一個(gè)輕量級(jí) Linux
虛擬機(jī)疏咐。
原因就是 Docker
運(yùn)行容器的時(shí)候捐凭,容器之間需要 共享
宿主OS,所以沒(méi)有 Linux
虛擬機(jī)凳鬓,根本跑不了 Linux
容器茁肠。
那么在 Windows
上運(yùn)行 Windows容器
是不是就不用安裝 Linux
?答案是并沒(méi)有缩举。原因是 docker
在運(yùn)行時(shí)需要運(yùn)行守護(hù)進(jìn)程 docker daemon
等監(jiān)控維持容器運(yùn)行的組件垦梆,所以還是需要運(yùn)行 Linux
虛擬機(jī)匹颤。
連以兼容 類(lèi)Unix
著稱(chēng)的 Mac OS
,在運(yùn)行 docker
的時(shí)候托猩,都必須安裝虛擬化軟件 Virtual Box
印蓖,更遑論 以封閉著稱(chēng)的Windows
。
好了京腥,聊太多題外話(huà)赦肃,現(xiàn)在回歸正題。
在實(shí)踐 spring cloud
和 docker
的微服務(wù)框架時(shí)公浪,最常見(jiàn)的問(wèn)題他宛,無(wú)非就是用 docker
部署 eureka
集群,經(jīng)常遇到 注冊(cè)中心
和 微服務(wù)
組件網(wǎng)絡(luò)不通的問(wèn)題欠气。
這時(shí)候厅各,見(jiàn)多識(shí)廣的人會(huì)提議使用 compose
或 swarm
來(lái)部署,這不過(guò)是還抱有 Docker 是虛擬機(jī)
那種錯(cuò)誤認(rèn)識(shí)的人的無(wú)奈之舉预柒。
隨著微服務(wù)數(shù)量的不斷增多队塘,單純的手工部署和功能羸弱的 compose
和 swarm
已經(jīng)無(wú)法勝任越來(lái)越復(fù)雜的容器編排工作。
這時(shí)候宜鸯,體量稍微大一點(diǎn)的公司都會(huì)招聘專(zhuān)業(yè)的運(yùn)維來(lái)搞定容器編排的事情憔古,就輪到 kubernetes
閃亮登場(chǎng)了。
許多連 docker
都沒(méi)整利索的開(kāi)發(fā)人員淋袖,一看到 kubernets
就心里發(fā)虛投放,這就又是個(gè)什么玩意?
但公司新來(lái)的技術(shù)總監(jiān)适贸,又給老總吹噓:硅谷的互聯(lián)網(wǎng)巨頭都開(kāi)始使用 DevOps
模式來(lái)管理研發(fā)灸芳,它可以縮短產(chǎn)品的迭代周期,提高公司競(jìng)爭(zhēng)力等等拜姿。
老總聽(tīng)完烙样,說(shuō)開(kāi)發(fā)整了個(gè) Spring Cloud
之后,天天搞重構(gòu)蕊肥,產(chǎn)品研發(fā)進(jìn)度嚴(yán)重滯后谒获,你就別給我添亂了。
技術(shù)總監(jiān)是何等人物壁却? 只見(jiàn)他眉頭一挑批狱,說(shuō)道:Spring Cloud已經(jīng)落伍了,改用Istio展东,就不用重構(gòu)以前的 PHP
項(xiàng)目赔硫,新出的 NodeJS
也支持。
老總被說(shuō)服了盐肃,反正現(xiàn)在被 Spring Cloud
整得不上不下的爪膊,就死馬當(dāng)做活馬醫(yī)吧权悟。
于是,公司上下一下子又活躍起來(lái):開(kāi)口 流水線(xiàn)
推盛,閉口 滾動(dòng)升級(jí)
峦阁。
那么,k8s
究竟是何方神圣耘成?下面我就拿 K8S
以及 Istio
的概念和 Spring Cloud
對(duì)比一下:
k8s概念 | spring cloud概念 | 功能 |
---|---|---|
pod | container | 部署的基本單位 |
service | eureka | 服務(wù)注冊(cè)與發(fā)現(xiàn) |
ingress | zuul | 網(wǎng)關(guān)路由榔昔、反向代理 |
dns server | feign | 負(fù)載均衡 |
config map | config | 配置管理 |
istio envoy | hystrix | 熔斷降級(jí) |
istio envoy | seluth & zipkin | 鏈路追蹤 |
deployment | 災(zāi)備擴(kuò)容 | |
StatefullSet | 有狀態(tài)集群 |
以上的比較并不充分體現(xiàn)兩者的差異,也不完全準(zhǔn)確瘪菌,僅供參考撒会。
到這里,基本上就是大多數(shù)人公司和開(kāi)發(fā)掉進(jìn)坑里的地方控嗜。Istio
雖然好,但如何落地依然是很多人心頭的一塊大石骡显。
2020 Serverless 后浪
前面提到疆栏, 2019年很多公司剛從 Spring Cloud
的坑里爬出來(lái),又遇到 Istio
的這個(gè)攔路虎惫谤。
然而壁顶,時(shí)代的滾輪不斷向前,不會(huì)因?yàn)槿魏我粋€(gè)人或者組織團(tuán)體而停下
營(yíng)銷(xiāo)大師 馬云
提出 中臺(tái)
就是 云原生
的終極形態(tài)溜歪,忽悠了一大批互聯(lián)網(wǎng)企業(yè)的高管若专。一時(shí)間,中臺(tái)
成為互聯(lián)網(wǎng)行業(yè)的 皇帝新衣
蝴猪,問(wèn)誰(shuí)都說(shuō)知道 中臺(tái)
是什么调衰,但深究起來(lái),卻沒(méi)幾個(gè)人能準(zhǔn)確回答上來(lái)自阱。
后面大佬們回過(guò)神來(lái)嚎莉,原來(lái) 中臺(tái)
就是 云原生時(shí)代
的 應(yīng)用商店
。不愧是互聯(lián)網(wǎng)界的忽悠大師沛豌!
隨之而來(lái)趋箩,還有 邊緣計(jì)算
,折騰大半年得出一個(gè)由 K8S
閹割而來(lái)的 K3S
加派,美其名曰 輕量級(jí)K8S
叫确。
2020開(kāi)年就是一場(chǎng)突如其來(lái)的疫情,轉(zhuǎn)眼間 2020年 已經(jīng)過(guò)了大半芍锦,互聯(lián)網(wǎng)行業(yè)能炒作的噱頭都炒完了竹勉,只剩下 Serverless
這個(gè)后浪還能堅(jiān)持到最后。
Serverless
出來(lái)到現(xiàn)在娄琉,都跟 中臺(tái)
概念一樣饶米,人人都在談桨啃,但沒(méi)有人能夠準(zhǔn)確地說(shuō) Serverless
到底是什么,直到后起之秀 NodeJS
祭出終極大殺招 WASM
檬输,一時(shí)間幾乎所有語(yǔ)言生態(tài)都想分一杯羹照瘾。紛紛放出將自家的 WASM轉(zhuǎn)換
工具,亞馬遜也宣布旗下開(kāi)源的 Serverless
運(yùn)行時(shí) firecracker
支持 WASM
丧慈。
至此析命,業(yè)界才知道誰(shuí)才是真正的 后浪
。