數字化創新浪潮之下,微服務架構已經被愈來愈多的企業採用。本文經過網易雲輕舟微服務核心研發人員的實踐總結,解讀如何建設微服務基礎設施,以便更好地利用微服務技術來支撐業務實現躍進式的發展。在本篇中,網易雲架構師、輕舟微服務技術負責人馮常健結合網易雲實踐總結了微服務的沿革、價值、落地挑戰和解決思路,並分享了網易雲打造輕舟微服務的核心經驗,以及將來的技術路線。
後端
(網易雲架構師、輕舟微服務技術負責人馮常健)安全
馮常健認爲,微服務化是分佈式架構發展的高級階段,是目前知足大規模業務、高速迭代、高可用率等需求的最優方案。他介紹,網易雲輕舟微服務平臺的成功研發,爲網易公司完善各個業務中臺打下了基礎,產品研發效率提高100%,部署效率提高280%;也成功應用於物流、製造、銀行、證券等行業,幫助客戶快速實現微服務化以提升生產力,包括一年節省超過千萬元的研發運維成本。性能優化
網易雲是如何作到的?馮常健表示,實施微服務涉及分佈式架構的多種挑戰,技術門檻高,衆多開源組件能夠知足企業建設微服務基礎設施的基本需求,但開源組件學習成本高,配置複雜,且應用侵入性大,網易雲以基於開源、無侵入、易用性爲設計原則,基於多年技術積累,將複雜的微服務技術封裝爲通用平臺,幫助業務團隊快速、低成本地實現架構微服務化,並提供一整套工具鏈,包括服務治理、DevOps、AIOps、自動化測試等,保障微服務業務系統順暢運行。
服務器
2012年,馮常健加入網易杭州研究院,開始了雲計算研發的工做。初期他主要參與和負責雲管平臺、雲消息隊列、自動化部署平臺等雲服務設計與開發,目前這些雲服務在電商、音樂、教育、傳媒等部門都有普遍應用。經過這些項目,他對雲計算的整個技術棧,以及如何設計一個雲服務有了深入認識,也逐漸造成了設計分佈式系統時的思考習慣: 首先會從可用性、穩定性、性能、擴展性等非功能特性入手設計或者review架構的合理性。網絡
從2015年開始,伴隨着Docker和Kubernetes的流行和項目須要,馮常健開始轉向容器技術的應用研究,以前的自動化部署平臺核心在於解決應用構建與部署問題,而在資源編排、服務編排、服務故障自愈等在DevOps實踐中一樣重要的問題則較少涉及,而容器技術能夠補齊自動化部署平臺缺乏的這些能力,經過容器技術提供的彈性伸縮、服務編排、錯誤恢復等能力,結合IaaS提供的資源可編排能力,實現無服務器(Serverless)形態的容器平臺。架構
容器技術的普及,推進了微服務架構在網易內部的普遍應用。爆發式增加的網易業務,遇到低耦合、易擴展的微服務,可謂乾柴烈火,容器平臺則是火上加油。微服務經過業務拆分、進程獨立部署、輕量化的通訊方式等手段解決了單體架構中存在的可用性、穩定性和擴展性差等難題,並使得團隊有更多的技術棧能夠嘗試,減小團隊溝通成本,提高開發效率,加快迭代速度。而容器的鏡像和編排等能力,則成爲了微服務細粒度分拆與優雅協做的神器。併發
在兩年多的容器和微服務實踐中,網易雲驗證了基於Kubernetes的容器平臺在微服務架構的部署調度、集羣容錯、故障恢復等方面的彪悍實力,也發現了平臺還有一些亟待優化的問題,好比服務註冊發現、流量負載均衡、服務熔斷降級、配置管理等,雖然Kubernetes對這些問題也有相應的解決方案,但在生產環境落地時,一些客戶比較擔憂這些方案的性能、穩定性和可運維性。引入基於Spring Cloud的微服務治理框架,是否能更好地解決服務運行時治理等問題?負載均衡
因而,馮常健和他的團隊在2017年開始了輕舟微服務框架組件的研發,但願新的微服務框架能夠和容器平臺以及雲計算部門研發的DevOps、APM、自動化測試等組件造成互補,造成端到端的輕舟微服務平臺,更好地支持微服務落地。
在網易公司內部,輕舟微服務幫助完善了各個業務中臺的建設,產品迭代最高提速100倍,人力運維成本節省80%,單節點20,000個服務實例同時在線及水平擴展的支持,讓電商大促擴容更加順暢。而對於企業客戶,輕舟微服務也意味着數字化創新的核心平臺之一,某客戶直接採用輕舟微服務,大幅提高按需擴容響應速度,上線部署時間縮短80%,研發週期縮短40%,並省去交付溝通、協調等成本,成本節省摺合貨幣效應超過千萬元。若是本身研發這個平臺,至少須要投入30人團隊,耗費半年時間。但該公司認爲,更重要的是基於輕舟微服務可以靈活地進行業務調整,此前須要半年才能上線新業務,如今只須要一個月。
框架
在馮常健看來,上述成果的實現,得益於對架構本質的把握,而實現微服務的挑戰,本質上仍是分佈式架構帶來的挑戰。一旦實施微服務架構,團隊會面臨服務註冊、服務發現,服務流量的負載均衡,分佈式系統的集羣容錯、系統的可用性和可擴展性,服務數量多了以後的配置管理、部署調度,還有如何進行日誌和監控的統一管理、如何進行服務調用跟蹤等等。這些挑戰,每一項都須要引入大量的基礎技術平臺和框架組件來解決。less
固然,每一項挑戰也都有很多開源解決方案。從實施微服務的技術團隊角度來看,團隊可能喜歡一開始就引進不少新技術,設計出一套能知足將來3到5年的架構出來,但從業務的角度來看,其實不是每個階段都有必要引入這些技術實現或解決方案,在人力有限的狀況下,若是團隊把太多精力傾斜在微服務架構建設方面,忽視了承載更多價值的業務研發,這就是本末倒置,最終可能會致使項目的失敗。
馮常健解釋說,業界常見的開源解決方案,好比對於Java技術棧,有Dubbo和Spring Cloud框架,都很強大,但它們的學習曲線比較陡峭,而負責每一個微服務的每每是相對比較小的團隊,若是其中大部分人再把時間都放在新技術、新框架的學習上,團隊就沒時間投入到業務開發。以Spring Cloud爲例,若是每一個團隊上來都要學習幾十個組件,並且學完了也不必定能用好它們,對開源組件掌控程度不夠反而會給業務帶來一些不穩定的因素,這對於企業而言也是很大的成本。因此,不能爲了作微服務而作微服務,而是要根據業務匹配度來選擇技術。
對於網易雲而言,容器平臺和DevOps工具鏈已經就緒,APM也有基礎,解決上述問題,核心即是微服務框架的研發,而做爲雲計算技術提供商的網易雲,卻必須考慮產品能力的全面性。那麼,網易雲又是如何思考和實踐的呢?馮常健介紹,團隊在微服務框架設計上定義了三大原則。
首先是基於開源技術棧,整個架構基於Spring Cloud,兼容Dubbo,以插件化的方式實現服務註冊發現、服務治理、負載均衡、流量控制等。基於來源、兼容開源,能夠最大程度地下降客戶瞭解產品、使用產品的成本。
其次是無侵入性,實現了微服務治理框架和用戶業務的鬆耦合,好處是用戶只須要關注業務,服務治理框架的引入和升級不會帶來業務改造的成本。插件化的方式,有利於實現這一點,而且對服務性能的影響能夠忽略。
第三是易用性,實現圖形化的統一控制中心,經過一個平臺化界面涵蓋完整的實時的服務治理能力,將用戶從繁瑣的配置中解放出來,容許用戶經過圖形化界面解決本來須要編寫代碼、編寫配置才能解決的問題。
這些設計要求在技術實現上存在很大的技術挑戰。例如無侵入性的實現,輕舟微服務主要採用Javaagent字節碼加強技術,將服務治理邏輯以獨立Jar包的方式提供加載。爲支持更大的併發,輕舟微服務後端採用全分佈式架構,能支持單節點20,000個服務實例同時在線,支持水平擴展,並提供99.99%以上的可用性。
目前,在微服務框架模塊上,輕舟微服務已經實現了服務註冊發現、負載均衡、集羣容錯、服務熔斷降級、流量控制、動態配置管理、統一監控大盤等能力,覆蓋了微服務的治理到問題的定位和排查。
性能優化對輕舟微服務框架而言也是重要的工做。例如,對Spring Cloud社區的服務發現組件Eureka作了源碼級的定製和參數優化,實現了單節點10,000個服務實例的註冊能力。同時,還引入異步化框架,好比Servlet 3.0、異步HttpClient、Disruptor等技術,使得輕舟微服務的請求轉發能力達到單節點30,000以上TPS,而且延遲控制在5毫秒之內。
正是這些優化工做,讓輕舟微服務可以承擔重任,知足了網易內部和網易雲客戶的業務需求,實現了微服務的價值。
當前社區熱議的下一代微服務架構Service Mesh,也是網易雲輕舟微服務在將來微服務框架方面的工做重點。馮常健認爲,Service Mesh提供的通訊方式,更安全、快速和可靠,控制面與數據面的設計,使得微服務治理功能與業務解耦更加完全。
目前開源Service Mesh架構實現中,控制面有Google主導的Istio,數據面有Envoy、Linkerd等,都是已經或者即將進入CNCF(雲原生計算基金會)的開源組件,輕舟微服務框架秉承基於開源、兼容開源的思想,經過集成開源技術能力去幫助用戶更好落地微服務。
輕舟微服務目前在Service Mesh方向的工做有兩方面,一方面是基於Envoy作優化和改進,提供高性能的微服務通訊網絡,造成本身的數據面組件,可無縫對接輕舟微服務控制平臺。另外一方面,Istio目前的發佈版本是基於Kubernetes實現的,沒法脫離Kubernetes容器平臺運行,而輕舟微服務框架定位是底層基礎設施平臺無關的,它不關心服務是運行在容器裏面,仍是直接運行在虛擬機、物理機上。所以,輕舟微服務框架集成Istio會是一個工做重點。
相關文章:
【推薦】 淺談 kubernetes service 那些事(上篇)
【推薦】 直播平臺杜絕違規內容之道