以前的一個電商開放平臺,里面的設計思路和理念拿出來和大家分享一下
該平臺統(tǒng)一各大電商服務提供方的服務匣掸,進行編排后提供為開放的API為各個業(yè)務產(chǎn)品服務霞揉。
在設計平臺架構時,主要考慮以下幾個因素:
1般又、高并發(fā)和高吞吐量,我們采用分段式的架構巍佑,段與段之間采用同步非阻塞方式的通信方式茴迁,并且在http協(xié)議接入部分采用異步servlet方式。
2萤衰、整個平臺的可用性堕义,這其中包括以下幾個方面
?a、整個系統(tǒng)的健壯可靠(QoS),包括流量控制倦卖、超時處理洒擦、重試、排隊
?b怕膛、資源最大化利用率熟嫩,基于業(yè)務區(qū)分,不同的業(yè)務復雜度可能不一樣褐捻,需要的資源會不一樣掸茅,比如可以設置某個服務的處理線程數(shù)量
?c、可伸縮柠逞,保證每一段都是可以伸縮的昧狮,無狀態(tài),負載均衡
3板壮、支持業(yè)務的動態(tài)部署更新逗鸣,模塊化
下面介紹一下平臺的架構。
整個平臺分為三段(接入绰精、業(yè)務編排慕购、接出),段與段之間采用分布式的部署方式茬底,采用同步非阻塞NIO的通訊方式(Mina)。
1.接入段:
協(xié)議接入采用Jetty6 異步servlet获洲,continuation
安全認證阱表,
?????????? a、參數(shù)的MD5加密
?????????? b贡珊、應用方需要申請一個應用key
?????????? c最爬、用戶完成和第三方的綁定《用戶名稱和他對應的第三方的access key保存在開放平臺中》
??????????? d、用戶《應用的使用者》需要事先登錄該平臺门岔,獲取開放平臺的access key<加密解密>
流控爱致,每個用戶都需要申請流量,有流量的限制寒随,可以防止對平臺非預期的大的沖擊
數(shù)據(jù)拆包封包糠悯,協(xié)議數(shù)據(jù)和平臺標準數(shù)據(jù)格式的轉換
2.業(yè)務編排段(路由):
??????????? a、mina nio socket協(xié)議訪問(線程池妻往,根據(jù)業(yè)務來設置)互艾,
b、服務容器<服務名稱讯泣,編排邏輯---標準格式>纫普,包括
服務名稱
服務上下文
輸入和輸出定義
邏輯實現(xiàn)(服務上下文到邏輯輸入的映射,輸出參數(shù)到服務上下文的映射)
3.接出段:
????????? a好渠、流量排隊控制昨稼,由于無法保證第三方提供的服務質量节视,所以需要考慮這個控制
????????? b、超時控制假栓,同上
????????? c寻行、重試,同上
????????? d但指、數(shù)據(jù)拆包封包(安全內容寡痰,協(xié)議數(shù)據(jù)組裝等)
????????? e、協(xié)議接出棋凳,以第三方的協(xié)議調用第三方的服務
服務的業(yè)務開發(fā)拦坠,是以單獨的包的形式部署,每一個服務可以動態(tài)的上線剩岳、下線贞滨,并且有自己的classloader。
段節(jié)點的伸縮擴展拍棕,由于http請求是通過Nginx做負載均衡分發(fā)請求到接入段晓铆,所以接入段的擴展和可用性由nginx來保證;其他兩個段利用zookeeper做節(jié)點的狀態(tài)管理绰播,調用方做監(jiān)聽骄噪,并進行輪詢調用服務節(jié)點做負載均衡。
本文轉載自:http://www.dalbll.com/Group/Topic/ArchitecturedDesign/3747