522
微信
集群內服務間路由和負載均衡__服務發現和負載均衡_用戶指南_容器服務-阿裏雲
在容器服務上可以通過 acsrouting 將基於域名的 HTTP 服務暴露出去,而且能夠配合健康檢查自動的負載均衡和服務發現,當其中一個容器出現問題之後,routing 會自動將健康檢查失敗的容器從後端摘除,所以能做到自動的服務發現。
然而這個例子是將服務暴露到外網,那麼服務間如何通過這種方式做到自動的服務發現和負載均衡呢?容器服務引入了負載均衡功能,您隻需要使用以 .local
結尾的域名,並在依賴的服務的 external_links
中增加這個域名, 依賴的服務便可以通過 .local
的域名訪問到依賴的服務,並且能夠配合健康檢查做到自動的服務發現。
實現原理
利用了 Docker 1.10 之後支持在容器中做別名的方式,在依賴負載於
restserver.local
的服務的容器中restserver.local
的域名解析到的是 routing 服務的地址,這樣可以將 HTTP 請求轉發到routing
的容器,並帶上HOST
為restserver.local
的請求頭。routing 會對配置了
aliyun.routing_port_xxx: restserver.local
的服務監聽其容器的健康狀態並掛載到 HAProxy 的後端,HAProxy 接收到帶有restserver.local
HOST 頭的 HTTP 請求就能轉發到對應了容器了。
優勢
- 相對於使用 link 或者 hostname 的基於 DNS 的方式,首先不同客戶端對 DNS 緩存的處理不一致會導致服務發現的延遲性,其次 DNS 的方案也隻有 round robin,對於微服務的場景是不夠用的。
- 而相對於其他的微服務服務發現的解決方案,提供了一個實現無關的服務發現和負載均衡機製,無需 server 端和 client 應用做任何修改即可使用。
- 服務生命周期是解耦的,每個微服務可以采用一個 docker-compose 模板獨立部署,更新。相互之間隻是通過一個虛擬域名實現動態綁定即可。
編排實例
restserver: # 模擬 rest 服務
image: nginx
labels:
aliyun.routing.port_80: restserver.local # 使用 local 的域名,隻有集群內的容器可以訪問這個域名
aliyun.scale: "2" # 擴展出兩個實例,模擬負載均衡
aliyun.probe.url: "https://container:80" # 定義容器的健康檢查策略是 http,端口是 80
aliyun.probe.initial_delay_seconds: "2" # 健康檢查在容器起來之後兩秒之後再檢查
aliyun.probe.timeout_seconds: "2" # 健康檢查超時時間,如果兩秒還沒返回認為不健康
restclient: # 模擬 rest 服務消費者
image: registry.aliyuncs.com/acs-sample/alpine:3.3
command: "sh -c 'apk update; apk add curl; while true; do curl --head restserver.local; sleep 1; done'" #訪問 rest 服務,測試負載均衡
tty: true
external_links:
- "restserver.local" #指定 link 的服務的域名
然後,通過如下的 restclient 服務的日誌,您可以看到 restclient 的 curl 的 http 請求被路由到不同的 rest 服務的容器上了,容器 ID 分別為 053cb232fdfbcb5405ff791650a0746ab77f26cce74fea2320075c2af55c975f
和 b8c36abca525ac7fb02d2a9fcaba8d36641447a774ea956cd93068419f17ee3f
。
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066803626Z Server: nginx/1.11.1
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066814507Z Date: Fri, 01 Jul 2016 06:43:49 GMT
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066821392Z Content-Type: text/html
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066829291Z Content-Length: 612
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066835259Z Last-Modified: Tue, 31 May 2016 14:40:22 GMT
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066841201Z ETag: "574da256-264"
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066847245Z Accept-Ranges: bytes
internal-loadbalance_restclient_1 | 2016-07-01T06:43:49.066853137Z Set-Cookie: CONTAINERID=053cb232fdfbcb5405ff791650a0746ab77f26cce74fea2320075c2af55c975f; path=/
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.080502413Z HTTP/1.1 200 OK
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082548154Z Server: nginx/1.11.1
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082559109Z Date: Fri, 01 Jul 2016 06:43:50 GMT
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082589299Z Content-Type: text/html
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082596541Z Content-Length: 612
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082602580Z Last-Modified: Tue, 31 May 2016 14:40:22 GMT
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082608807Z ETag: "574da256-264"
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082614780Z Accept-Ranges: bytes
internal-loadbalance_restclient_1 | 2016-07-01T06:43:50.082621152Z Set-Cookie: CONTAINERID=b8c36abca525ac7fb02d2a9fcaba8d36641447a774ea956cd93068419f17ee3f; path=/
最後更新:2016-12-13 13:56:17
上一篇:
簡單路由-HTTP 協議變為 HTTPS 協議__服務發現和負載均衡_用戶指南_容器服務-阿裏雲
下一篇:
負載均衡路由__服務發現和負載均衡_用戶指南_容器服務-阿裏雲
API調用方式__API使用手冊_歸檔存儲-阿裏雲
綁定彈性公網IP__快速入門_專有網絡 VPC-阿裏雲
存儲包購買流程__購買指導_文件存儲-阿裏雲
資源查詢場景__場景示例_Open API_消息隊列 MQ-阿裏雲
移出不健康ECS實例__使用須知_用戶指南_彈性伸縮-阿裏雲
通過 Docker 工具連接集群__快速入門_容器服務-阿裏雲
虛機windows站點報錯500處理方法__網站訪問異常_技術分享_雲虛機主機-阿裏雲
ALIYUN::SLB::LoadBalancer__資源列表_資源編排-阿裏雲
RecordLogType__數據類型_API文檔_雲解析-阿裏雲
專有網絡和交換機__網絡_用戶指南_專有網絡 VPC-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