訪談 阿里超大規模Docker化之路

2021-09-23 17:51:55 字數 2122 閱讀 1322

林昊(畢玄),阿里巴巴研究員,平台架構部負責人,**服務框架(hsf)作者,異地多活專案負責人,目前致力於資源統一管理排程系統建設。

眾所周知docker技術這幾年大熱,但是過去相當長的一段時間內,阿里內部技術人員只能自己私下玩玩,沒法在阿里內部生產環境使用docker,因為docker要求的os版本和核心版本都比較高,阿里內部的alios5u7和alikernel2.6.32核心是在centos-5.7和linux-2.6.32核心基礎上做了很多定製而來,沒法執行docker。如果將內部os從5u、6u公升級到7u,將核心從2.6.32公升級到docker官方推薦的3.10,除了之前眾多的核心、os補丁需要和高版本做合併和功能對齊之外,還必須和上層應用經過足夠多的磨合,這可不是一朝一夕就能完成的事情。阿里的應用數量龐大,種類眾多,光相容性的驗證沒個1、2年的時間沒人敢把核心應用放上去。因此雖然docker能給研發和運維帶來的好處,作為技術人員大家都心領神會,但是面對docker浪潮卻只能是坐觀弄潮者,徒有羨魚情。

於是我們從去年6月份開始對docker和t4都做了一些修改整合後,將兩者融合為了乙個產品,相當於既讓t4具備了docker的映象能力,又讓docker具備了t4對內部運維體系的友好性,並且能夠執行在內部的alios5u7和2.6.32核心上。這個產品在內部稱為alidocker,在去年8月份推出了第乙個雛形版本。另外這個版本還解決了docker當時很嚴重的乙個問題,就是daemon退出其上所有的容器都會退出,這一點在真正生產環境大規模部署時是無法接受的。docker官方直到1.10版本才開始部分解決這個問題。我們當時的docker版本從1.5一直跟進到後來大規模部署的1.9版本,通過docker的daemon管控程序和容器的解耦,daemon重啟後對之前執行容器的自動識別和重新接管,解決了這個問。這樣docker在阿里內部大規模應用就有了可能。

從這個版本發布到能夠替換t4大規模部署還走了很長的路,首先t4和docker畢竟是兩個不同的產品,除了大家耳熟能詳的容器機制之外,其實還有非常多的細節和特性。為了讓應用在遷移中無感知,alidocker對原先t4容器的細節功能做了全面的相容,同時對上層的運維系統做了大量改造,使其支援docker場景下的發布和運維模式,從docker映象構建到分發啟停、擴容遷移都做了完備的工具和流程支援。其次在t4到alidocker切換的過程中,我們做了2者混跑的支援,也就是說同一臺物理機上可以同時跑原來的t4容器和新的alidocker容器,互不干擾並且能統一運維。因為眾多應用的例項是交錯部署在眾多物理機上,同乙個物理機上往往有十幾個不同應用的例項混跑。這種相容機制就保證了不同應用可以按各自的節奏逐步完成docker化,而不需要在某個時間和空間做一刀切,避免了大規模公升級docker的過程中不必要的應用騰挪和遷移。然後在我們將alidocker和t4功能完全對齊,從例項級別到應用級別做了足夠的灰度後,推送了乙個開關,使得從那一刻開始建立新t4例項時會自動建立為alidocker例項,從而完成了增量例項的切換。對於存量的t4例項,我們選擇了乙個完整的深圳交易單元,分批次做了批量切換,在切換期間如果發生大的問題,可以把深圳單元的流量全部切換到上海。這一保障要得益於阿里的異地多活災備架構,對於這類底層基礎設施的公升級能夠提供理想的兜底方案,使我們敢於放開手腳去做,而又能有效的控制風險。所幸在整個公升級洗牌的過程中,沒有動用到這個大殺器的功能,雖然出了一些小問題但都能及時修復,影響不大,也讓我們的系統更加健壯,讓各個部門的人對交易核心流量切換到alidocker這件事情更有信心。

但是僅僅將執行容器從t4切換到docker其實對我們帶來的改變並不大。docker真正的核心價值在於映象機制,以及映象機制帶來的研發與運維模式的變革。應用映象化大致來說有2種方式,一種是比較保守的方式,映象中只包含基礎環境,容器起來後,再登入到容器中部署應用包。這種方式和原先的t4類似,映象化上不夠徹底。為了徹底**環境不一致的沉痾,從機制上杜絕非標準變更,讓每個環境改變都沉澱下來,我們採取了另一種更激進的方式:映象中除了包含基礎環境外,還包含應用程式。應用新版本發布時,直接銷毀原有的容器,用新版本的映象啟動新的容器提供服務。這樣任何在上乙個容器中做的小動作都會隨著下一次發布全部清洗掉,如果想要保留下來,就必須固化到應用的dockerfile中。乙個應用映象就代表了應用的所有依賴環境和當前版本。任何時間任何地點將應用最新映象拉起,都能得到和線上其他例項一致的服務和行為。我們在推廣alidocker的過程中,一直和所有的應用方強調這個理念,也獲得了大家的認同。

SkyWalking為超大規模而生

譯者 董旭 本人 熱心的朝陽群眾 skywalking做為apache的頂級專案,是乙個開源的apm和可觀測性分析平台,它解決了21世紀日益龐大 分布式和異構的系統的問題。它是為應對當前系統管理所面臨的困難而構建的 就像大海撈針,skywalking可以在服務依賴複雜且多語言環境下,獲取服務對應的指...

Azure超大規模資料庫入門

雲的優勢之一是規模。我們不會將三大雲平台稱為超大規模。他們在全球擁有龐大的資料中心,擁有數百萬台伺服器,這些伺服器可以視為計算和儲存池。現代的分布式應用程式可以執行在許多計算核心上,每個核心都有自己的記憶體,所有定址核心都達到了tb級。我們從構成雲的所有物理基礎架構中抽象出來,將我們使用的所有內容都...

azure 入門 Azure超大規模資料庫入門

azure 入門 雲的優勢之一是規模。我們不會將三大雲平台稱為超大規模。他們在全球擁有龐大的資料中心,擁有數百萬台伺服器,這些伺服器可以視為計算和儲存池。現代的分布式應用程式可以執行在許多計算核心上,每個核心都有自己的記憶體,所有定址核心都達到了tb級。我們從構成雲的所有物理基礎架構中抽象出來,將我...