服務發(fā)現和注冊
我們有了兩個服務。服務A的IP地址是192.168.0.1,端口9001,服務B的IP地址192.168.0.2,端口9002。我們的客戶端需要調用服務A和服務B,我們只需要在配置文件中寫上服務A和服務B的IP地址即可。
此時,服務A的服務器負載有點高,我們需要臨時增加服務A的實例,IP192.168.0.3,端口9001。但是我們的客戶端要怎么才能調用新的實例?
常規(guī)來說,我們可以有以下幾種方法:
網絡代理方式
如果是http方式通信的服務,可以增加一個nginx做反向代理,轉發(fā)到兩個服務A的實例上。
如果是RPC服務則可以增加一個LVS或HAProxy或者ESB之類的網絡代理,客戶端配置網絡代理地址。
服務B我們再來一套一樣的配置,這時候又來了服務C、服務D、服務E...,好吧我們好還要再多維護同樣多的網絡代理。此外,所有的服務調用服務調用都必須經過網絡代理,我們還必須保證代理的高可用。最后,陷入運維災難。DNS方式
給服務A配置一個域名,然后通過配置兩個A記錄分別指向兩個服務A的實例,客戶端只要配置服務A的域名即可。
這種方式也存在問題,首先DNS沒有辦法管理端口,我們的端口還是只能寫在每個客戶端的配置文件中。此外DNS輪詢負載均衡能力太弱,可能會導致客戶端負載的不均衡。
現在有了服務發(fā)現和注冊機制,我們可以更合理的解決這個問題。
服務發(fā)現和注冊,參考字面意思很容易理解,其核心部分可以理解為一個服務注冊表。服務啟動時,將自己的信息注冊到注冊表中。注冊表需要每一定時間訪問下已經注冊的服務,將沒有響應的服務從注冊表中刪除。最終讓客戶端拿到正常運行的服務地址。
此時,我們的服務注冊表必須具備分布式、高可用、強一致性等特點。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26