全面容器化之后,來電科技如何實現(xiàn)微服務(wù)治理?
發(fā)布時間:2022-01-13 點擊數(shù):759
MSE 服務(wù)治理幫助我們系統(tǒng)以很低的成本無侵入的方式快速實現(xiàn)了全鏈路灰度能力,進一步提升了我們系統(tǒng)的穩(wěn)定性,讓我們新需求的迭代上線更加地安心。
—來電科技架構(gòu)師 湯長征
來電科技自 2014 年起開始進入共享充電領(lǐng)域,定義并開創(chuàng)了行業(yè),屬于行業(yè)內(nèi)最早的共享充電企業(yè)。主要業(yè)務(wù)覆蓋充電寶自助租賃、定制商場導(dǎo)航機開發(fā)、廣告展示設(shè)備及廣告?zhèn)鞑サ确?wù)。來電科技擁有業(yè)內(nèi)立體化產(chǎn)品線,大中小機柜以及桌面型,目前全國超過 90% 的城市實現(xiàn)業(yè)務(wù)服務(wù)落地,注冊用戶超2億人,實現(xiàn)全場景用戶需求。
緣起:回顧來電科技當(dāng)時的業(yè)務(wù)、架構(gòu)現(xiàn)狀和痛點。
初見:分享在技術(shù)選型之路上我們?yōu)槭裁催x擇 阿里云微服務(wù)引擎 MSE(Microservices Engine,全文以下簡稱 MSE) 。
落地:我們是怎么一步步落地、在短時間內(nèi)低成本落地全鏈路灰度能力以及無損上下線等能力。
緣起
Cloud Native
來電科技內(nèi)部技術(shù)趨勢滿足如下三點
- 微服務(wù)全面落地
- 全面接入 K8s
- 快速迭代,穩(wěn)定發(fā)布的訴求
- 部署方便,發(fā)布效率大大提升
- 彈性擴縮容
- 大大節(jié)約服務(wù)器成本
- 運維成本降低
簡單講一下全面容器化給來電科技系統(tǒng)帶來的好處,首先就是應(yīng)用部署變得非常方便,同時由于 K8s 的標準化使得 CI/CD 也變得簡單,整體的發(fā)布效率大大提升;同時部署在 K8s 上的應(yīng)用天然具備彈性擴縮容的能力,可以有效應(yīng)對流量洪峰;同時由于上了 K8s 后,服務(wù)按需使用資源,相比原先按照峰值長期固定保有服務(wù)器,資源利用率相對比較低,現(xiàn)在可以大大節(jié)約服務(wù)器成本。相比傳統(tǒng)集群運維非常繁瑣,同時對運維人員技能要求也非常高:既要精通 lua /ansible 腳本等,又要懂云產(chǎn)品網(wǎng)絡(luò)配置和監(jiān)控運維。系統(tǒng)的運維成本非常高,阿里云容器服務(wù) ACK 的標準化界面能很好解決高密部署以及系統(tǒng)運維的問題,極大降低成本。
2 穩(wěn)定發(fā)布三板斧的訴求
日常發(fā)布中,我們常常會有如下一些錯誤的想法:
- 這次改動的內(nèi)容比較小,而且上線要求比較急,就不需要測試直接發(fā)布上線好了
- 發(fā)布不需要走灰度流程,快速發(fā)布上線即可
- 灰度發(fā)布沒有什么用,就是一個流程而已,發(fā)布完就直接發(fā)布線上,不用等待觀察
- 雖然灰度發(fā)布很重要,但是灰度環(huán)境很難搭建,耗時耗力優(yōu)先級并不高
這些想法都可能讓我們進行一次錯誤的發(fā)布。
3 自研的挑戰(zhàn)
來電科技有考慮過自研微服務(wù)治理,來電科技架構(gòu)師 湯長征 同學(xué)也參與過 Dubbo 的開源社區(qū),微服務(wù)治理研發(fā)對于來電科技來說并不是非常困難的事情,但是自研微服務(wù)治理組件還是存在以下必不可少的成本問題。
- 接入成本高
- 維護成本高
- 功能單一,不靈活,可擴展性低
- 可定位性變差
02
初見
Cloud Native
第一次接觸MSE服務(wù)治理這塊產(chǎn)品,就有許多的點命中我們的訴求,以下幾點對我們微服務(wù)治理改造來說都是很吸引的點
- 無侵入
MSE 微服務(wù)治理能力基于Java Agent字節(jié)碼增強的技術(shù)實現(xiàn),無縫支持市面上近 5 年的所有 Spring Cloud 和 Dubbo 的版本,用戶不用改一行代碼就可以使用。只需開啟 MSE 微服務(wù)治理專業(yè)版,在線配置,實時生效。
- 接入簡單
只需在阿里云容器的應(yīng)用市場安裝 mse-pilot,然后在 MSE 控制臺開啟命名空間級別的服務(wù)治理,重啟應(yīng)用即可接入,當(dāng)然卸載服務(wù)治理也是非常容易的,只需在控制臺關(guān)閉服務(wù)治理,卸載 mse-pilot 即可,不需要改變業(yè)務(wù)的現(xiàn)有架構(gòu),隨時可上可下,沒有綁定。
- 功能強大,持續(xù)發(fā)展
從開發(fā)態(tài)、測試態(tài)到運行態(tài)全生命周期的服務(wù)治理覆蓋,使得研發(fā)同學(xué)可更加專注于業(yè)務(wù)本身。
- 可視化
MSE 服務(wù)治理專業(yè)版提供了微服務(wù)治理流量的可視化視圖
對于灰度流量灰沒灰到,灰了多少,配完路由規(guī)則后流量實時生效,做到一眼可見,心中有數(shù)。
同時對于無損上下線的場景,MSE 提供端到端全生命周期的防護,一眼可以看出流量有無損失,損失在什么部分。
- 擁抱云原生
進入云原生體系之后,以 K8s 為主的云原生體系強調(diào)集群之間的靈活調(diào)度型,以 POD 為單位任意的調(diào)度資源,在被調(diào)度后 POD 的 IP 也將相應(yīng)的發(fā)生變化,傳統(tǒng)的服務(wù)治理體系,通常以 IP 為維度進行治理策略的配置,MSE 使用更加云原生的方式使用標簽為維度進行微服務(wù)治理策略的配置。
當(dāng)然在 21 年 9 月剛接觸 MSE 微服務(wù)治理的過程中發(fā)現(xiàn) MSE 為服務(wù)治理的全鏈路能力還是存在一些局限性的,首先就是只支持微服務(wù)網(wǎng)關(guān) Spring Cloud Gateway 與 Zuul 以及云網(wǎng)關(guān),當(dāng)時并不能支持自建的 Nginx 網(wǎng)關(guān),同時在 Dubbo 的場景下只支持按照接口參數(shù)維度的路由,對于運維同學(xué)來說還需要了解業(yè)務(wù)接口的實現(xiàn),過于精細化控制,上生產(chǎn)的成本過高;同時全鏈路灰度的入口僅僅支持 Http 網(wǎng)關(guān)或者應(yīng)用作為灰度流量的入口,并不能支持 TCP 網(wǎng)關(guān)作為流量的入口。
落地
Cloud Native
我們與來電科技的架構(gòu)師深入了解后,對用戶的灰度場景進行了進一步的抽象與總結(jié),只有深入到業(yè)務(wù)中去才能更加了解客戶的需求。我們總結(jié)出如下三個場景
場景一:對經(jīng)過機器的流量進行自動染色,實現(xiàn)全鏈路灰度
- 進入帶 tag 的節(jié)點后續(xù)調(diào)用優(yōu)先選擇帶有相同 tag 的節(jié)點,即對經(jīng)過 tag 節(jié)點的流量進行"染色"
- 有 tag 的調(diào)用鏈路上找不到相同 tag 的節(jié)點,則 fallback 到無 tag 的節(jié)點
- 有 tag 的調(diào)用鏈路經(jīng)過無 tag 的節(jié)點,如果鏈路后續(xù)調(diào)用有 tag 的節(jié)點,則恢復(fù) tag 調(diào)用的模式
場景二:通過給流量帶上特定的 header 實現(xiàn)全鏈路灰度
場景三:通過自定義路由規(guī)則來進行全鏈路灰度
通過在灰度請求中增加指定的 header,且整條調(diào)用鏈路會將該 header 透傳下去,只需在對應(yīng)的應(yīng)用配置該 header 相關(guān)的路由規(guī)則,帶指定 header 的灰度請求進入灰度機器,即可按需實現(xiàn)全鏈路流量灰度。
由于對經(jīng)過應(yīng)用的流量打標染色并進行全鏈路灰度,所以我們支持了任意的流量入口,也支持 Ingress、自建網(wǎng)關(guān)的灰度,在支持應(yīng)用級別的灰度的同時兼容自定義的路由,更加靈活的方式滿足了來電科技全鏈路灰度的場景。
2 來電全鏈路灰度落地方案
當(dāng)我們在白天高峰期做發(fā)布,通常都會導(dǎo)致業(yè)務(wù)流量出現(xiàn)損失,我們的研發(fā)人員不得不選擇在晚上業(yè)務(wù)低峰期做變更,這大大降低了研發(fā)人員的幸福指數(shù),因為他們不得不面臨熬夜加班的困境。如果能在白天大流量高峰期也能進行流量無損的變更,那么這對于研發(fā)人員來說將是大大提升研發(fā)效率的事情。
04
未來
Cloud Native
MSE 服務(wù)治理專業(yè)版以無侵入的方式提供了全鏈路灰度、離群實例摘除、金絲雀發(fā)布、微服務(wù)治理流量可觀測等核心能力,以更經(jīng)濟的方式、更高效的路徑幫助來電科技在云上快速構(gòu)建起完整微服務(wù)治理體系,有效提升線上穩(wěn)定性,保證服務(wù) 99.9% 的可用率。
隨著來電科技微服務(wù)化的深入,除了全鏈路灰度、無損上下線還有更多的場景逐漸出現(xiàn),微服務(wù)全生命周期的治理將覆蓋從發(fā)布、運行、故障排查、故障恢復(fù)以及全鏈路流量的治理,MSE 微服務(wù)治理將攜手幫助來電科技持續(xù)提升微服務(wù)研發(fā)效能與服務(wù)的高可用率。