作者:孫浩峰
過去幾年來,“微服務(wù)架構(gòu)”方興未艾,盡管這種架構(gòu)風(fēng)格沒有確切的定義,但我們已經(jīng)看到許多項目憑借此架構(gòu)取得了積極的結(jié)構(gòu),因此對于許多開發(fā)者來說,微服務(wù)正成為構(gòu)建企業(yè)應(yīng)用程序的默認(rèn)風(fēng)格??杀氖?,沒有太多的信息概述微服務(wù)的風(fēng)格以及如何去做。而實際上,擁有一個合適的微服務(wù)開發(fā)平臺將會非常有助于實現(xiàn)微服務(wù)架構(gòu),基于此,CSDN云計算特別策劃了微服務(wù)平臺盤點系列文章,欲以CSDN中立技術(shù)社區(qū)專業(yè)、客觀的角度,探討如何為為開發(fā)者選擇合適的微服務(wù)開發(fā)平臺,以幫助其企業(yè)實現(xiàn)微服務(wù)架構(gòu)。為此,我們采訪了數(shù)家提供微服務(wù)平臺的云服務(wù)廠商,本期,我們的主角是網(wǎng)易云。
輕舟已過萬重山
——2019微服務(wù)盤點之網(wǎng)易云輕舟微服務(wù)平臺
當(dāng)前,在互聯(lián)網(wǎng)領(lǐng)域,微服務(wù)架構(gòu)是業(yè)務(wù)規(guī)模達(dá)到一定程度的團隊的標(biāo)配,這些團隊配備完整微服務(wù)工具和平臺,實現(xiàn)熔斷、限流、降級等服務(wù)治理策略和包括CI/CD在內(nèi)的DevOps自動化運維;在傳統(tǒng)領(lǐng)域,服務(wù)化架構(gòu)也是傳統(tǒng)企業(yè)數(shù)字化轉(zhuǎn)型的核心技術(shù)之一,比如物流、銀行、證券、工業(yè)制造等行業(yè)的很多企業(yè),都已經(jīng)實施微服務(wù)化的改造,一些行業(yè)領(lǐng)頭羊,甚至已經(jīng)向互聯(lián)網(wǎng)企業(yè)看齊,構(gòu)建了自己的微服務(wù)平臺。
微服務(wù)面臨的困難和挑戰(zhàn)
企業(yè)對微服務(wù)平臺的熱衷,需要從微服務(wù)開發(fā)說起。微服務(wù)開發(fā)并不是一件簡單的事情,很多企業(yè)在微服務(wù)開發(fā)時都面臨著困難和挑戰(zhàn),這主要體現(xiàn)在技術(shù)和業(yè)務(wù)兩個方面:
從技術(shù)方面看, 微服務(wù)體系非常復(fù)雜,開發(fā)框架的建設(shè),無論采用Spring Cloud、Dubbo還是自研RPC,抑或Service Mesh,門檻都非常高,比如采用Spring Cloud體系,需要微服務(wù)開發(fā)者掌握等Eureka(服務(wù)注冊/發(fā)現(xiàn))、Hystrix(熔斷器、線程隔離)、Ribbon(負(fù)載均衡)、Zuul(API網(wǎng)關(guān))、Config(配置中心)等組件,而且原生Spring Cloud組件在某些場景下缺乏靈活性,甚至存在一些BUG,需要團隊擁有很強的技術(shù)實力。由此,微服務(wù)架構(gòu)也帶來了人才缺口、人力成本上升的問題。
業(yè)務(wù)方面, 業(yè)務(wù)邊界的確定過程,即服務(wù)建模的過程,是服務(wù)拆分中最重要的工作,然而很多業(yè)務(wù)邊界不那么直觀,比如支付服務(wù)和結(jié)算服務(wù)都涉及賬戶余額數(shù)據(jù)。當(dāng)然,邊界能夠梳理清楚,微服務(wù)對業(yè)務(wù)發(fā)展的促進(jìn)作用也是巨大的。
微服務(wù)的本質(zhì)
實際上,微服務(wù)是核心的云原生技術(shù),它的本質(zhì)是通過分布式架構(gòu)解決兩大業(yè)務(wù)訴求:快速迭代和彈性伸縮,充分釋放云基礎(chǔ)設(shè)施的潛力,這決定了微服務(wù)是一個復(fù)雜的系統(tǒng),引入微服務(wù),除了服務(wù)注冊/發(fā)現(xiàn)、負(fù)載均衡,企業(yè)還要解決分布式系統(tǒng)的集群容錯、系統(tǒng)的可用性和可擴展性,服務(wù)數(shù)量多了之后的配置管理、部署調(diào)度,還有如何進(jìn)行日志和監(jiān)控的統(tǒng)一管理、如何進(jìn)行服務(wù)調(diào)用跟蹤等方面的挑戰(zhàn)。針對每一項挑戰(zhàn),企業(yè)都需要引入大量的基礎(chǔ)技術(shù)平臺和框架組件來解決。
所以,如果沒有一個平臺支撐微服務(wù)開發(fā),業(yè)務(wù)開發(fā)者勢必深陷基礎(chǔ)架構(gòu)建設(shè)與優(yōu)化的泥潭,而有了專業(yè)的平臺,業(yè)務(wù)開發(fā)者就可以專注于價值更高的核心業(yè)務(wù)。
評判微服務(wù)平臺的標(biāo)準(zhǔn)
面對眾多微服務(wù)平臺,如何選擇仍然是一個困難的事情,網(wǎng)易云架構(gòu)師,輕舟微服務(wù)技術(shù)負(fù)責(zé)人馮常健認(rèn)為評判一項技術(shù)產(chǎn)品的唯一標(biāo)準(zhǔn)是它的業(yè)務(wù)價值,微服務(wù)平臺要實現(xiàn)加速數(shù)字化業(yè)務(wù)發(fā)展的價值,應(yīng)當(dāng)具備如下六個特征:
1. 業(yè)務(wù)無侵入: 治理邏輯不侵入業(yè)務(wù)代碼,讓業(yè)務(wù)開發(fā)者無需關(guān)注和學(xué)習(xí)治理相關(guān)的技術(shù),引入和升級服務(wù)治理框架不會帶來業(yè)務(wù)改造的額外成本。
2. 功能完備 :不僅包括服務(wù)注冊/發(fā)現(xiàn)、降級、限流、容錯、負(fù)載均衡、分流等服務(wù)治理全家桶,還需要配備CI/CD、容器化、全鏈路監(jiān)控、自動化測試等工具,覆蓋微服務(wù)應(yīng)用全生命周期。
3. 安全穩(wěn)定 :提供統(tǒng)一的認(rèn)證、鑒權(quán)機制,同時保障業(yè)務(wù)系統(tǒng)穩(wěn)定運行。
4. 易于接入 :業(yè)務(wù)系統(tǒng)可以快速接入框架和平臺,同時通過平臺實時配置治理策略。
5. 跨平臺性 :支持跨不同的基礎(chǔ)設(shè)施,跨不同平臺和語言。
6. 生態(tài)親和性 :符合微服務(wù)技術(shù)和架構(gòu)趨勢,同時具備長遠(yuǎn)的擴展性。
網(wǎng)易云輕舟微服務(wù)平臺
網(wǎng)易云開發(fā)的微服務(wù)平臺叫“輕舟微服務(wù)平臺”,其中微服務(wù)框架組件(NSF)是它的核心。輕舟微服務(wù)框架的開發(fā),是網(wǎng)易云調(diào)研業(yè)界存在的Spring Cloud、Dubbo、自研RPC和Service Mesh等方案之后做的決定。由于這四種方式各有優(yōu)劣,并且學(xué)習(xí)成本和使用成本都很高,網(wǎng)易云希望打造一個更通用、侵入性更低、能力更全面的微服務(wù)框架,讓業(yè)務(wù)系統(tǒng)開發(fā)者無需關(guān)注和學(xué)習(xí)治理相關(guān)技術(shù)、無需修改業(yè)務(wù)系統(tǒng)代碼,就可以快速引入微服務(wù)架構(gòu)。
這并不意味著從零開始造輪子。事實上,輕舟微服務(wù)框架基于Spring Cloud進(jìn)行源碼級的定制和優(yōu)化,在首個穩(wěn)定版本中,輕舟微服務(wù)框架解決了服務(wù)的治理、流控、監(jiān)控、告警、動態(tài)配置、安全認(rèn)證等問題,通過NSF Java Agent增強實現(xiàn)了治理邏輯不侵入業(yè)務(wù)代碼,并全面兼容Spring Cloud、Dubbo等開源框架,確保用戶原有微服務(wù)的快速接入。隨后,團隊又探索了對具有下一代微服務(wù)之稱的Service Mesh的支持。
網(wǎng)易云輕舟微服務(wù)框架整體架構(gòu)
除了實現(xiàn)了治理無侵入,支持多種服務(wù)治理框架,網(wǎng)易云輕舟微服務(wù)平臺還通過一個圖形化的統(tǒng)一控制中心提供了完備的工具鏈,包括DevOps、容器、APM、API網(wǎng)關(guān)、接口測試等組件,覆蓋開發(fā)、測試、構(gòu)建、發(fā)布到上線運行、治理、運維以及故障排查,并在網(wǎng)易千萬級DAU大規(guī)模業(yè)務(wù)的生產(chǎn)環(huán)境中經(jīng)受住了考驗。
網(wǎng)易云輕舟微服務(wù)平臺整體架構(gòu)
不過,輕舟微服務(wù)平臺的研發(fā)也并非一蹴而就,馮常健坦言,分布式系統(tǒng)本身就是一個復(fù)雜的課題,輕舟微服務(wù)平臺的要求又是集完備性、實用性、易用性于一身,從產(chǎn)品設(shè)計、技術(shù)選型、定制開發(fā)到源碼優(yōu)化,每一步都有很多的困難,所幸網(wǎng)易云團隊從十多年前的博客時代就開始面對用戶量、訪問量暴增和產(chǎn)品高速迭代的挑戰(zhàn),沉淀了一套工程化、服務(wù)化、自動化的工具集,也積累了豐富的云計算架構(gòu)和分布式系統(tǒng)研發(fā)經(jīng)驗,以及源碼分析能力,社區(qū)又有很多最佳實踐考驗參考,才得以順利地完成這個項目。
微服務(wù)的拆分
即使擁有一個出色的微服務(wù)開發(fā)平臺,如果不能很好的界定如何進(jìn)行服務(wù)拆分以及對組織架構(gòu)進(jìn)行調(diào)整,微服務(wù)的實現(xiàn)仍然會困難重重。馮常健認(rèn)為,服務(wù)拆分的基本原則是“高內(nèi)聚、低耦合”,設(shè)計功能高度內(nèi)聚的服務(wù),每次修改只涉及較少的服務(wù),可以達(dá)到快速發(fā)布和交付的目的。如果服務(wù)間耦合過緊,就會出現(xiàn)對一個服務(wù)的修改導(dǎo)致另一個服務(wù)被動也需要修改的問題,影響系統(tǒng)功能的交付。全新設(shè)計系統(tǒng)的拆分步驟是:數(shù)據(jù)庫獨立、代碼獨立、確定服務(wù)間通信方式、服務(wù)獨立發(fā)布與部署;歷史遺留系統(tǒng)的服務(wù)化改造需要重點關(guān)注系統(tǒng)架構(gòu)的平滑過渡,步驟是:分析業(yè)務(wù)邊界、凍結(jié)遺留服務(wù)、拆分新服務(wù)、訂正數(shù)據(jù)、循環(huán)迭代。
對于復(fù)雜業(yè)務(wù)拆分,每個業(yè)務(wù)并不一定只能拆成一個組件,需要實際分析;業(yè)務(wù)過于龐大必須進(jìn)行拆分,拆分出來的必須是相對獨立和龐大的業(yè)務(wù);如果業(yè)務(wù)較小但是比較多,類型相似,可以不用著急拆分。對于重耦合業(yè)務(wù)拆分,先在原有服務(wù)中獨立功能模塊,規(guī)范輸入輸出,形成服務(wù)內(nèi)部的分離;再新建工程,只轉(zhuǎn)流量,不做代碼遷移,通過新建的工程對外提供服務(wù),替代老的接口;然后將老工程的接口復(fù)制到新工程,在新工程的接口調(diào)用上,使用熱開關(guān)進(jìn)行容災(zāi);最后優(yōu)化新工程的邏輯,刪除老工程的相關(guān)代碼。
重耦合業(yè)務(wù)拆分步驟
應(yīng)用架構(gòu)的演進(jìn)也牽連著組織架構(gòu)的變革。組織架構(gòu)方面,對微服務(wù)至關(guān)重要的是組織DevOps化,環(huán)境交付、Dockerfile書寫提前到開發(fā)環(huán)節(jié),服務(wù)注冊、發(fā)現(xiàn)、治理、配置等,下沉成為運維團隊統(tǒng)一管理的基礎(chǔ)設(shè)施。如下圖為網(wǎng)易杭州研究院DevOps組織架構(gòu),數(shù)據(jù)中心由運維部門管理,上面是云平臺組,基于OpenStack的云平臺上,包括了PaaS、容器、微服務(wù)管理和治理等組件。業(yè)務(wù)部門的中間件組或者架構(gòu)組和云平臺組溝通密切,共同探討如何以正確的姿勢使用云平臺組件;最上面是業(yè)務(wù)部門的前端組、業(yè)務(wù)開發(fā)組和中臺開發(fā)組。當(dāng)然,小團隊自主決策也很重要。
網(wǎng)易杭州研究院DevOps組織架構(gòu)
網(wǎng)易云微服務(wù)平臺的未來
談到輕舟微服務(wù)平臺的未來,馮常健表示,輕舟微服務(wù)平臺的開發(fā),是源自業(yè)務(wù)的驅(qū)動,輕舟微服務(wù)開發(fā)框架的最大愿景,就是讓業(yè)務(wù)系統(tǒng)開發(fā)者無需關(guān)注和學(xué)習(xí)治理相關(guān)技術(shù)、無需修改業(yè)務(wù)系統(tǒng)代碼就可以快速引入服務(wù)治理能力。微服務(wù)相關(guān)技術(shù)的未來發(fā)展,網(wǎng)易云目前主要關(guān)注兩個方面:
第一是Service Mesh,它的主要作用就是將服務(wù)治理下沉到平臺層,進(jìn)行統(tǒng)一的治理。微服務(wù)框架的統(tǒng)一,涉及到多語言、和應(yīng)用層綁定等問題,無論是Spring Cloud還是Dubbo,都很難完全平臺化,所以需要Service Mesh;輕舟已經(jīng)基于Envoy做優(yōu)化和改進(jìn),提供高性能的微服務(wù)通信網(wǎng)絡(luò),形成自己的數(shù)據(jù)面組件,并無縫對接輕舟微服務(wù)控制平臺。鑒于目前不同業(yè)務(wù)服務(wù)化改造進(jìn)度不同,有些業(yè)務(wù)仍用傳統(tǒng)虛擬機方式部署,有些業(yè)務(wù)選擇了不同的服務(wù)化注冊中心,為了讓業(yè)務(wù)能更低成本地接入Service Mesh,輕舟對Istio和Envoy都進(jìn)行了擴展,使其能支持非容器化環(huán)境和多注冊中心,滿足業(yè)務(wù)平滑遷移的需求。
第二是AIOps和智能調(diào)度,就是通過對于海量數(shù)據(jù)中心收集的監(jiān)控數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),實現(xiàn)業(yè)務(wù)的自動調(diào)度和參數(shù)調(diào)整。隨著微服務(wù)化和容器化,服務(wù)的數(shù)量會十分的龐大,運維難度大幅度提高,基于AIOps和智能調(diào)度提高效率節(jié)約成本勢在必然。
技術(shù)點評
作為網(wǎng)易云重點打造的微服務(wù)平臺,輕舟微服務(wù)平臺有著鮮明的特點:
首先,基于開源、兼容開源:容器平臺基于Kubernetes和Docker,服務(wù)治理兼容Spring Cloud、Dubbo和Service Mesh,監(jiān)控追蹤采用OpenTracing、Zipkin、Promethus和Jaeger。
其次,低成本、易接入:支持代碼零改動接入微服務(wù)框架,提供非侵入式探針,支持應(yīng)用拓?fù)淇梢暬?,支持統(tǒng)一的平臺認(rèn)證&權(quán)限管控。
第三,立體化監(jiān)控:支持實時監(jiān)控,精準(zhǔn)掌控服務(wù)健康狀況;支持服務(wù)拓?fù)?,調(diào)用鏈跟蹤可視化呈現(xiàn);支持多維度關(guān)聯(lián)分析,預(yù)防系統(tǒng)級故障。
最后,超大規(guī)模的管理能力:容器管理支持單集群3萬節(jié)點、45萬容器的規(guī)模,注冊中心提供單節(jié)點10,000個服務(wù)實例的注冊能力。
為了實現(xiàn)這些特點,輕舟做了很多深度定制和優(yōu)化。例如無侵入性的實現(xiàn),輕舟微服務(wù)主要采用Javaagent字節(jié)碼增強技術(shù),將服務(wù)治理邏輯以獨立Jar包的方式提供加載。為支持更大的并發(fā),輕舟微服務(wù)后端采用全分布式架構(gòu),能支持單節(jié)點20,000個服務(wù)實例同時在線,支持水平擴展,并提供99.99%以上的可用性。
這些特點,都使得輕舟微服務(wù)平臺能夠幫助企業(yè)開發(fā)團隊能夠以較小的投入和代價,敏捷迅速的實現(xiàn)微服務(wù)架構(gòu),真可謂“輕舟已過萬重山!