2018年剛開始接觸 sprig cloud
的時候,還不知道 分佈式計算
的概念,只知道 Netflix
開源了一套 微服務框架
,裏面有不少組件組成:程序員
組件名稱 | 做用 |
---|---|
eureka | 服務註冊與發現 |
zuul | 網關路由、反向代理 |
feign | 客戶端側負載均衡 |
hystrix | 熔斷降級 |
seluth & zipkin | 鏈路追蹤 |
config | 配置管理 |
... | ....... |
當時按照書上所教的,搭建一個微服務 demo
,就覺得 微服務
不過如此。興沖沖跑去面試,結果遇到一個阿里出來的大佬,他說「只會問你懂的東西,不會問我懂你不懂的東西」,結果就被大佬問到 分佈式鎖
、分佈式事務
和 分佈式任務調度
要怎麼解決?問得我啞口無言,只能灰溜溜地回去。。。面試
後面通過多番的學習,才知道 分佈式計算
是個很是龐大的體系,spring cloud
這套微服務開發框架所包含的知識點只不過是很小的一部分。說到 分佈式計算
,就不得不提 拜占庭將軍問題
,業界基於這套理論衍生出不少組件:redis
中間件名稱 | 做用 |
---|---|
redis | 分佈式鎖 |
zookeeper | 分佈式鎖/同步 |
RocketMQ | 分佈式事務 |
xxl-job | 分佈式任務調度 |
elastic-job | 分佈式任務調度 |
... | ....... |
說了這麼多,事實上只涵蓋 分佈式計算
很小的一部分,但對於一個普通的 Java Web
開發人員來講,掌握這點知識點已經足夠他在北上廣深拿一兩萬工資,過過普通日子。spring
然而即使如此,在實際的開發流程中,Spring Cloud
這套框架仍是暴露出它的致命弱點:sql
首先說說 Spring Cloud
侵入性的一面,強侵入性致使了在將之前單體應用改造爲模塊化的微服務遇到很是多的麻煩,其中最大的問題是 微服務化改造
過程很是耗時耗力,卻沒有給公司帶來任何短時間收益,並且佔用本來的產品研發的人力物力。面對這種狀況,通常的公司都會選擇一邊交付新功能,一邊改造舊服務的策略。docker
其次,提及 異構應用
,不得不說「明日黃花」 PHP
和 「後起之秀」 NodeJS
。數據庫
過去不少公司會採用 PHP
開發 Web應用
,然而隨着 NodeJS
不斷崛起,業界流行起 先後端分離
浪潮,PHP
生態雖然受到必定的衝擊,但不致命。後端
然而,一波未平一波又起,業界又興起 微服務化
的浪潮,不一樣於之前的是,此次 PHP
完全掉隊了。網絡
以前我在面試的時候,遇到一個惟品會出來的10年開發經驗的 PHP
程序員。聽他說,前幾年公司招了一個技術老總,中層管理大換血,公司的主要技術棧也從 PHP
轉向 Java
,他也轉向 Java
開發,然而仍是逃不過被裁人的命運。。。負載均衡
這裏腦洞大開一下:若是 Spring Cloud
支持 異構應用
,或許 惟品會
就不須要付出巨大代價用 Java
重寫 PHP
應用,PHP
程序員也不用面臨大規模裁人的困境。
Spring Cloud
不支持 異構應用
這一特色,就是一把雙刃劍,雖然幹掉宿敵 PHP
,但並不表明 Java
開發人員就能夠高枕無憂。
Spring Cloud
的高光時刻已通過去了,黑暗即未來臨:先是 Eureka
和 Zuul
閉源,後面雖然有 Nacos
和 Gateway
等代替品,但依舊沒解決 侵入性強
和 不支持異構應用
的致命缺陷。
所以面對即未來臨的 雲原生時代
,Java
根本就沒有準備好!
過去的 2019年
能夠說是 雲原生
元年。
這一年裏,Kubernetes
擊敗了 Docker Swarm
、Docker Compose
和 Mesos
等一衆對手,坐穩 容器編排
的 第一把交椅
這一年裏,Istio
擊敗了 對手 Linkerd
,成爲 Service Mesh
的一哥,劍指曾經的大佬 Spring Cloud
,大有取而代之的趨勢。
提及 Istio
不得不提 Service Mesh
,Service Mesh
中文意思就是 服務網格
。而在談以前,還須要討論一下 Docker
。
早在 2015 年,我就據說 Docker
的大名。那時候我還在上大學,每次由於課程做業或畢業設計的緣故須要安裝數據庫,而 SQL Server
和 MySQL
二者常常發生衝突,每次衝突都只能經過重裝系統解決,每一個學期重裝一次系統都是屢見不鮮。雖然想過裝虛擬機,但那個時候的固態硬盤和內存都特別貴,裝完虛擬機後就卡得要死。
當聽到 Docker
的時候,我就想用它來代替虛擬機,然而 Docker
並不支持 Windows
,還須要安裝 Linux
虛擬機才行,因此後面就不了了之。
我敢打包票,即使到了如今依然不少人就跟當年的我同樣認爲 Docker
就是一個輕量級的虛擬機,因此在 容器
裏運行 MySQL
性能會遠低於 原生
Mysql,這實際上是一個天大的 誤會
!
然而,即使到了 2019 年,Docker
已經支持 Windows
容器,我終於能夠運行 容器化
的 SQL Server, 然而在 Windows
上運行 Docker
仍是須要安裝一個輕量級 Linux
虛擬機。
緣由就是 Docker
運行容器的時候,容器之間須要 共享
宿主OS,因此沒有 Linux
虛擬機,根本跑不了 Linux
容器。
那麼在 Windows
上運行 Windows容器
是否是就不用安裝 Linux
?答案是並無。緣由是 docker
在運行時須要運行守護進程 docker daemon
等監控維持容器運行的組件,因此仍是須要運行 Linux
虛擬機。
連以兼容 類Unix
著稱的 Mac OS
,在運行 docker
的時候,都必須安裝虛擬化軟件 Virtual Box
,更遑論 以封閉著稱的Windows
。
好了,聊太多題外話,如今迴歸正題。
在實踐 spring cloud
和 docker
的微服務框架時,最多見的問題,無非就是用 docker
部署 eureka
集羣,常常遇到 註冊中心
和 微服務
組件網絡不通的問題。
這時候,見多識廣的人會提議使用 compose
或 swarm
來部署,這不過是還抱有 Docker 是虛擬機
那種錯誤認識的人的無奈之舉。
隨着微服務數量的不斷增多,單純的手工部署和功能羸弱的 compose
和 swarm
已經沒法勝任愈來愈複雜的容器編排工做。
這時候,體量稍微大一點的公司都會招聘專業的運維來搞定容器編排的事情,就輪到 kubernetes
閃亮登場了。
許多連 docker
都沒整利索的開發人員,一看到 kubernets
就內心發虛,這就又是個什麼玩意?
但公司新來的技術總監,又給老總吹噓:硅谷的互聯網巨頭都開始使用 DevOps
模式來管理研發,它能夠縮短產品的迭代週期,提升公司競爭力等等。
老總聽完,說開發整了個 Spring Cloud
以後,每天搞重構,產品研發進度嚴重滯後,你就別給我添亂了。
技術總監是何等人物? 只見他眉頭一挑,說道:Spring Cloud已經落伍了,改用Istio,就不用重構之前的 PHP
項目,新出的 NodeJS
也支持。
老總被說服了,反正如今被 Spring Cloud
整得不上不下的,就死馬當作活馬醫吧。
因而,公司上下一會兒又活躍起來:開口 流水線
,閉口 滾動升級
。
那麼,k8s
到底是何方神聖?下面我就拿 K8S
以及 Istio
的概念和 Spring Cloud
對比一下:
k8s概念 | spring cloud概念 | 功能 |
---|---|---|
pod | container | 部署的基本單位 |
service | eureka | 服務註冊與發現 |
ingress | zuul | 網關路由、反向代理 |
dns server | feign | 負載均衡 |
config map | config | 配置管理 |
istio envoy | hystrix | 熔斷降級 |
istio envoy | seluth & zipkin | 鏈路追蹤 |
deployment | 災備擴容 | |
StatefullSet | 有狀態集羣 |
以上的比較並不充分體現二者的差別,也不徹底準確,僅供參考。
到這裏,基本上就是大多數人公司和開發掉進坑裏的地方。Istio
雖然好,但如何落地依然是不少人心頭的一塊大石。
前面提到, 2019年不少公司剛從 Spring Cloud
的坑裏爬出來,又遇到 Istio
的這個攔路虎。
然而,時代的滾輪不斷向前,不會由於任何一我的或者組織團體而停下
營銷大師 馬雲
提出 中臺
就是 雲原生
的終極形態,忽悠了一大批互聯網企業的高管。一時間,中臺
成爲互聯網行業的 皇帝新衣
,問誰都說知道 中臺
是什麼,但深究起來,卻沒幾我的能準確回答上來。
後面大佬們回過神來,原來 中臺
就是 雲原生時代
的 應用商店
。不愧是互聯網界的忽悠大師!
隨之而來,還有 邊緣計算
,折騰大半年得出一個由 K8S
閹割而來的 K3S
,美其名曰 輕量級K8S
。
2020開年就是一場突如其來的疫情,轉眼間 2020年 已通過了大半,互聯網行業能炒做的噱頭都炒完了,只剩下 Serverless
這個後浪還能堅持到最後。
Serverless
出來到如今,都跟 中臺
概念同樣,人人都在談,但沒有人可以準確地說 Serverless
究竟是什麼,直到後起之秀 NodeJS
祭出終極大殺招 WASM
,一時間幾乎全部語言生態都想分一杯羹。紛紛放出將自家的 WASM轉換
工具,亞馬遜也宣佈旗下開源的 Serverless
運行時 firecracker
支持 WASM
。
至此,業界才知道誰纔是真正的 後浪
。