TSF微服務(wù)治理實(shí)戰(zhàn)系列(一)——治理藍(lán)圖


導(dǎo)語(yǔ)
隨著對(duì)微服務(wù)架構(gòu)的不斷深入探索,越來(lái)越多的企業(yè)加入到了微服務(wù)架構(gòu)中,體驗(yàn)微服務(wù)架構(gòu)在開(kāi)發(fā)、運(yùn)維、測(cè)試等方面帶來(lái)的優(yōu)勢(shì)。同時(shí),隨著企業(yè)中落地微服務(wù)架構(gòu)的案例越來(lái)越多,管理的服務(wù)、實(shí)例數(shù)量越來(lái)越大,微服務(wù)架構(gòu)的一些問(wèn)題也隨之而來(lái)。本系列文章將通過(guò)對(duì)服務(wù)治理這一專題的藍(lán)圖描繪和單獨(dú)介紹,與讀者一起探討微服務(wù)治理能力在諸多場(chǎng)景中的實(shí)戰(zhàn)應(yīng)用。

作者簡(jiǎn)介
崔凱
騰訊云 CSIG 微服務(wù)產(chǎn)品中心產(chǎn)品架構(gòu)師
多年分布式、高并發(fā)電子商務(wù)系統(tǒng)的研發(fā)、系統(tǒng)架構(gòu)設(shè)計(jì)經(jīng)驗(yàn),擅長(zhǎng)主流微服務(wù)架構(gòu)技術(shù)平臺(tái)的落地和實(shí)施
目前專注于微服務(wù)架構(gòu)相關(guān)中間件的研究推廣和最佳實(shí)踐的沉淀,致力于幫助企業(yè)完成數(shù)字化轉(zhuǎn)型。

微服務(wù)和服務(wù)治理
微服務(wù)架構(gòu)大約在2011年威尼斯的一個(gè)軟件架構(gòu)會(huì)議上被提出,到2014年由Martin Fowler、James Lewis共同發(fā)表文章《Microservices:a definition of this new architectural term》讓微服務(wù)紅極一時(shí),到今天已10年有余。
在這段發(fā)展進(jìn)程中,微服務(wù)從被人質(zhì)疑到成為當(dāng)前云原生趨勢(shì)中不可或缺的角色,從一個(gè)概念到擁有相對(duì)完善的落地體系和方法論,其中都包含著對(duì)微服務(wù)架構(gòu)不斷的探索和堅(jiān)持。
那么,在微服務(wù)架構(gòu)于企業(yè)中落地越來(lái)越多的當(dāng)下,微服務(wù)架構(gòu)的規(guī)模越來(lái)越大、服務(wù)和實(shí)例數(shù)量越來(lái)越多,也相應(yīng)的產(chǎn)生了更高階的服務(wù)治理需求。所以,服務(wù)治理逐漸成為了新的關(guān)注重點(diǎn)和研究對(duì)象。


TSF和服務(wù)治理
TSF作為騰訊云針對(duì)微服務(wù)架構(gòu)管理而設(shè)計(jì)的平臺(tái)型產(chǎn)品,服務(wù)治理是平臺(tái)建設(shè)的核心價(jià)值點(diǎn)之一。
本實(shí)戰(zhàn)系列主要討論范圍包括TSF平臺(tái)中服務(wù)路由、服務(wù)鑒權(quán)、服務(wù)限流、服務(wù)熔斷容錯(cuò)、服務(wù)可觀測(cè)性、服務(wù)配置等服務(wù)治理核心能力(如下圖“微服務(wù)框架”中所示)。
通過(guò)針對(duì)上述內(nèi)容的介紹,可以系統(tǒng)性的幫助讀者了解TSF在服務(wù)治理方面的核心能力,及針對(duì)企業(yè)自身場(chǎng)景應(yīng)如何選擇匹配的場(chǎng)景和動(dòng)作。如針對(duì)電商大促的場(chǎng)景如何進(jìn)行限流、針對(duì)灰度版本如何進(jìn)行全鏈路灰度發(fā)布等,幫助TSF平臺(tái)使用者實(shí)際解決服務(wù)治理相關(guān)的流量管控、鏈路排障、配置管理等一系列問(wèn)題。


