jupiter 依赖_Jupiter 介绍
# Jupiter 介紹
Jupiter 是斗魚開源的一套微服務治理框架,提供豐富的后臺功能,管理應用的資源、配置,應用的性能、配置等可視化。 Jupiter 是羅馬神話的眾神之神,在天界掌管諸神,在互聯網掌管所有微服務!
# 架構圖
# 目標
我們致力于將 Go 微服務框架標準化,統一錯誤碼、日志、監控、注冊、流控的 Schema。將微服務的各個模塊可觀測、可治理,管理微服務研發側的全套生命周期。
# 功能點 gRPC:基于官方 gRPC 開發,集成流控和多數據中心方式的服務注冊,支持多種 roundrobin,p2c 等負載均衡策略;
配置:使用 toml、yaml 方式管理配置,規范化核心配置,結合遠程配置中心,實現配置版本管理和更新,查看配置依賴關系;
日志:基于 zap 日志類庫,實現高性能日志庫,并對不同環境和條件,實現日志庫的自動降級,并對服務端,客戶端的慢日志通過配置條件,實現全部慢日志接入;
監控:基于 prometheus go sdk 類庫,實現對服務端,客戶端的數據監控,并與 prometheus、cond、etcd 數據打通,實現應用自動化數據采集;
數據庫:基于 gorm 的封裝,將數據庫的 trace,慢日志,監控進行了采集;
緩存:基于 go-redis 的封裝,將數據庫的 trace,慢日志,監控進行了采集,并實現了單個 redis、多從庫 redis,客戶端 redis 分片,服務端 redis 分片的 api;
系統錯誤碼:區分框架和業務的錯誤碼,將框架錯誤碼文檔自動生成,自動化的錯誤碼 SRE 分析工具;
工程化:基于服務標準、創建、開發、運行、治理等生命周期,完成了Jupiter對項目的工程化;
服務治理:基于監控,etcd,配置中心,對服務實現了良好的可觀測性,可控制性;
# 快速開始
要求 Go version>=1.13 and GO111MODULE=on
# 安裝
# 理念
# 工程化
目前大部分框架側重點大部分在協議和編解碼,過度的關注于技術細節,框架在投入生產環節會帶來一堆工程問題。
因此我們Jupiter瞄準于企業級的工程化方案,將服務的標準、創建、開發、運行、治理整個生命周期作為Jupiter的一部分,以工程效率、工程質量、工程可靠性等為指標,解決了公司大量的工程化問題,降低了研發人員的開發成本。 制定標準:制定了服務的配置、鏈路、監控、header 頭等標準;
腳手架:能夠通過命令行,實現服務的創建,升級等功能;
配套設施:實現程序的開發,ci,運行,治理,提升工程效率,質量,可靠性;
工程化的管理使得我們可以保質保量的對項目進行開發,這種理念正是現在業界所缺少的。
# 服務治理
衡量一個框架的好壞,除了提供高性能 RPC 通信以外,還要包括提供優質的服務治理能力。
我們Jupiter經歷了多個版本的迭代以后,目前的服務治理能力在業界內是非常出色的。 更完善的服務監控,從服務指標上,我們依據 Google SRE 文檔制定監控指標(延遲、流量、錯誤和飽和度),并對各個指標進行了服務監控;從應用維度上,我們能夠看到應用實例監控、應用大盤監控、全部應用大盤監控、各種不同指標的 top 榜,實時監測服務質量。
更有價值的錯誤報警。我們對服務進行了錯誤收斂,規范系統錯誤碼和業務錯誤碼,并且能夠自動生成對應的錯誤碼文檔,當錯誤發生時,我們通過文檔就能準確找到錯誤的位置,提升錯誤排查速度。
更全面的服務控制。我們利用配置中心和 etcd,將服務做到可控制性。
更全面的 SOP。我們通過全鏈路壓測、混沌工程等方式,提前解決掉系統中可能存在的嚴重問題,做好 SOP 手冊,這樣當問題真正來臨的時候,我們才會從容處理。
# 擁抱變化
Web 開發和運維技術在不斷的發展,短短幾年已涌現出了非常多的計算形態,如云計算、邊緣計算、容器化、網格化、Serverless 等。服務保障技術方面,異地多活、混沌工程也在不斷發展。
語言棧方面,很多公司也在從早期單一的 PHP、Java 棧擴大到多語言棧并存的局面,特別是近年來 Golang 因在容器化和運維效率上的優勢,越來越多的被應用到 Web 服務開發。但每次技術迭代,享受效率提升的同時,也在不斷經歷應用改造和遷移的痛苦。
以斗魚為例,從 2016 年底我們開始改造基礎設施,啟動應用服務化建設。短短三年就經歷了公有云、異地多活、容器化部署等階段,目前也在部分業務中探索邊緣計算和 Serverless 等新的計算形態。2017 年開始,我們將語言棧從單一的 PHP 擴展為以 Golang、Java、PHP 為主的多語言棧,隨之而來的是多 RPC 協議的混戰,http1.1、dubbo、gRPC、私有 RPC 協議紛繁冗雜,聯調效率極低。經過一段時間的迭代,目前已基本統一為外部調用以 http1.1 為主、內部調用以 gRPC 為主,減少自定義 RPC 協議的使用。
從 Golang 應用的角度來看,面臨的是一個在不斷變化的運行環境和持續豐富的外部環境,這將不斷的產生新的問題,比如: 容器化有 IP 漂移的問題,傳統基于 IP 的服務注冊和運維方式需要作出改變。
Serverless 的服務監控問題,指標采集以及鏈路追蹤等如何適配?
Service Mesh 相對于傳統部署方式,服務注冊和發現的方式有很大變化。
多機房部署中,跨機房調用這種’弱網環境‘ 對服務超時、重試、熔斷、負載均衡等可用性策略有更高要求。
不同于傳統 RPC 框架和微服務治理框架,Jupiter從一開始就以應用為中心,定位為一個微服務應用的運行時。在歷次技術架構,如: 多機房建設
公有化
容器化
中,Jupiter有效的降低了應用遷移和升級的成本,期間也積累了許多架構經驗。未來也必將在 Service Mesh
Serverless
等計算形態中,發揮重要的作用。
# 提升開發效率
開發效率是基礎框架和類庫的核心關注點之一,Jupiter從一開始就挑選和使用了大量開源類庫,但也因此帶來了若干問題: 開源類庫質量參差不齊。如果不加約束的引用開源類庫,類庫的缺陷就會不受限的在組織內傳導,修復的成本非常高。
許多類庫并未遵守版本規范,這將會產生兼容性問題,影響開發效率。
許多功能都有多個類庫可供選擇,不加約束將增加維護和溝通成本,也帶來了一定地風險。
不同類庫代碼風格差異大,有一定溝通成本
不同類庫使用的錯誤處理和錯誤碼、日志、指標采集、對 Debug 模式的支持不盡相同,這既影響開發效率,也影響服務治理。
基于上述原因,我們在基礎框架和類庫中,對主要應用場景常用的類庫都增加了一層封裝,盡量減少對第三方類庫的直接使用。封裝的方法有: 利用 Golang 在語言層面上的一些機制進行簡易封裝:
type alias: type T = package2.T
variable binding: var Func = package2.Func
統一 New 方法,以簡化創建過程,并達到配置驅動的效果
通過 type embedding 擴展類庫功能,為第三方庫擴展如動態配置、指標收集、鏈路追蹤、統一日志、統一錯誤碼等治理能力。
通過 interface 抽象限制調用行為。對于未穩定的類庫,可以采用這種方式限制用戶的調用行為,以便將來進行完善和替換。
基于以上方法,Jupiter既提高了開發效率,也有效的降低了開發風險。
同時,Jupiter為封裝的第三方類庫和自研類庫提供了統一的治理能力,包括: 統一的指標采集
鏈路追蹤
日志埋點
統一錯誤處理
動態配置
安全策略
Debug 模式
等,可以極大的提高應用開發效率。
# 總結
Web 后臺技術在設計、開發、部署、運維各個階段都在快速發展,微服務應用架構方法、運行環境和治理環境也都在不斷變化。
基礎框架作為溝通業務邏輯和運行環境、治理環境的媒介,是穩定業務的重要手段。
Jupiter服務于整體技術架構,并緊隨業界技術趨勢,三年我們對Jupiter的研發,其具有超出同行很多優秀的特性,詳情請見后文。
總結
以上是生活随笔為你收集整理的jupiter 依赖_Jupiter 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新颖的自我介绍_简短有创意的自我介绍
- 下一篇: vmos框架_VMOS虚拟大师独立的安卓