閱讀701 返回首頁    go 阿裏雲 go 技術社區[雲棲]


微服務架構實踐之郵件通知係統改造

拆分背景

隨著平台業務增長,功能耦合度越來越高,部署周期變長,代碼樣式混亂、新人入手複雜、獨立功能影響係統的穩定性等等,等等,等等問題。

以郵件通知為案例對服務進行拆分,獨立服務,獨立部署,獨立進程,做到及時上線而不影響平台正常運營。

以此為例,望大家對於經手的功能模塊,有一個良好的規劃,不要礙於項目進度而給自己或者別人製造麻煩。

拆分原因

  • 郵件通知分散於各個係統,配置變更容易遺漏

  • 代碼分散,功能修複麻煩,相應的增加部署難度

  • 多人經手,代碼風格不同,不易於維護

  • 發送模版不規範,導致發送風格迥異

  • 線上生產環境出現問題,在不影響正常運行的情況下,不易於修複

  • 功能集成在項目,增加了調試的難度

  • 影響平台穩定性

拆分優勢

係統拆分雖然會增加了複雜性,但是可以得到更多的好處

  • 數據閉環實現自我管,不依賴於任何係統,即去依賴化這樣的好處是別人抖動不會影響到自己

  • 數據異構,即將各個係統的數據傳輸過來,按照自己的要求去處理

  • 基於Maven管理項目,相比於項目中的Ant構建更高級,當然功能不僅僅是構建,還有一些列的優勢

  • SpringMvc+Dubbo實現服務治理,對外開放接口,也可以自定義實現HTTP請求

  • 基於Thymeleaf模版,實現郵件動態內容模板話,良好的封裝,便於開發和查閱

  • 初次采用Log4j2 ,睜大眼睛是二,沒錯,對比log4j和logbak性能大幅度提升

  • 獨立服務,獨立部署,獨立進程,更加靈活易部署,易擴展

  • 使用LinkedBlockingQueue安全隊列做任務隊列(咱不考慮)

  • 額外增加Redis是為了在大量郵件發送請求下緩解郵件發送服務器壓力(咱不考慮)

技術實現

Maven、SpringMvc、Dubbo、Redis、Thymeleaf、Log4j2、MQ

技術問題

如何快速入門Maven
如何輕鬆搭建一個Maven項目框架
對於在Maven庫中不存在的Jar該如何處理
如何搭建SpringMvc基礎配置
關於Log4j2的正確使用
模版Thymeleaf如何生成靜態文件
任務隊列LinkedBlockingQueue實現
redis使用場景
MQ使用場景

架構圖例

關於Maven

234.png

關於流程

email.png

小站:https://blog.52itstyle.com/archives/1012/

最後更新:2017-06-20 10:01:59

  上一篇:go  《淘寶店鋪經營管理一冊通》一一1.3 頁麵中的圖片應用
  下一篇:go  OpenSearch 使用二三事