準(zhǔn)備動(dòng)作和落地思路
在詳細(xì)了解TSF服務(wù)治理各項(xiàng)能力之前,有幾個(gè)問(wèn)題需要“捫心自問(wèn)”。
現(xiàn)在是否是引入服務(wù)治理的好時(shí)機(jī)?
服務(wù)治理并不是銀彈,服務(wù)規(guī)模和流量都比較小的初創(chuàng)企業(yè),適用服務(wù)治理的場(chǎng)景并不多。而對(duì)于一些中大型企業(yè),服務(wù)及實(shí)例的數(shù)量、并發(fā)數(shù)及流量、DB數(shù)據(jù)量等都開(kāi)始爆發(fā)性增長(zhǎng),服務(wù)治理才有其存在的必要性。另外,系統(tǒng)要基本完成微服務(wù)架構(gòu)的轉(zhuǎn)型,這個(gè)轉(zhuǎn)型包括面向團(tuán)隊(duì)、管理、中間件平臺(tái)等的轉(zhuǎn)變,最好也已完成容器化,這樣可以借助容器平臺(tái)來(lái)提高治理效率。
引入服務(wù)治理前需要做什么準(zhǔn)備?
開(kāi)發(fā)針對(duì)服務(wù)指定治理規(guī)則之前,還有幾項(xiàng)工作要提前準(zhǔn)備,包括但不限于系統(tǒng)調(diào)研、確定立項(xiàng)、組織分工。
系統(tǒng)調(diào)研
在開(kāi)展服務(wù)治理工作之前,要對(duì)系統(tǒng)的必要信息充分了解,需要從一線最了解的同學(xué)那里匯總,如下表示例所示:
調(diào)研事項(xiàng) | 調(diào)研內(nèi)容 |
業(yè)務(wù)簡(jiǎn)介 | 簡(jiǎn)單介紹業(yè)務(wù)的功能和業(yè)務(wù)邏輯 |
應(yīng)用架構(gòu) | 通過(guò)應(yīng)用架構(gòu)圖闡述代碼、模塊間關(guān)系及服務(wù)間依賴等,使用的開(kāi)發(fā)框架、語(yǔ)言等 |
物理架構(gòu) | 展示物理部署圖、調(diào)用關(guān)系圖 |
數(shù)據(jù)量及并發(fā) | 描述當(dāng)前數(shù)據(jù)量及并發(fā)量的峰值、均值及如何發(fā)展 |
當(dāng)前治理方式 | 描述當(dāng)前已經(jīng)使用了哪些服務(wù)治理框架、工具 |
中間件 | 限流、路由等一些治理能力需要兼容MQ、Redis等一些中間件 |
支撐平臺(tái) | DevOps、容器平臺(tái)、監(jiān)控告警平臺(tái)等 |
現(xiàn)存問(wèn)題 | 描述在流量控制、配置管理等服務(wù)治理方面現(xiàn)存的客戶痛點(diǎn)問(wèn)題 |
確定立項(xiàng)
管理者與研發(fā)團(tuán)隊(duì)完成對(duì)服務(wù)治理目標(biāo)、面對(duì)的挑戰(zhàn)和成本等方面的討論,確定服務(wù)治理項(xiàng)目組并立項(xiàng)。其中,服務(wù)治理目標(biāo)的確定應(yīng)盡量務(wù)實(shí),以是否解決實(shí)際問(wèn)題入手,而不是“把這些高大上的治理能力都用上”。對(duì)于服務(wù)治理的成本預(yù)估,除了選型的沉沒(méi)成本、學(xué)習(xí)成本、開(kāi)發(fā)成本,還有關(guān)鍵的上線成本,一定關(guān)注開(kāi)發(fā)的review和測(cè)試的準(zhǔn)入準(zhǔn)出,避免開(kāi)發(fā)人員和測(cè)試人員對(duì)非功能性需求“不自覺(jué)的松懈”。
組織分工
細(xì)化服務(wù)治理工作,從項(xiàng)目管理?xiàng)l線和技術(shù)開(kāi)發(fā)條線分別規(guī)劃。項(xiàng)目管理?xiàng)l線需要依次確認(rèn)服務(wù)治理階段及階段目標(biāo),將服務(wù)治理劃分為各專項(xiàng)小組并確立接口人和匯報(bào)方式,制定從開(kāi)發(fā)、測(cè)試、投產(chǎn)保障、運(yùn)維監(jiān)控到培訓(xùn)賦能的服務(wù)治理落地計(jì)劃,確保服務(wù)治理的功能真正能在企業(yè)中用起來(lái)。技術(shù)條線除了完成服務(wù)治理上線所需的代碼改動(dòng)和發(fā)布,還需要逐步完善《服務(wù)治理FAQ》《服務(wù)治理規(guī)范手冊(cè)》等一系列知識(shí)沉淀,與《服務(wù)治理待辦清單》共同形成迭代閉環(huán),使得服務(wù)治理建設(shè)可持續(xù)優(yōu)化。

