【編者的話】隨着企業逐漸將傳統的單體應用向微服務或雲原生應用的轉變,雖然微服務或者雲原生應用能給企業帶來更多的好處,但也會帶來一些具備挑戰的問題,如怎麼管理從單體應用轉向微服務所帶來的服務間通信的複雜性,怎麼實現微服務間安全,高效,可靠的訪問,如何知足多語言多環境的透明通信,服務發現、熔斷,動態流量遷移,金絲雀部署,跨數據中心訪問等等。本次分享給你們引入一新概念服務網格(Service Mesh)以及介紹業界主要服務網格(Service Mesh)工具linkerd。html
在開始介紹linkerd以前,首先不知道你們對Service Mesh這個概念或者名詞有多深的瞭解,反正我在今年以前是沒有據說過這麼個新詞兒(孤陋寡聞了)。Service Mesh實際上是在當前微服務或者雲原生應用領域的一個buzzword。那麼,Service Mesh究竟是什麼東東?能作什麼?能給微服務或者雲原生應用帶來什麼好處?有必要使用或者部署Service Mesh嗎?好,那今晚就跟你們聊聊linkerd,順便回答這些問題。算法
Service Mesh能作什麼?後端
Service Mesh是必要的嗎?這可能沒有一個絕對的答案,可是:緩存
業界有哪些Service Mesh產品?安全
linkerd的特性:微信
快速、輕量級、高性能。網絡
支持任意開發語言及任意環境。app
提供基於感知時延的負載均衡。負載均衡
運行時流量路由。
熔斷機制。
插入式服務發現。
支持多種協議:HTTP/1.一、HTTP/二、gRPC、Thrift、Mux。
linkerd術語:
{{{ ##################################################################################
##################################################################################
admin:
port: 9990
namers:
routers:
protocol: http
label: outgoing
dtab: |
/consul => /#/io.l5d.consul/dc;
/svc => /$/io.buoyant.http.subdomainOfPfx/svc.consul/consul;
httpAccessLog: /alloc/logs/access_outgoing.log
servers:
protocol: http
label: incoming
dtab: |
/consul => /#/io.l5d.consul/dc;
/svc => /$/io.buoyant.http.subdomainOfPfx/svc.consul/consul;
servers:
telemetry:
kind: io.l5d.prometheus
usage:
enabled: false}}}
Router:linkerd配置必須定義router模塊,能夠定義多個router,其它包括服務所使用協議Protocol、Identifier、Transformer、Server、Dtab、Client、Service以及Interpreter。
在細聊linkerd如何處理應用請求以前,咱們來看看linkerd官方給出的數據處理流程圖。
至此,linkerd已完成如何處理應用請求,下面是一個演習如何從服務名字到真實地址轉換的例子。
Q:具體的測試性能有麼,對比LVS、Nginx?
A:linkerd雖然是網絡代理,但跟LVS、Nginx仍是有不一樣的,所解決的問題也不一樣,好比linkerd經常使用的部署方式以sidecar模式部署。 對於性能數據,單個linkerd是能夠能夠處理20K/sec請求,p99延遲在10ms之內,可是超過20K,在個人測試環境,提升不大。而跟Nginx和LVS的對比,還沒作過。
Q:可否說說 「熔斷機制(circuit-breaking) 」怎麼理解?
A:linkerd支持2種方式進行熔斷,一種是基於會話或者連接,另外一種是基於請求的熔斷。對於會話層的熔斷,linkerd在轉發請求到後端應用實例時,若是發現其中一個連接出現問題,linkerd會將它從維護的一個池子裏移除,不會有真實請求發送到該實例,而在後臺,linkerd會嘗試鏈接,一旦鏈接成功,linkerd再次將它加入池子繼續提供服務。
而對基於請求的熔斷,linkerd會根據linkerd的配置進行處理,好比配置爲io.l5d.consecutiveFailures, linkerd觀察到指定數量的連續錯誤,則熔斷,其餘的方式能夠查看linkerd.io/config/1.1.…
Q:linkerd如何實現水平擴展的?集羣對linkerd計算節點數量有限制嗎?
A:linkerd自己是無狀態的,因此水平擴展很是容易,集羣對linkerd的數量取決於你是怎麼部署linkerd的,linkerd.io/in-depth/de…
Q:看最後的表格好像能實現展現服務調用鏈,展現上下游關係?能不能借此發現具體服務壓力瓶頸在哪一環,是否有性能監控?
A:linkerd提供詳細的metric, 這些metric會告訴你性能出如今哪一個地方,還有linkerd原生跟zipkin集成,因此你能trace到服務的訪問流,會展現每一環節的性能狀況。
Q:能否對比一下Istio?
A:對應Istio的底層Envoy和linkerd本質上實現了差很少相似的功能,linkerd支持Kubernetes、DC/OS,而且跟多種服務發現工具集成,而Istio,就我瞭解,目前支持Kubernetes,具體Istio的使用,沒有使用過,不太清楚。
Q:若是linkd是無狀態,那怎麼維護內部的熔斷池?
A:這裏的無狀態是指linkerd工做時各個實例之間不須要信息的同步,即便一個實例出現問題,對個整個環境的正常工做無關痛癢,只需從新啓動便可,全部服務發現的信息都是存儲在外部,好比Consul、ZK等,本地只會有緩存,沒有持久化的數據,而熔斷池的信息就是來自於服務發現系統。
以上內容根據2017年07月04日晚微信羣分享內容整理。分享人楊章顯,思科高級系統工程師。主要關注雲計算,容器,微服務等領域,目前在思科負責內部PaaS平臺的構建相關工做。 DockOne每週都會組織定向的技術分享,歡迎感興趣的同窗加微信:liyingjiesa,進羣參與,您有想聽的話題或者想分享的話題均可以給咱們留言。