刀耕火種 Debug?為什么不使用 Juno
我們常常會思考為什么程序員每天各種查 bug。。。

又或者各種 Debug。。。

又或者各種艱難上線

對于一個程序員而言,構建一個服務并不難,麻煩的是對服務的觀測和治理。如果沒有好的方法和工具,我們就只能刀耕火種,一行行 debug 或者查 bug,這樣的效率不僅慢,而且很難分析到根因。服務上線則是各種人工 check 依賴,運行的穩(wěn)不穩(wěn)定,有沒有問題,全靠知人事聽天命。
俗話說工欲善其事必先利其器。我們如果沒有好的工具,強行上微服務,會導致我們不得不加班加點做業(yè)務以外的事情,徒增工作內容和心智負擔。我們經歷過這個階段,所以不希望同行在重復這一段經歷。試問誰不想早點下班,回去學學技術,貢獻一下開源Jupiter 框架?
因此為了這個目的,我們將 Juno 進行了開源。經過一個月的努力,我們完成了 Juno 0.2 版本。目前該版本在斗魚內部開始使用。該版本的功能點如下所示:
提供 api 接口,業(yè)務方自動注冊應用、機房、部署等信息
實現(xiàn) form 表單、oauth2 登錄
實現(xiàn) casbin 權限(應用、環(huán)境、數據等權限管理)
實現(xiàn) grpc unary、grpc stream、http 的代理(異地多活、消息總線)
實現(xiàn) grafana proxy 內嵌到 juno,統(tǒng)一監(jiān)控和 juno 登錄用戶
實現(xiàn)配置中心編輯器,類似 vscode、git 方式管理配置,并支持右鍵關聯(lián)資源,加密資源。
實現(xiàn) pprof 在線查看性能
實現(xiàn) agent 自動上報 region、zone、hostname 和探活
實現(xiàn)應用和資源依賴拓撲依賴解析關系
部署
juno 是一個考慮了單機房和多機房的微服務管理系統(tǒng)。其結構如下。如果是單機房,那么你就不需要使用 juno-proxy。如果你使用機房,那么你需要使用 juno-proxy 做一次代理,方便 juno-admin 與不同機房數據互通。

搭建微服務管理后臺 juno,依賴于如 go、mysql、etcd、prometheus、grafana、pprof、juno-agent(prometheus etcd watch) 等基礎組件和設施。為了方便大家能夠快速使用 juno,我們編寫了juno-install ,大家可以使用腳本或者 docker 安裝依賴環(huán)境,體驗我們的 juno。
配置
我們內部討論配置中心是使用表格還是文本,表格的好處是便于管理和迭代開發(fā)、但不利于研發(fā)人員使用,文本的好處是研發(fā)人員使用簡單,但管理和迭代開發(fā)麻煩。這個問題我們思考了好久,最后決定還是以研發(fā)人員用戶體驗為主,采用文本方式。
為了讓大家更好使用配置中心,就需要思考怎么使用配置中心最簡單。我們認為配置中心應該是可以像我們本地 ide 開發(fā)一樣,能夠將配置復制粘貼,版本管理,代碼對比。因此我們將配置文本變成了編輯器方式。如下所示

點擊對比版本后,可以看到不同版本提交記錄變化

右鍵可以選擇插入資源中心的數據。
后期我們會在右鍵加入很多功能,敬請期待

監(jiān)控
監(jiān)控是排查問題核心手段之一。監(jiān)控的服務注冊與發(fā)現(xiàn)流程如下所示。

應用通過 jupiter 框架將服務治理端口注冊到 etcd,juno-agent 會監(jiān)聽/prometheus/job 的前綴 key,將應用治理端口寫入到 prometheus 配置里,prometheus 通過 reload 操作,感知到 jupiter 的應用,然后去對應端口,抓取該應用監(jiān)控數據。我們可以訪問juno-admin 應用?,可以看到 juno-admin 的監(jiān)控圖如下所示。

juno 使用 grafana proxy 模式,這樣就可以使用 juno 的用戶體系,直接訪問 grafana。
Pprof
Pprof 是在線調試工具。我們通過 juno-install 腳本,可以很方便的安裝 pprof 所需要的依賴。然后就可以在 juno 上輕輕點擊按鈕,在線查看 pprof 圖片。
!


0.3 版本敬請期待
日志
grpc postman
http postman
etcd register 可視化
治理信息可視化
歡迎大家在https://github.com/douyu/juno/issues提出自己想要的功能點。也歡迎大家使用該項目,能夠更好的完善他項目,讓大家少加班。
項目地址
jupiter 框架:?https://github.com/douyu/jupiter
juno 微服務治理后臺:https://github.com/douyu/juno
juno 在線體驗地址:http://jupiterconsole.douyu.com
