讀古今文學網 > 程序員必讀之軟件架構 > 容器 >

容器

這裡說的「容器」,指的是組成軟件系統的邏輯上的可執行文件或過程,諸如:

  • Web服務器1 (比如Apache HTTP服務器、Apache Tomcat、微軟IIS、WEBrick等);
  • 應用服務器(如IBM WebSphere、BEA/Oracle WebLogic、JBoss AS等);
  • 企業服務總線和業務流程編排引擎(如Oracle Fusion中間件等);
  • SQL數據庫(如Oracle、Sybase、微軟SQL服務器、MySQL、PostgreSQL等);
  • NoSQL數據庫(如MongoDB、CouchDB、RavenDB、Redis、Neo4j等);
  • 其他存儲系統(如亞馬遜S3等);
  • 文件系統(特別是如果你在數據庫以外讀/寫數據);
  • Windows服務;
  • 獨立/控制台應用程序(即「public static void main」風格的應用程序);
  • Web瀏覽器和插件;
  • cron和其他計劃的工作容器。

1 如果多個Java EE Web應用程序或.NET網站是同一個軟件系統的部件,通常會在單獨的類加載器或應用程序域裡被執行。我用單獨的容器來展示它們,因為它們是獨立的,要靠進程間通信(比如遠程方法調用、SOAP、REST,等)來協同工作。

圖上的每一個容器都可以指定下面這些項。

  • 名稱 :容器的邏輯名稱(如「面向互聯網的Web服務器」、「數據庫」等)。
  • 技術 :容器的技術選擇(如Apache Tomcat 7、Oracle 11g等)。
  • 職責 :容器職責的高層次聲明或清單。你也可以展示一張駐留在每個容器中關鍵組件的小圖,但我發現這通常會把圖搞得很亂。

如果你糾結於容器圖中是否要包含一個框,只要問自己,這個框是否會(或者能)部署到一個單獨的物理或虛擬硬件上。你展示在容器圖上的每件東西都應該能夠單獨部署。這並不意味著你必須將它們部署在單獨的基礎設施上,但它們應該能夠單獨部署。