前言
【第一次嘗試去寫一個系列,肯定會有想不到的地方,歡迎大家留言指正】
本系列將介紹如果從零構建一套分布式系統。同時也是對自己過去工作的一個梳理過程。
本文先整理出構建系統的主要技術選型,以及技術框架。其實在形成如下框架前,我參考了許多資料和結構,也結合中小型公司的時間以及人力等因素綜合。
選型
分布式調用框架
可選的有 dubbox, SpringCloud
dubboX:當當基於dubbo搞的,還在維護可以一用,推薦。
SpringCloud:整合了大量組件,相關文檔比較復雜,需要針對性的進行閱讀,學習成本還是需要一些。
最后選擇:dubbox + zk +Spring Boot
雲平台
可選方案:阿里雲、騰訊雲、百度雲、華為雲等等
大概就是比較不同平台相同配置價格,以及同一平台下不同區域間的價格等等,最終選擇阿里雲。
Redis
用來做緩存自建成本有點高,選擇使用阿里的redis
負載均衡
可選方案: SLB, Nginx.
SLB要收錢,但是比較便宜,有保證,不會掛。 但是可配置的很少,不能根據域名做ip映射等
最后為了減少維護成本,直接使用SLB【測試環境還是要搭建nginx】
CDN
用來緩存靜態文件等,七牛、阿里可選
最終選擇七牛,服務好,反應及時【價格也會低一些】
身份認證
可選方案:session+redis、jwt
從擴展性來說確實jwt比較適合,但是有一個小麻煩,就是處理token的失效問題。【其實主要問題是使用token增加了代碼復雜度】
最終選擇session+redis
擴展:有人會說瀏覽器可以很好支持cookie但是移動端很難支持,其實移動端支持也不難。iOS端可以從HTTPCookieStorage讀取cookie,請求時設置cookie。Android端使用Cookiejar。
權限控制
shiro:一直都在用shiro,也比較簡單
數據庫
oracle:使用阿里雲的話自建oracle還是比較麻煩的
mysql:可以自建也可以用阿里的RDS
最終選擇阿里雲數據庫RDS
持久層框架
常用Mybatis,那就繼續用吧
部署架構圖
附一張阿里的部署架構圖供大家參考
完整流程圖地址:https://www.processon.com/view/5b4d9b26e4b09a67416e1611
項目調用關系圖
項目模塊說明
service 為業務層 即服務提供者(包含 service實現及facadeService實現、Dao)
facade為接口層(只定義 接口類 與 實體類)
middle為服務中間層 (通過facade層 調用service層 )可以理解為web層與api層共用的模塊
web為服務消費者,包含web頁面 (通過facade層 調用service層 )
api為服務消費者,主要為客戶端提供api服務 (通過facade層 調用service層 )