隨着應用規模的增加服務則須要擴展集羣休部署,在集羣化部署過程首先要考慮服務負載處理的問題,在實現應用場中有不少集羣化的負載方式,如網絡通信層面的LVS,HTTP應用協議層面的nginx.然而這些負載都依賴於中心化服務,而SmartRoute的設計理念是去除中心化來實現應用層集羣負載處理;而SmartRoute的服務定義和應用調用都不須要明確服務地址和端口,這樣使用服務設計實現更靈活。接下來介紹一下如何經過SmartRoute簡單實現一個服務集羣負載應用。 nginx
SmartRoute的設計其實服務和client一說,全部實例都是一個節點,全部實例節點即充當服務的同時也是客戶端。在應用中開啓一個節點實例是一件很是簡單的事情。 網絡
Route.DefaultNode.Open();
只須要一句話就能夠打開一個節點,定義者不須要設置服務的地址和端,由於SmartRoute的設計原則是零配置的通信服務原則。 spa
SmartRoute通信不存在服務和客戶端一說,只有訂閱和向訂閱生產消息。只要在一個節點上添加訂閱,那相關訂閱會自動同步到不一樣服務的節點上。 設計
mSwitch = new SubscribeSwitch(); mSwitch.GetServiceSubscribe(Service.REGISTER).RegisterProcess<Register>((o, e) => { e.Data.Completed = true; e.Data.RegisterTime = DateTime.Now; e.Reply(e.Data); });
以上是註冊一個REGISTER的訂閱,並註冊一個處理Register消息的處理過程,並返回相應的處理結果。 code
Register reg = new Register { Name = "henry", EMail = "henryfan@msn.com", PassWord = "123456" }; reg = mSwitch.Send<Register>(Service.REGISTER, reg);
請求處理並不須要關心具體的服務通信地址,只須要明確具體的服務名稱便可以完成,在整個過程當中開發者都不須要關心服務通信方面的東西,只須要關注訂閱服務名便可以進行通信。 開發
只要運行相關程序,那就會自動構建節點進行相關通信處理。 部署
無配置集羣是smartroute的主要功能點,不過是訂閱都或生產運行多份就會組成集羣負載通信交互。 get
只要運行多個訂閱實例,那相關節點就會自動發現,生產者也會自動地把請求負載到不一樣的訂閱者中。 同步
smartroute是採用自動發現服務機制進行設計,因此在整個通信環節中開發者並不須要關心服務的定義和運行。在設計通信交互過程只須要關注訂閱者的名稱便可,這能夠讓開發者在編寫通信應用的進修變動簡單和靈活。 it