基于docker的設計模式

一. 面向對象和設計模式

設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。使用設計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。設計模式是在面向對象技術出現以后,由工程師們總結出來的寶貴經驗。其中,最主要的23種設計模式,收錄在【Design Patterns: Elements of Reusable Object-Oriented Software】一書中

設計模式的細節可能不同,但是總體的設計思想和原則都遵循如下:
單一職責原則 (Single Responsiblity Principle SRP)
開閉原則(Open Closed Principle,OCP)
里氏代換原則(Liskov Substitution Principle,LSP)
依賴倒轉原則(Dependency Inversion Principle,DIP)
接口隔離原則(Interface Segregation Principle,ISP)
合成/聚合復用原則(Composite/Aggregate Reuse Principle,CARP)
最小知識原則(Principle of Least Knowledge,PLK,也叫迪米特法則

二. 引入docker技術帶來的新變化

隨著docker技術和微服務的日趨成熟。怎樣合理的設計container的邊界職責和協作帶來了新的挑戰。這個問題和面向對象及其之上的設計模式要解決的問題十分類似。container 相當于object,image相當于Class定義

三. 3種抽象設計模式

1. single-container patterns for container management

  • container本身提供了類似Object一樣的封閉性
    container暴露的interface相當于類暴露的public方法
    例如,container的資源使用情況,健康情況,等等
    container生命周期的hooks,比如:created,started,before termination等等
    container的可復制性-replica:類似拷貝構造函數

2. single-node patterns of closely cooperating containers

  • sidecar pattern
    在主要工作的container之外,掛載一個"保姆container"。二者一起提供某種服務。kubernetes中的pod實現了類似的思想。其中"保姆container"可以被復用。


    sidecar pattern

    上圖中的"保姆container"提供了日志收集的功能,職責分離,可以分別單獨測試,可以被復用
    這樣設計的另一個好處是:可以分開升級,不相互影響。"保姆container"可以關閉,降級服務

  • ambassador pattern
    代理模式。一個額外的代理container負責與外部的分布式服務通訊,簡化、屏蔽了外部系統的復雜性。主container只需要假設和localhost的進程通訊即可

ambassador pattern

如上圖,代理container可以負責與外部的分布式存儲連接提供容錯,負載均衡等功能。該container可以被復用

  • Adapter pattern


    Adapter pattern

    如上圖,adapter container 適配了不同的主container和統一的監控框架之間的信息差異。同樣,adapter container 也可以方便的復用

3. multi-node patterns for distributed algorithms

  • leader election pattern
    原來的選主操作需要application集成lib來實現,如:集成raft協議的lib來實現。另一個更好的選擇是使用一組帶leader election 功能的“保姆container”來實現。application需要區分主從的時候,依賴本pod的“保姆container”狀態來區分。帶leader election的container可以復用

  • work queue pattern
    使用docker 靈活的啟動消費Worker container來處理Queue中的Job
    一個真實Use Case:視頻處理, 1pod分析處理1個mp4視頻文件,并且使用gpu硬件加速

work queue pattern

灰色的worker container中基礎框架部分,可以重用
kubernetes 原生支持此workload類型:Job

  • scatter/gather pattern
    這種模式在搜索引擎中十分常見。整體后端服務,是一個樹形的結構。根節點接收/分發query給不同的庫,之后,整合,rank不同庫的返回結果,返回給用戶
scatter/gather pattern

如上圖,灰色的container完成了并發的分發,和整合數據的復雜操作,可以復用。用戶自定義的邏輯container可以方便的在之上做進一步操作處理

綜合上述的3種設計模式。個人覺得,基于docker的設計模式有如下的優點
1)更好地拆分服務(模塊,containers)給不同的team,支持各種語言,提高研發效率。微服務架構也是類似
2)更高級別的復用模塊,如:一個container整體通過配置,可以很方便地添加到一套新的分布式系統中去,想拼積木一樣,靈活插拔

四. 參考

  1. 【Design patterns for container-based distributed systems】
  2. 【Kubernetes Production Patterns and Anti-Patterns】
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容

  • 設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。設計模式是軟...
    Chars閱讀 681評論 2 5
  • 設計模式(使代碼編制真正的工程化) 設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分...
    賽亞人之神閱讀 149評論 0 0
  • 設計模式是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更...
    4ea0af17fd67閱讀 709評論 0 3
  • 我們的生活里,總是有人作弊。 排隊有人插隊,辦事有人行賄,就連玩兒個游戲,都有人開外掛寫腳本。 對于那些代碼仔程序...
    福釀閱讀 398評論 0 0
  • 漫長的黑暗像深淵下沉寂的死水,似乎要吞沒了她。 她驚恐地奮力扇動翅膀,向著刺破黑暗的那一星光點飛去。 靠近一點,再...
    三水林楓閱讀 480評論 1 2