從MegaEase看云原生
MegaEase是左耳朵耗子創(chuàng)辦的公司,一家?guī)椭髽I(yè)上云、企業(yè)數(shù)字化的公司。其產(chǎn)品主要圍繞于CloudNative方向,希望通過(guò)CloudNative方式幫助企業(yè)解決業(yè)務(wù)需求變化迅速、支持大規(guī)模在線、系統(tǒng)更穩(wěn)定、更低成本的架構(gòu)可控。
左耳朵耗子是業(yè)界知名技術(shù)大牛,其對(duì)云原生的理解我還是非常相信的,相信很多人對(duì)于云原生很熟悉,但究竟什么是云原生可能也不是很明白,結(jié)合MegaEase的技術(shù)產(chǎn)品,我們可以從側(cè)面去了解下云原生。
數(shù)字化時(shí)代企業(yè)發(fā)展有哪些要求呢?
需求迭代頻繁,變更速度要求高;
大規(guī)模用戶(hù)在線;
整個(gè)系統(tǒng)穩(wěn)定性要求更高;
場(chǎng)景更多,數(shù)據(jù)更多;
自主可控,成本低;
要讓系統(tǒng)滿(mǎn)足這樣的設(shè)計(jì)要求,需要有專(zhuān)門(mén)的規(guī)劃和大量的專(zhuān)業(yè)技術(shù)方案實(shí)現(xiàn)。
MegaEase希望將這些能力不斷沉下來(lái)提供給用戶(hù),滿(mǎn)足用戶(hù)低成本的實(shí)現(xiàn)企業(yè)數(shù)字化轉(zhuǎn)型。
上面聊的是企業(yè)發(fā)展階段遇到的問(wèn)題與挑戰(zhàn),那為什么云原生可以解決這些問(wèn)題呢?
那就得先說(shuō)說(shuō)云原生特點(diǎn),云原生是把云計(jì)算的核心技術(shù)拿出來(lái)直接無(wú)縫集成到應(yīng)用層,讓?xiě)?yīng)用一出生就是云化的,對(duì)用戶(hù)來(lái)說(shuō)就沒(méi)有上云不上云的概念了,他一直在云上。
谷歌當(dāng)年把自己的搜索服務(wù)放在了不穩(wěn)定的x86+linux機(jī)器上,服務(wù)還賊穩(wěn)定,他們可以視為一出生就在云上的公司了。
李彥宏也說(shuō)過(guò)類(lèi)似的話(huà),當(dāng)年李彥宏說(shuō):云計(jì)算不過(guò)是新瓶裝舊酒,沒(méi)啥新技術(shù)。很多人罵他,說(shuō)他沒(méi)有前瞻能力。李彥宏后來(lái)說(shuō):因?yàn)榘俣鹊谝惶炀驮谠粕?,大?guī)模存儲(chǔ)計(jì)算,所以對(duì)百度來(lái)說(shuō),云沒(méi)啥新意。
那云原生和云計(jì)算啥區(qū)別呢?云原生是把原有云計(jì)算資源型方式轉(zhuǎn)向了以應(yīng)用和服務(wù)的方向。
比如云原生下的Serverless、Service Mesh、K8S、API Managment、MicroService都可以說(shuō)是在應(yīng)用服務(wù)層面的事情,不再是基礎(chǔ)資源了。

目前云原生技術(shù)很龐雜,下面這些產(chǎn)品都說(shuō)自己是云原生應(yīng)用:

好的架構(gòu)的核心是要有一套精良設(shè)計(jì)的控制和調(diào)度系統(tǒng)。
云計(jì)算就是在調(diào)度,調(diào)度需要很多控制系統(tǒng)。通過(guò)流量調(diào)度、資源調(diào)度、服務(wù)調(diào)度這三個(gè)控制系統(tǒng),可以讓整個(gè)架構(gòu)在性能、穩(wěn)定性、可運(yùn)維性上有很大提升。
想要從這么多的云原生公司里面脫穎而出,需要有些噱頭。比如:一行代碼不改做秒殺;用戶(hù)進(jìn)行全鏈路灰度、無(wú)入侵的全鏈路壓測(cè);灰度發(fā)布系統(tǒng)、高可用中間件、跨數(shù)據(jù)中心多活等。
說(shuō)的無(wú)外乎是,低入侵,讓用戶(hù)應(yīng)用改造成本到0。
怎么低入侵呢?基本是java字節(jié)碼注入、sidecar、網(wǎng)關(guān)等。
這倒是和我的架構(gòu)價(jià)值觀相同:
架構(gòu)迭代是沒(méi)有終點(diǎn)的,只不過(guò)是有迭代階段,不要讓一個(gè)階段的技術(shù)迭代變成下一階段的技術(shù)債。
架構(gòu)分成兩部分:技術(shù)相關(guān)、業(yè)務(wù)相關(guān)。業(yè)務(wù)內(nèi)核如果變化太大,不如重新搭建個(gè)系統(tǒng)。技術(shù)層面,要留有擴(kuò)展性,低侵入最好。
MegaEase的方式之一是通過(guò)網(wǎng)關(guān),只不過(guò)他的網(wǎng)關(guān)不是簡(jiǎn)單的nginx這種反向代理,而是在里面也融合了一些擴(kuò)展能力。
他的網(wǎng)關(guān)由Go插件+WebAssemebly+FaaS組成。

方式之二是Mesh,Mesh解決的是端到端的流量調(diào)度,也就實(shí)現(xiàn)了用戶(hù)一行代碼不改,實(shí)現(xiàn)服務(wù)治理、服務(wù)監(jiān)控、調(diào)用鏈追蹤、流量著色、用戶(hù)灰度等功能。因?yàn)檫@些事都可以通過(guò)Sidecar實(shí)現(xiàn),當(dāng)然不需要改代碼了。
他的Mesh方案支持和SpringCloud綁定,和K8S對(duì)比如下:

他使用網(wǎng)關(guān)做邊車(chē)和流量網(wǎng)關(guān),使用agent做java Agent服務(wù)內(nèi)部監(jiān)控。這樣Sidecar和JavaAgent都是非入侵的,也就實(shí)現(xiàn)了不改代碼的低侵入。


通過(guò)Mesh還可以實(shí)現(xiàn)壓測(cè)功能:

第三部分是觀測(cè)性和運(yùn)維性的能力,是通過(guò)鏈路追蹤+監(jiān)控做的。不是簡(jiǎn)單的一個(gè)監(jiān)控告警平臺(tái)。一個(gè)好的監(jiān)控不僅要收集監(jiān)控?cái)?shù)據(jù),還要關(guān)聯(lián)數(shù)據(jù),數(shù)據(jù)不關(guān)聯(lián)則沒(méi)有意義。
鏈路串起多個(gè)中間件,API->服務(wù)調(diào)用->應(yīng)用日志->中間件->底層資源數(shù)據(jù),這樣可以說(shuō)清楚某臺(tái)服務(wù)器會(huì)影響對(duì)外的哪些API,且判斷某個(gè)邊緣服務(wù)是否會(huì)影響到核心鏈路。

以上差不多是MegaEase提供的一些云原生解決方案,圍繞于Mesh、網(wǎng)關(guān)、運(yùn)維可觀測(cè)性等,用到的技術(shù)無(wú)外乎也是Sidecar、K8S、Agent這些耳熟能詳?shù)募夹g(shù),屬于術(shù)的層面。
而云原生的價(jià)值在我來(lái)看是其概念或方法論,也就是要求我們后續(xù)服務(wù)的設(shè)計(jì)要面向云而設(shè)計(jì),這才是道。
道往往比術(shù)更重要。
