一、電商系統架構演進
1、單一應用架構
當網站規模很小時,採用單一應用框架,把所有的服務集中在一個應用中,但隨着網站規模增大,單一應用框架會越來越難維護。
2、垂直應用架構
把應用垂直的拆分開來,拆分成如支付、查詢等垂直模塊,每個模塊都有從頂層顯示層到底層數據持久層的業務邏輯,每個模塊都是一個獨立的子系統。雖然在一定程度上降低了開發成本和維護成本,但是會導致許多底層業務邏輯代碼的重複。
3、分佈式應用架構
把核心的業務抽離出來,作爲獨立的服務,供上層消費者調用。
這種架構就可以用到Dubbo框架,Dubbo是一個RPC(Remote Procedure Call Protocal)框架,用於實現SOA架構,在分佈式情況下可以遠程調用其他服務器暴露的方法。
二、Dubbo原理
1、如何做到透明化的調用遠程服務?
採用JDK動態代理技術或CGLib字節碼生成(asm)技術。一般都採用JDK動態代理,因爲代碼易維護。當調用生產者類的服務時,其實調用的是代理類的方法,代理類中執行了通信的業務邏輯,並且獲得最後的執行結果。
2、消息的數據結構
服務調用者請求消息:接口名、方法名、參數類型及參數值、超時時間、RequestID
服務生產者返回消息:返回值、狀態碼、RequestID
RequestID:因爲消息的發送與接收是異步的,爲了辨別返回的消息屬於哪個請求。
3、序列化方式
序列化就是將數據結構或對象轉化爲二進制串的過程,只有轉換成了二進制串才能進行網絡傳輸。
要考慮通用性、性能以及可擴展性。dubbo採用hessian。
4、通信方式
基於NIO。
5、發佈服務
ZooKeeper提供了服務的註冊於自動發現功能,服務提供者的增加、刪除對調用者來說是透明的。還提供心跳機制來檢測服務提供者是否還存在。