AndroidDocker一致架构设计(4)

-- <分合自如>的设计模式(Design Pattern)

 

 

两支App分别跑在两个不同的集装箱里,然后透过 Docker平台的通信协议(如REST)来交互信息。有一天,维运人员为了节省资源而把这两地集装箱里的两支App加以<合并>到同一个集装箱里运行,却不需要开发者更改两支App的代码。

 

 

By 高焕堂 (台灣Docker論壇 主席)

misoo.tw@qq.com  2015/03/09

 

高煥堂的相關文章:

   A01、从「集装箱」思考Docker风潮:Docker潮流下的赢家策略

   A02、Docker:从容<器>到集装箱设计之<道>

   B01、Android和Docker的一致架构设计(1):追求今天决策的未来性

   B02、Android和Docker的一致架构设计(2):包装<跨集装箱>的通信协议

   B03、Android和Docker的一致架构设计(3):建立企业主的<核心集装箱>

 

 

前言:Docker集装箱的<分合自如>设计

   本文是针对“DevOps”范围里的一个特别而有趣的议题。就是:在开发者的心智模式(Mental model)里,他撰写的两支App(或者是一支App里的两个模块),分别跑在两个不同的集装箱里,然后透过 Docker平台的通信协议(如REST)来交互信息,而且都运行得很顺利。有一天,云平台的维运人员,为了节省资源而把这两地集装箱里的两支App加以<合并>到同一个集装箱里运行,却不需要通知开发者更改两支App(或两个模块)的代码。兹详细说明如下。

   首先,为了运行集装箱,我们需要有个Docker 核心(即Docker Engine)。

   

    图-1、Docker 核心

  开发者依据他的心智模式,设想两个个模块分别在不同的集装箱上运行,然后就撰写了DockerFile脚本,并传递给云平台的维运人员,准备让Docker Engine来读取这个脚本文件。

   

    图-2、Docker Engine会参考DockerFile脚本 

  于是,Docker Engine就依据这个脚本的配置指示(如下图里的Config. Script-A)来创建了两个集装箱。

   

     图-3、依据Script-A而布署 

   这Script-A表达了开发者的意图:Client App与Server App之间是跨集装箱的通信和交互。有一天,维运人员想把两支App合并到同一个集装箱里运行,于是修改了脚本里的Config. Script指示。

   

    图-4、改变了Config. Script内容 

  例如,将配置脚本改写为Config. Script-B(如下图所示)。然后,透过Docker Engine来重新布署。于是,Docker Engine就依据这个新脚本的配置指示来创建了一个新集装箱。

   

     图-5、重新布署了 

  此时,并不需要要求开发者修改其源代码,甚至其代码镜像都可以保持原状,直接合并到同一个集装箱就行了。这种优越的架构设计,让维运者拥有更大的空间,也让“DevOps”合作体验更上层楼。

   

     图-6、分合自如的“DevOps”合作体验 

   自然界生物之设计,其主要限制是:信息的有限性(Information Limitations)。由于这项限制,一个生物形体的造成,是出自一个概括性的计划:<单纯的造形>。随着生物的成长、与环境的交互信息越多,逐渐在细节上修修补补,就发展出<不同的内涵>。然后,基于单纯的造形,不断进行<重复的组合>。这就是集装箱三项特性(或特质)的来源。例如,漂亮的枫叶林,就是合乎“单纯造形、不同内涵、重复组合”三项特性。许多造形相同(且不同细节)的枫叶,组合出一遍美丽的树林,如下图:

         

       图-7、重复组合出美丽 

   再如人们的手掌的造形也都极为相似,其细节纹路也各不相同,也满足上述三项特性。关于<信息的有限性>与自然造物法则,在生物学界的探讨论文已经非常多了。在此就不多叙述了。在软件设计方面,开发者也是受限于<信息的有限性>,必须透过优越的架构设计,来提供给后续维运人员依据布署环境的现实条件而进行修修补补。唯有开发者避免过度设计(Over-Designed),不要冻结未来(Frozen Future),才能认维运人员高度发挥Docker集装箱的潜能和魅力。本文内容包括下列三个小节,敬请继续阅读与指教

  • Section-1Android与Docker的设计模式
  • Section-2Android的进程(集装箱)概念
  • Section-3一致的架构,应用于Docker集装箱

 

ee                                               ee

~ End ~