TSF服務(wù)治理藍(lán)圖

在完成了前期的準(zhǔn)備工作之后,需要先簡(jiǎn)單介紹一下TSF服務(wù)治理的藍(lán)圖,以便能對(duì)服務(wù)治理有個(gè)大致全面的概覽。雖然TSF服務(wù)治理涉及到很多方面,但總體來(lái)說(shuō),小編將它概括為 “三心兩意”。
三心:所有的服務(wù)治理能力都是基于標(biāo)簽化管控、語(yǔ)言框架兼容、屏蔽底層差異三個(gè)核心來(lái)設(shè)計(jì)的。
1:標(biāo)簽化管控
指針對(duì)TSF服務(wù)治理各項(xiàng)能力針對(duì)不同的管控場(chǎng)景,提供了粗粒度的系統(tǒng)標(biāo)簽和細(xì)粒度的自定義標(biāo)簽兩種管控粒度。系統(tǒng)標(biāo)簽根據(jù)TSF自身設(shè)計(jì)原語(yǔ)劃分,如部署組、服務(wù)、應(yīng)用、版本等;自定義標(biāo)簽根據(jù)用戶自身業(yè)務(wù)屬性劃分,將控制粒度細(xì)化到每一個(gè)請(qǐng)求上,如用戶ID、時(shí)間、地域、用戶類別等。通過(guò)不同的管控粒度,平衡治理的成本和收益。
2:語(yǔ)言框架兼容
由于使用了不同的語(yǔ)言、開(kāi)發(fā)框架、通訊協(xié)議,就需要不同版本的SDK、不同形態(tài)的框架對(duì)接代碼、不同的調(diào)用方式,這種凌亂的形式給整個(gè)研發(fā)團(tuán)隊(duì)帶來(lái)了巨大的負(fù)擔(dān)。比如SDK升級(jí),首先要針對(duì)不同語(yǔ)言開(kāi)發(fā)SDK,其次要針對(duì)不同開(kāi)發(fā)框架做兼容,最后在升級(jí)的時(shí)候還要協(xié)調(diào)各個(gè)團(tuán)隊(duì)的升級(jí)時(shí)機(jī),挑戰(zhàn)非常巨大。TSF通過(guò)統(tǒng)一的管控平臺(tái),同時(shí)兼容Spring Cloud、Service Mesh及Dubbo框架,兼容HTTP、gRPC等多種協(xié)議,拉平了語(yǔ)言、框架、協(xié)議方面的差異,讓用戶專注于業(yè)務(wù)本身。
3:屏蔽底層差異
TSF作為一套通用的微服務(wù)技術(shù)平臺(tái),在各行各業(yè)都有不少落地案例。這就要求TSF必須具備適配客戶各類硬件資源、操作系統(tǒng)及已有架構(gòu),才能幫助客戶完成快速落地的目標(biāo)。TSF可以適配目前主流的虛擬機(jī)、容器平臺(tái),甚至某些場(chǎng)景下的物理機(jī),國(guó)產(chǎn)及騰訊云自研操作系統(tǒng),以及一些舊有的架構(gòu)體系。通過(guò)屏蔽這些差異,避免曾經(jīng)在各種平臺(tái)間切來(lái)切去的煩惱,讓用戶體驗(yàn)“同一套平臺(tái),同一種感受”。
兩意:我們把服務(wù)治理分解為 “治”和“理”兩部分,以治作為配置手段,以理作為監(jiān)管手段。通過(guò)主動(dòng)的治和被動(dòng)的理的配合,形成治理規(guī)則不斷優(yōu)化和監(jiān)控效果不斷提高的正向循環(huán),讓服務(wù)治理能力融入企業(yè)的研發(fā)流程中。
1:治
治是主動(dòng)的管理動(dòng)作,包括針對(duì)安全的服務(wù)鑒權(quán),針對(duì)流量的服務(wù)限流、服務(wù)路由、服務(wù)熔斷,針對(duì)可用性的服務(wù)容錯(cuò),針對(duì)配置的應(yīng)用配置、日志配置等。
2:理
理是被動(dòng)的監(jiān)控分析,包括對(duì)已運(yùn)行服務(wù)指標(biāo)的監(jiān)控、服務(wù)間的依賴拓?fù)潢P(guān)系、拓?fù)滏溌放c業(yè)務(wù)日志的聯(lián)動(dòng)、業(yè)務(wù)日志搜索及監(jiān)控、API統(tǒng)一管理、各類事件的匯總及告警等。

