返回介绍

第 37 章 容器图

发布于 2024-08-18 00:06:35 字数 2826 浏览 0 评论 0 收藏 0

一旦通过语境图了解了你的系统如何融入整个IT环境,真正有用的下一步就是通过容器图说明高层次的技术选择。

意图

容器图可以帮助你回答下面的问题。

1.软件系统的整体形态是什么样的?

2.高层次技术决策有哪些?

3.职责在系统中如何分布?

4.容器之间如何相互交流?

5.为了实现特性,作为一个开发者,我需要在哪里写代码?

结构

画一个简单的框图来展示你的关键技术选择。比如,如果画金融风险系统的解决方案图,根据你的解决方案,大概会画出下面这样的图。

金融风险系统(见附录)的容器图示例

这些示例图展示了组成风险系统的不同的Web服务器、应用服务器、独立应用程序、数据库、文件系统,等等。包含一些语境图的概念往往对丰富内容很有用,比如用户和风险系统依赖的其他IT系统。

容器

这里说的“容器”,指的是组成软件系统的逻辑上的可执行文件或过程,诸如:

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等)。

职责:容器职责的高层次声明或清单。你也可以展示一张驻留在每个容器中关键组件的小图,但我发现这通常会把图搞得很乱。

如果你纠结于容器图中是否要包含一个框,只要问自己,这个框是否会(或者能)部署到一个单独的物理或虚拟硬件上。你展示在容器图上的每件东西都应该能够单独部署。这并不意味着你必须将它们部署在单独的基础设施上,但它们应该能够单独部署。

交互

容器间的通信通常是进程间通信。明确这一点并总结这些接口将如何工作是很有用的。和其他任何图相同,它对于标注交互行为非常有用,而不仅仅是由一堆框和连接它们的含混的线组成的图。下面是一些有用的信息:

交互的目的(如“读/写数据”、“发送报告“等);

通信方法(如Web服务、REST、Java远程方法调用、Windows通信基础、Java消息服务);

通信方式(如同步、异步、批量、两阶段提交等);

协议和端口号(如HTTP、HTTPS、SOAP/HTTP、SMTP、FTP、RMI/IIOP等)。

系统边界

如果你选择将不属于你构建范畴的用户和IT系统囊括其中,在适当的容器周围画一个框来明确地标定系统边界可能是个好主意。系统边界对应了语境图上的一个框(比如“风险系统”)。

动机

语境图展示的软件系统是一个盒子,容器图则是打开盒子,展示里面的东西。这很有用,因为:

让高层次的技术选择更明确;

展示了哪些容器之间有关联,以及它们如何沟通;

提供了一个放置组件的框架(也就是说,所有的组件都有一个家);

展示了高层次的语境图和通常很乱的组件图之间经常缺失的连接,组件图画的是整个软件系统中所有的逻辑组件。

和语境图一样,画容器图应该只需要几分钟时间,因此真的也没有理由不做这件事。

受众

直接从事软件开发的团队内部和外部技术人员;包括从软件开发者到运营和支持人员的每一个人。

示例

下面这张图展示了组成“技术部落”网站的逻辑容器。

“技术部落”—容器

简单地说,“技术部落”由一个向用户提供信息的Apache Tomcat Web服务器组成,而信息则通过独立的内容更新进程来保持最新。

所有数据都被存储在MySQL数据库、MongoDB数据库或文件系统当中的一个。值得指出的是,这张图并未提及每个容器的物理实例的数量。比如,可能有一片运行在MongoDB集群上的Web服务器,但这张图并未展示这个层次的信息。相反,我在一个单独的部署图上展示了物理实例、故障转移、集群等。容器图展示了软件架构的高层次形态,以及职责如何分布。它也展示了主要的技术选择以及容器如何相互交流。这是一个简单的高层次技术图,对软件开发者和支持/运营人员很有用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文