SmartRoute零配置零安裝實現分布式負載應用
隨著應用規模的增長服務則需要擴展集群休部署,在集群化部署過程首先要考慮服務負載處理的問題,在實現應用場中有很多集群化的負載方式,如網絡通訊層面的LVS,HTTP應用協議層面的nginx.然而這些負載都依賴于中心化服務,而SmartRoute的設計理念是去除中心化來實現應用層集群負載處理;而SmartRoute的服務定義和應用調用都不需要明確服務地址和端口,這樣使用服務設計實現更靈活。接下來介紹一下如何通過SmartRoute簡單實現一個服務集群負載應用。
定義節點
SmartRoute的設計其實服務和client一說,所有實例都是一個節點,所有實例節點即充當服務的同時也是客戶端。在應用中開啟一個節點實例是一件非常簡單的事情。
Route.DefaultNode.Open();
只需要一句話就可以打開一個節點,定義者不需要設置服務的地址和端,因為SmartRoute的設計原則是零配置的通訊服務原則。
添加訂閱
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消息的處理過程,并返回相應的處理結果。
生產請求
Register reg = new Register { Name = "henry", EMail = "henryfan@msn.com", PassWord = "123456" }; reg = mSwitch.Send<Register>(Service.REGISTER, reg);
請求處理并不需要關心具體的服務通訊地址,只需要明確具體的服務名稱即可以完成,在整個過程中開發者都不需要關心服務通訊方面的東西,只需要關注訂閱服務名即可以進行通訊。
運行結果
只要運行相關程序,那就會自動構建節點進行相關通訊處理。
集群負載處理
無配置集群是smartroute的主要功能點,不過是訂閱都或生產運行多份就會組成集群負載通訊交互。
只要運行多個訂閱實例,那相關節點就會自動發現,生產者也會自動地把請求負載到不同的訂閱者中。
總結
smartroute是采用自動發現服務機制進行設計,所以在整個通訊環節中開發者并不需要關心服務的定義和運行。在設計通訊交互過程只需要關注訂閱者的名稱即可,這可以讓開發者在編寫通訊應用的進修變更簡單和靈活。