TSF-SDK通訊機(jī)制
TSF-SDK各項(xiàng)服務(wù)治理能力總體上依賴了同一套架構(gòu),下圖以Spring Cloud應(yīng)用為示例。整個(gè)通訊過(guò)程主要包括租戶端的TSF-SDK,管控端的consul接入層、服務(wù)治理組件、瀏覽器。TSF-SDK通過(guò)pom引用內(nèi)嵌在JAVA應(yīng)用中,consul接入層負(fù)責(zé)與租戶端各服務(wù)的TSF-SDK連通,服務(wù)治理組件為提供各項(xiàng)服務(wù)治理邏輯的無(wú)狀態(tài)組件,瀏覽器主要供管理員通過(guò)控制臺(tái)頁(yè)面創(chuàng)建各類服務(wù)治理規(guī)則和配置。
TSF-SDK服務(wù)治理規(guī)則、分布式配置、網(wǎng)關(guān)規(guī)則等配置的實(shí)時(shí)更新,依賴TSF-SDK定時(shí)發(fā)起的長(zhǎng)輪訓(xùn)機(jī)制。

TSF-SDK的整個(gè)監(jiān)聽(tīng)過(guò)程分為兩種情況:阻塞時(shí)有內(nèi)容更新、阻塞時(shí)無(wú)內(nèi)容更新。在服務(wù)(應(yīng)用)完成注冊(cè)發(fā)現(xiàn)之后,TSF-SDK向Consul接入層發(fā)起一個(gè)長(zhǎng)輪詢請(qǐng)求,以便應(yīng)用側(cè)可以實(shí)時(shí)上報(bào)數(shù)據(jù),同時(shí)實(shí)時(shí)接收管控端下發(fā)的規(guī)則、應(yīng)用配置等數(shù)據(jù)。當(dāng)在長(zhǎng)輪詢請(qǐng)求有效期內(nèi)發(fā)生了治理規(guī)則推送,那么長(zhǎng)輪詢請(qǐng)求立刻返回被更新的內(nèi)容給TSF-SDK;當(dāng)長(zhǎng)輪詢請(qǐng)求持續(xù)等待直到超過(guò)了最大等待時(shí)間,請(qǐng)求也會(huì)返回,同時(shí)發(fā)起下次長(zhǎng)輪詢請(qǐng)求,以避免連接無(wú)限期等待帶來(lái)的風(fēng)險(xiǎn)。
當(dāng)TSF-SDK拿到治理規(guī)則或配置后,實(shí)時(shí)更新本地內(nèi)容,并根據(jù)SDK內(nèi)邏輯進(jìn)行服務(wù)路由、服務(wù)鑒權(quán)、服務(wù)限流等一系列操作。整體流程基本相似,只是下發(fā)內(nèi)容和SDK處理邏輯不同。

