名字發現和服務發現分為兩種模式,一個是客戶端發現模式,一種是服務端發現模式。
框架中常用的服務發現是客戶端發現模式。
所謂服務端發現模式是指客戶端通過一個負載均衡器向服務發送請求,負載均衡器查詢服務注冊表并把請求路由到一臺可用的服務實例上。現在常用的負載均衡器都是此類模式,常用于微服務中。
所有的名字發現和服務發現都要依賴于一個可用性非常高的服務注冊表,業界常用的服務注冊表有如下三個:
* etcd,一個高可用、分布式、一致性、key-value方式的存儲,被用在分享配置和服務發現中。兩個著名的項目使用了它:k8s和Cloud Foundry。
* consul,一個發現和配置服務的工具,為客戶端注冊和發現服務提供了API,Consul還可以通過執行健康檢查決定服務的可用性。
* Apache Zookeeper,是一個廣泛使用、高性能的針對分布式應用的協調服務。Apache Zookeeper本來是 Hadoop 的子工程,現在已經是頂級工程了。
除此之外也可以自己實現服務實現,或者用 Redis 也行,只是需要自己實現高可用性。