在MicroXchg 2017柏林大會上,DigitalOcean的微服務可擴展性專家Martin Campbell針對如何使用分布式調度器運行基于微服務的架構做了一個演講。在演講中,Campbell著重介紹了在他們在部署過程中遇上的一些問題,以及在他們是如何權衡選用Kubernetes、Nomad和Mesos等產品的。
演講的關鍵要點包括:
分布式調度器使得用戶可將集群理解為單一的物理機。 分布式調度器簡化了DevOps,大大降低了普遍存在于基于微服務架構中的操作復雜性。 沒有任何現有產品可以完美地運行有狀態服務,因此最好不要使用現有產品去運行這類服務。 在網絡分區的情況下,即便有些過程所在的主機節點不能與主服務器通信,容錯的分布式調度器也應該保持所有進程的運行。Campbell首先指出,操作系統內核就是一種集中式調度器,因為它在單一計算機上實現了對多個進程的管理。他進而闡述了分布式調度在概念上與集中式調度器是類似的,差別在于它是跨集群中各機器工作的,而非工作于單一機器上。“我們可以與整個數據中心通信,就像是面對單臺物理機一樣。”
分布式調度器尤其適用于微服務架構。Cambell認為這是考慮到那些額外的操作開銷,這些操作開銷是由不斷得以擴展和部署的多個服務所導致的。
對于如何選擇多種分布式調度器的問題,Campbell首先介紹了他在Mesos上的實戰經驗。當使用Mesos時,用戶不需操心進程所在的實際物理機,因為Mesos是基于對CPU和RAM等資源的限額處理做部署的。Mesos還提供了一個儀表盤,可像查看單一物理機那樣方便地實現數據中心的可視化。
Campbell指出,Mesos的主要問題在于它對網絡分區的處理方式。如果一個進程不能與Mesos的主服務器通信,那么該進程就會被殺掉。在Campbell看來,這并非是一種好的設計方式,事實上,因為網絡分區普遍存在于分布式系統中,在這種情況下應該繼續保持應用的運行。他以Kafka為例說明了這種行為會導致數據的丟失。雖然Kafka是一種分布式消息總線,在設計上考慮了彈性問題,但是分區還是可以導致丟失幾乎全部的單一節點及數據。
Campbell最終棄用了Mesos,他先是轉向Nomad作為替代。Nomad的優點在于,它具有自身的Gossip協議,允許服務器在同一數據中心中及跨數據中心間的相互通信。在網絡分區的情況下,同一分區中的服務會保持功能及通信,并在分區識別時成為最終一致的。但是由于Campbell并不了解有任何在生產環境中運行Nomad的應用,因而不想冒險遷移到Nomad上。
他最終選定了Kubernetes。盡管Kubernetes類似于Mesos,Campbell還是從中發現一些獨到之處。最主要是,Kubernetes對網絡分區處理機制不同,并不會在上述情況下殺死實例。它也提供了儀表盤,讓用戶易于了解集群的狀態,減少了處理應用中的抽象層級。
該演講的視頻可以在線完整觀看,其中詳細地介紹了Campbell正在處理的應用架構及各種調度器。
查看英文原文: Distributed Schedulers with Microservice Architectures