golang 實現配置中心 (一)

項目背景,之前在上家東家接觸到golang,自學到項目上線,也是摸着石頭過河,中間也遇到了一些小bug(生產環境出現內存泄露問題,導致業務佔用內存,居高不下,實際是因爲項目的service層部分應用沒有應用到redis或數據庫,但是也進行了實例化,最後沒有釋放資源導致,排查方法也是比較笨,就是一些流程在本地跑,看哪些環節導致內存居高不下,最後追查到的結果),隨之後來業務的golang需求增加,公司一些業務也使用golang抽離了出來,成爲服務化的內容(歷史業務使用的php,包括多服務調用優化爲golang的協程實現調用,mq的生產消費者服務、其中有rocketMQ、Beanstalk、RabbitMQ),包括後續的一些中臺業務也使用golang寫(其實中間公司有一段時間要求全員轉go,但是由於諸多因素,就剩下了我一個人去處理go的業務了,到最後我也離職了,直到目前前東家的業務有問題,還會偶爾聯繫到我幫忙解決一下,不過業務趨於穩定,已經沒有什麼太多的問題了)。

以上是瞭解到我接觸golang,以及golang業務的基礎業務範疇,但是其中出現了一個比較嚴重的問題:部署方案及配置多項目重複問題,由於當時整體技術偏於寫業務能力,個人沒有太多探索相關技術解決方案,當時只是意識配置重複性導致業務遷移地址、配置的複雜性引發的工作量、及時性、錯誤性等問題,當時並沒有特別好的解決方案(前東家團隊對技術比較支持新穎,特別適合技術增長),直到前段時間瞭解到攜程的apollo、阿里的nacos,受到了很多的啓發(其中也是前團隊主管調到某米後給了一些點播,統一配置他們的部署方案)。

直奔本次的業務主體,實現語言還是使用了go(目前就職單位對go是不會在觸碰到了, 也算是給自己一個實戰的一個小機會,雖然不能夠應用到生產環境了),其中開發過程受到了一些阻礙(websocket長連接分組、整體業務架構侷限等),最後通過網上了解了一些方案,並且也實際代碼也採用了一些網上搜索到的結果,下面展示一下業務最重心的截圖,訂閱與推送:

其中纔用到了幾個重要的技術點:

golang的rpcx、gin框架(原本使用echo,但是針對多端口監聽轉換成了gin框架,兩個框架都可以實現,只不過覺得更加優雅一些)、github.com/gorilla/websocket、github.com/gomodule/redigo/redis等

簡單代碼結構截個圖:

業務流程:

實現了一個分佈式的配置中心
對接zookeeper實現註冊中心(後續優化成自己內部)
支持訂閱,實時推送,全量通知,系統通知,指定客戶端通知
目前支持api方式調用,後續增加sdk包(個人語言站有限,後續sdk只能支持 js、php、go、java),同期增加web-ui界面
日誌支持多種方式(文檔、數據庫等)

給他起了個名字 - sun.

期待他會變得更完美吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章