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