云原生時(shí)代下的Java“拯救者”
在云原生時(shí)代晌块,其實(shí)Java程序是有很大的劣勢(shì)的爱沟,以最流行的spring boot/spring cloud微服務(wù)框架為例,啟動(dòng)一個(gè)已經(jīng)優(yōu)化好匆背,很多bean需要lazy load的application至少需要3-4秒時(shí)間呼伸,內(nèi)存需要幾百M(fèi),業(yè)務(wù)邏輯稍微復(fù)雜一點(diǎn)點(diǎn)钝尸,沒有1G以上的內(nèi)存是很難滿足業(yè)務(wù)的需要呢括享?
在討論夸克斯(Quarkus)之前,我們先了解一下什么是云原生珍促。為什么說下一代Java云原生服務(wù)就是Quarkus铃辖?
云原生架構(gòu)簡介
Cloud Native(云原生),這是一個(gè)既陌生又熟悉的名詞踢星,它是Matt Stine提出的一個(gè)概念澳叉,它是一個(gè)思想的集合隙咸,包括:DevOps、持續(xù)交付(Continuous Delivery)成洗、微服務(wù)(MicroServices)五督、敏捷基礎(chǔ)設(shè)施(Agile Infrastructure)、康威定律(Conways Law)等瓶殃。
Cloud Native(云原生)準(zhǔn)確來說也是一種文化充包,更是一種潮流,它是云計(jì)算的一個(gè)必然導(dǎo)向遥椿,意義在于讓云成為云化戰(zhàn)略成功的基石基矮,而不是障礙。
Cloud Native(云原生)的特點(diǎn)和方面:
- 技術(shù)(微服務(wù)冠场,敏捷基礎(chǔ)設(shè)施)
- 管理(DevOps家浇,持續(xù)交付,康威定律碴裙,重組等)
Cloud Native也可以說是一系列Cloud技術(shù)钢悲、企業(yè)管理方法的集合。
Cloud Native(云原生)的定義和概念
Cloud Native(云原生)是更好的工具舔株、自我修復(fù)系統(tǒng)莺琳、和自動(dòng)化系統(tǒng)的集合,可以讓應(yīng)用和基礎(chǔ)設(shè)施的部署和故障修復(fù)更加快速和敏捷载慈,極大的降低企業(yè)在云計(jì)算方面的部署成本惭等。
目前業(yè)界公認(rèn)的云原生主要包括以下幾個(gè)層面的內(nèi)容。
容器办铡,服務(wù)網(wǎng)格辞做,微服務(wù),不可變的基礎(chǔ)設(shè)施料扰,公開的API都接近云原生相關(guān)概念凭豪。
云原生技術(shù)可以讓系統(tǒng)松耦合,支持彈性伸縮晒杈、可管理的、清晰的孔厉。
隨著容器拯钻、kubernetes、Serverless撰豺、FaaS技術(shù)的演進(jìn)粪般,CNCF(Cloud Native Computing Foundation ,云原生計(jì)算基金會(huì))把云原生的概念更廣泛地定義為“讓應(yīng)用更有彈性污桦、容錯(cuò)性亩歹、觀測(cè)性的基礎(chǔ)技術(shù),讓應(yīng)用更容易部署、管理的基礎(chǔ)軟件小作、讓應(yīng)用更容易編寫亭姥、編排的運(yùn)行框架等”,希望能夠讓開發(fā)者最好的利用云的資源顾稀、產(chǎn)品和交付能力达罗。
云原生的發(fā)展歷程
- 2004 年 ~ 2007 年,Google 已在內(nèi)部大規(guī)模地使用像 Cgroups 這樣的容器技術(shù)静秆;
- 2008 年粮揉,Google 將 Cgroups 合并進(jìn)入了 Linux 內(nèi)核主干。
- 2013 年抚笔,Docker 項(xiàng)目正式發(fā)布扶认。
- 2014 年,Kubernetes 項(xiàng)目也正式發(fā)布殊橙。
- Kubernetes項(xiàng)目發(fā)布的原因也非常容易理解辐宾,因?yàn)橛辛巳萜骱?Docker 之后,就需要有一種方式去幫助大家方便蛀柴、快速螃概、優(yōu)雅地管理這些容器,這就是 Kubernetes 項(xiàng)目的初衷鸽疾。在 Google 和 Redhat 發(fā)布了 Kubernetes 之后吊洼,這個(gè)項(xiàng)目的發(fā)展速度非常之快。
- 2015 年制肮,CNCF 成立冒窍。
- 由 Google、Redhat 以及微軟等大型云計(jì)算廠商以及一些開源公司共同牽頭成立了 CNCF 云原生基金會(huì)豺鼻。CNCF 成立之初综液,就有 22 個(gè)創(chuàng)始會(huì)員,而且 Kubernetes 也成為了 CNCF 托管的第一個(gè)開源項(xiàng)目儒飒。
- 2017 年谬莹,CNCF 達(dá)到 170 個(gè)成員和 14 個(gè)基金項(xiàng)目。
- 2018 年桩了,CNCF 成立三周年有了 195 個(gè)成員附帽,19 個(gè)基金會(huì)項(xiàng)目和 11 個(gè)孵化項(xiàng)目,如此之快的發(fā)展速度在整個(gè)云計(jì)算領(lǐng)域都是非常罕見的井誉。
云原生技術(shù)生態(tài)現(xiàn)狀
因此蕉扮,如今我們所討論的云原生技術(shù)生態(tài)是一個(gè)龐大的技術(shù)集合。CNCF 有一張?jiān)圃皥D(https://github.com/cncf/landscape)颗圣,在這個(gè)全景圖里已經(jīng)有 200 多個(gè)項(xiàng)目和產(chǎn)品了喳钟,這些項(xiàng)目和產(chǎn)品也都是和 CNCF 的觀點(diǎn)所契合的屁使。所以如果以這張全景圖作為背景,加以思考就會(huì)發(fā)現(xiàn)奔则,我們今天所討論的云原生其實(shí)主要談?wù)摿艘韵聨c(diǎn):
云原生基金會(huì) —— CNCF
CNCF是目前云計(jì)算領(lǐng)域最成功的開源基金會(huì)之一蛮寂,是 Kubernetes、 etcd应狱、Envoy 等知名開源項(xiàng)目的托管基金會(huì)共郭。
云原生技術(shù)社區(qū)
比如像 CNCF 目前正式托管的多個(gè)項(xiàng)目共同構(gòu)成了現(xiàn)代云計(jì)算生態(tài)的基石,其中像 Kubernetes這樣的項(xiàng)目已經(jīng)成為了世界首屈一指疾呻,非吵冢活躍的開源項(xiàng)目;目前從 CNCF 畢業(yè)的項(xiàng)目有很多岸蜗,例如Kubernetes 尉咕、Prometheus、Envoy璃岳、CoreDNS年缎、containerd、Fluentd 铃慷。
云原生服務(wù)架構(gòu)的原則
高可用架構(gòu)設(shè)計(jì)的原則
可觀測(cè):可以通過運(yùn)行狀態(tài)和數(shù)據(jù)分析单芜,實(shí)現(xiàn)可觀測(cè)模式下的運(yùn)行狀態(tài)和運(yùn)行數(shù)據(jù)分析。
可灰度:可以實(shí)現(xiàn)藍(lán)綠發(fā)布犁柜、AB測(cè)試洲鸠、金絲雀發(fā)布機(jī)制等,實(shí)現(xiàn)數(shù)據(jù)服務(wù)的流量控制馋缅。
可回滾:可以實(shí)現(xiàn)服務(wù)的fallback和reback回滾方式扒腕。
提高架構(gòu)可用性的設(shè)計(jì)原則
解耦:消息隊(duì)列、分布式隊(duì)列萤悴、服務(wù)拆分
冗余:異地容災(zāi)瘾腰、多點(diǎn)部署、主從切換
異構(gòu):sidercar模式進(jìn)行分析和實(shí)現(xiàn)
異步:消息隊(duì)列覆履、異步調(diào)用蹋盆、響應(yīng)式編程
微服務(wù)設(shè)計(jì)原則
盜用官方圖片一個(gè):
原則一:完整性
功能完整性:功能內(nèi)部邏輯獨(dú)立,外部依賴較少硝全。
微服務(wù)完整性:服務(wù)里面的每個(gè)微服務(wù)都應(yīng)能獨(dú)立完成具體的業(yè)務(wù)操作或者流程怪嫌,都有明確的輸入、輸出和處理邏輯柳沙。
原則二:技術(shù)限制
需要使用事務(wù)一致性的功能需要放在一個(gè)微服務(wù)內(nèi),盡量避免分布式事務(wù)問題拌倍。
原則三:性能擴(kuò)展
對(duì)于用戶使用頻率較高赂鲤,性能要求較高的功能可單獨(dú)作為一個(gè)微服務(wù)噪径,以便做多節(jié)點(diǎn)擴(kuò)展提升性能。
原則四:耦合性
微服務(wù)和微服務(wù)之間盡量避免相互調(diào)用依賴数初≌野可以通過 RPC 遠(yuǎn)程調(diào)用接口的方式,對(duì)于關(guān)聯(lián)性較高的功能泡孩,應(yīng)放在同一個(gè)微服務(wù)內(nèi)车摄。
公共使用的功能可設(shè)計(jì)在一個(gè)公共微服務(wù)。比如日志功能仑鸥,文件上傳功能以及一些底層技術(shù)組件等吮播,可設(shè)計(jì)在一個(gè)微服務(wù)中。