當前位置:吉日网官网 - 傳統節日 - 微服務架構實踐——妳只知道docker和spring boot嗎?

微服務架構實踐——妳只知道docker和spring boot嗎?

背景

隨著公司壹年多的成長,我們開發了幾十個項目,後臺有JAVA和PHP。為了更好的提高開發和管理的效率,技術大牛和小牛經常激烈PK,碰撞出了很多愛的火花,比如其中之壹:微服務實踐。

設計

只需要壹套基礎微服務,基礎微服務生成業務系統的微服務實例,供各個業務系統調用;業務系統不直接調用BASE,只能調用微服務實例。

這是運維的問題,運維解決。運維中使用工具並不難。反正所有的腳本都是不用手動操作執行的。

單點故障影響全局,所以我們選擇穩定性更重要;另外,saas,為了應對不同行業,會有過度設計的嫌疑;私有化更容易。

呼叫邏輯

設計構思

非模塊化,更不用說微服務了,比如用戶微服務、產品微服務、地址微服務等。以上,都需要先模塊化。為了更好地實現開發,您可能需要模塊化微服務。模塊化的時候註意,不能有相關的查詢,而且包必須完全獨立,然後微服務才可以拆卸。

松耦合是指我們的模塊不是直接依賴的、無狀態的,可以獨立地向外界提供服務;

強內聚是指雖然要拆分成小微服務,但也要考慮到壹些功能的強相關性。舉個例子,凳子是由四只腳和壹塊板組成的,如果不能把四只腳和壹塊板分開賣,那就沒有意義了。

剝削

Spring-boot:與springmvc相比,springmvc的配置文件為零,spring-servlet、spring-mybatis、spring.xml、web.xml等都是spring-boot中不需要的,只需要強大的註釋功能。Boot更適合微服務。

Spring-cloud:裏面有很多組件支持微服務,比如spring cloud config統壹配置中心,用來配置多種環境下的配置文件。妳再也不用擔心多個微服務的開發、測試和配置文件管理了。Spring cloud eureka用於服務註冊和發現,下面單獨介紹。妳可以去官網看看其他組件。這裏就不介紹了。總之,如果是JAVA平臺,盡量用spring系統的內容。

我們用mysql,因為我們有很多應用,但是數據表並不大,大部分都不超過壹百萬。mongodb也做過實驗,非常快速靈活,但是因為不是關系數據庫,維護成本高。

restful:URL的資源和操作是解耦的,這使得URL更具語義性,數百個接口也非常容易管理。網上有很多文章講的很透徹。這個東西不是特別好理解。想多了解壹點,會覺得項目裏像是被壹根矛堵住了。這裏就不詳細介紹了。

界面文檔swagger:與傳統的手工界面文檔相比,swagger有統壹的輸出格式,無論多少人編寫;Swagger用寫代碼的方式寫界面文檔。以前修改代碼,要打開wiki手動修改界面文檔。現在,妳只需要修改代碼。程序員更願意修改,成本更低。前端和其他調用方不會天天喊。為什麽妳的界面又變了?添加新字段是什麽意思?

RocketMQ:我壹直糾結於卡夫卡和rocketMQ,最後選擇了RocketMQ。

為了性能考慮,盡量使用異步編程,比如註冊後發送優惠券,那麽註冊成功可以返回給用戶,但是發送優惠券可以異步調用,不會阻塞註冊線程。

在微服務的框架下,日誌不可能分散在所有的服務節點上,必須有壹個統壹的日誌中心。ELK是壹個實時日誌分析平臺,在日誌中心收集各種服務的日誌,然後可以按照系統、節點等進行搜索。除了上面的搜索條件,我們還實現了根據各種微服務中的服務id(壹次生成壹個服務id)和用戶id進行日誌的搜索,方便跟蹤定位問題。

當然,可能還有更輕量級更易用的disconf或者spring cloud config,但是我們有php開發的應用,這兩個都不支持。如果都是JAVA應用,采用disconf還是很不錯的。

試驗

每個程序員都有這種經歷。他剛上線的時候,客戶反饋了壹個bug。原來我們修改壹個功能代碼,就導致其他功能出現bug,每次上線都沒底。這就體現了接口測試的必要性,尤其是每次版本升級,都需要進行壹次,防止壹個接口的修改導致其他接口報錯,這比手工測試可靠得多。

部署

Docker已經家喻戶曉,這是繼虛擬機之後的又壹次重大變革。所有的個體微服務都放在docker裏,這樣妳想什麽時候部署到什麽地方,只要扔過去,就會爆炸。

通過幾個簡單的命令,就可以實現負載均衡,並且可以平滑升級。版本升級的時候不用告訴客戶:系統通知我們我行00:00-08:00系統升級維護,不要取錢,因為可能取不出來,呵呵。

提升

我們使用工具flyway來控制數據庫腳本的版本。

傳統版本升級,

1.開發推送代碼,記錄妳同時提交了哪些文件;

2.項目經理根據svn審核文件,打包成war包;

3.放入測試環境讓測試公司測試;

4.文件中途被修改,可能需要重新打包;

….

我不能再寫了。項目經理就像壹個超人。

現在用持續集成(CI)很簡單。我們用的工具是詹金斯。推完碼,我們幾個按鍵就可以上線了。無論是測試環境還是生產環境都很簡單,不然項目經理查文檔的時候眼睛都要綠了。

結局

本文主要介紹微服務開發的選擇,不深究細節。有興趣的話可以了解壹下各個組件。當然,我們的選擇是正確的,不同的場景可能完全不同。本文僅供參考。

  • 上一篇:建設項目精細化管理?
  • 下一篇:如何用石膏制作豆腐
  • copyright 2024吉日网官网