結(jié)語(yǔ)
服務(wù)治理并不適用于所有場(chǎng)景,尤其不同的業(yè)務(wù)場(chǎng)景需要對(duì)應(yīng)的治理規(guī)則和參數(shù)配置,用的不好反而會(huì)成為業(yè)務(wù)的累贅。本實(shí)戰(zhàn)系列的目的也在于此,通過(guò)深入TSF各項(xiàng)服務(wù)治理能力和落地場(chǎng)景,讓讀者朋友了解TSF服務(wù)治理的正確打開(kāi)方式,實(shí)現(xiàn)構(gòu)建完整的服務(wù)治理體系的目標(biāo),通過(guò)治理手段提高業(yè)務(wù)可用性,幫助企業(yè)降本增效。

One more thing
近日,Spring Cloud Tencent 于6月14日正式對(duì)外開(kāi)源,作為騰訊開(kāi)源的一站式微服務(wù)框架,Spring Cloud Tencent 實(shí)現(xiàn)了 Spring Cloud 標(biāo)準(zhǔn)微服務(wù) SPI ,開(kāi)發(fā)者可以基于 Spring Cloud Tencent 快速開(kāi)發(fā) Spring Cloud 微服務(wù)架構(gòu)應(yīng)用。Spring Cloud Tencent 的核心依托騰訊開(kāi)源的一站式服務(wù)發(fā)現(xiàn)與治理平臺(tái) Polarismesh ,實(shí)現(xiàn)各種分布式微服務(wù)場(chǎng)景。
如果你也是 Spring Cloud 的愛(ài)好者
如果你的公司正在使用 Spring Cloud 并且有一些好的實(shí)踐
如果你的公司正在做微服務(wù)技術(shù)選型
... ...
請(qǐng)加入我們,你的一個(gè)建議、Issue、Pull Request 甚至只是一個(gè)小小的 Star 都是對(duì)我們最大的支持,也是我們持續(xù)迭代的動(dòng)力。
Github 地址(文末點(diǎn)擊「閱讀原文」即可跳轉(zhuǎn)至該鏈接):
https://github.com/Tencent/spring-cloud-tencent
掃碼進(jìn)Spring Cloud Tencent用戶交流群
往期
推薦
《千億級(jí)、大規(guī)模:騰訊超大 Apache Pulsar 集群性能調(diào)優(yōu)實(shí)踐》
《云原生時(shí)代的Java應(yīng)用優(yōu)化實(shí)踐》
《全面兼容Eureka:PolarisMesh(北極星)發(fā)布1.5.0版本》
《全面擁抱Go社區(qū):PolarisMesh全功能對(duì)接gRPC-Go | PolarisMesh12月月報(bào)》
《SpringBoot應(yīng)用優(yōu)雅接入北極星PolarisMesh》
《Serverless可觀測(cè)性的價(jià)值》
《RoP重磅發(fā)布0.2.0版本:架構(gòu)全新升級(jí),消息準(zhǔn)確性達(dá)100%》

掃描下方二維碼關(guān)注本公眾號(hào),
了解更多微服務(wù)、消息隊(duì)列的相關(guān)信息!
解鎖超多鵝廠周邊!


點(diǎn)個(gè)在看你最好看
