社会焦点

使用 Docker 让传统 .NET 应用程序现代化(3)

字号+ 作者: 来源: 2017-05-05

对于版本 2,我稍微更改了一下应用程序代码,将功能实现代码从一个组件移到另一个组件。虽然最终用户行为方式是相同的,但现在解决方案易于扩展,因为 Web 层与数据层分离,消息队列负责处理任何流量峰值。新设计也

  对于版本 2,我稍微更改了一下应用程序代码,将功能实现代码从一个组件移到另一个组件。虽然最终用户行为方式是相同的,但现在解决方案易于扩展,因为 Web 层与数据层分离,消息队列负责处理任何流量峰值。新设计也易于扩展,因为我引入了事件驱动型体系结构,从而可以通过联接现有事件消息来触发新行为。

添加自助式分析

  对于我的示例应用程序,我将再更改一下代码,以说明使用 Docker 平台只需极少的工作即可实现很多功能。应用程序当前使用 SQL Server 作为事务数据库,我将添加第二个数据存储作为报表数据库。这样一来,我可以单独处理报表和事务问题,并能自由选择技术堆栈。

  在示例代码的版本 3 中,我添加了新的 .NET 控制台应用程序,用于侦听 Web 应用程序发布的同一事件消息。当两个控制台应用程序同时运行时,NATS 消息队列会确保两个应用程序都能获得所有事件的副本。新的控制台应用程序会接收事件,并在 Elasticsearch(可以在 Windows Docker 容器中运行的开放源代码文档存储)中保存用户数据。此时,Elasticsearch 是理想之选,既因为它具有良好的扩展性,以便我能够出于冗余考虑跨多个容器对它进行汇集,也因为它提供了十分有用的面向用户的 Kibana 前端。

  由于自版本 2 我没有对 Web 应用程序或 SQL Server 消息处理程序进行任何更改,所以在 Docker Compose 文件中,我仅为 Elasticsearch 和 Kibana 以及将文档写入 Elasticsearch 索引的新消息处理程序添加新服务:

  index-prospect-handler: image: sixeyed/msdn-index-handler:v3 depends_on: - elasticsearch - message-queue networks: - app-net

  Docker Compose 可以对应用程序进行增量升级,不会替换其定义与 Docker Compose 文件中的服务匹配的正在运行的容器。示例应用程序的版本 3 中新增了服务,但没有对现有服务进行更改。因此,当我运行 docker-compose up –d 时,Docker 会为 Elasticsearch、Kibana 和索引消息处理程序运行新容器,而其他服务的容器则按原样运行,这就构成了非常安全的升级进程,无需让应用程序脱机,即可添加功能。

  此应用程序更倾向于约定,而不是配置。因此,依赖项(如 Elasticsearch)的主机名在应用程序中设置为默认名称,我只需确保容器名称在 Docker Compose 设置保持一致即可。

  新容器启动后,我可以运行“docker inspect”获取 Kibana 容器的 IP 地址,然后转到此地址上的端口 5601。Kibana 有一个非常简单的接口,我可以在几分钟内就生成一个仪表板,用于显示使用详细信息登录的用户的关键指标,如图 3所示。

  使用 Docker 让传统 .NET 应用程序现代化

  图 3:Kibana 仪表板

  Power User 很快就可以上手使用 Kibana,能够制作自己的可视化效果和仪表板,而无需涉及 IT 层面。在没有任何故障时间的情况下,我就向应用程序添加了自助式分析。此功能的核心源于我从 Docker Hub 拉取到解决方案中的企业级开放源代码软件。向文档存储提供数据的自定义组件是简单的 .NET 控制台应用程序,只需约 100 行代码即可实现。Docker 平台负责将组件联接在一起。

在 Azure 上运行经过 Docker 处理的解决方案

  Docker 的另一大优势是可移植性。打包到 Docker 映像中的应用程序的运行方式与在任何主机上的运行方式完全相同。本文最终生成的应用程序使用 Microsoft 拥有的 Windows Server 和 SQL Server 映像、Docker 管理的 NATS 映像和我自己的自定义映像。所有这些映像均在 Docker Hub 上发布,因此任何 Windows 10 或 Windows Server 2016 计算机均可拉取映像,并通过这些映像运行容器。

  现在,我的应用程序已可供测试,将其部署到 Aure 上的共享环境十分简单。我通过结合使用 Windows Server 2016 Datacenter 和“容器”选项,在 Azure 中创建了虚拟机 (VM)。在 VM 映像中,已安装并配置 Docker,并且已下载 Windows Server Core 和 Nano Server 的基本 Docker 映像。VM 中未包含的一项是 Docker Compose,我已从 GitHub 发布页进行下载。

  我的 Docker Compose 文件中使用的映像均位于 Docker Hub 上的公用存储库中。如果是私有软件堆栈,你可能并不希望所有映像都公开。仍可以使用 Docker Hub,并将这些映像保留在私有存储库中,也可以使用托管的注册表,如 Azure 容器注册表。在你自己的数据中心内,可以使用本地选项,如 Docker 信任的注册表。

  由于我的所有映像都是公开的,因此我只需将 Docker Compose 文件复制到 Azure VM,然后运行 docker-compose up –d 即可。Docker 会从 Hub 拉取所有映像,并按正确的顺序通过这些映像运行容器。每个组件均使用约定来访问其他组件,这些约定已内置到 Docker Compose 文件中。因此,即使是在全新的环境中,解决方案也仍会按预期启动和运行。

  如果使用的是企业软件版本,即设置新环境是有风险的缓慢手动进程,便能感受到 Windows Server 2016 和 Docker 平台带来的巨大优势。Docker 解决方案中的关键项目(Dockerfile 和 Docker Compose 文件)可直接明确替代手动部署文档。这两个关键项目倡导的是自动化操作,可方便你在任何一台计算机上一致地生成、传送和运行解决方案,整个过程非常简单。

后续步骤

  如果你热衷于亲自尝试 Docker,最好从 Image2Docker PowerShell 模块入手;它可以为你生成 Dockerfile,让你快速开始学习。training.docker.com上免费提供了一些自主掌控进度的优质课程,这些课程为你预配了环境。然后,若要继续深入,请查看 GitHub 上的 Docker 实验室,其中提供了许多 Windows 容器演练。

  世界各地都有 Docker 聚会,你可以聆听从业人员和专家谈论 Docker 的方方面面。Docker 盛会 DockerCon 总是座无虚席。今年将于 4 月和 10 月分别在德克萨斯州和哥本哈根市举行。最后,请关注 Docker Captain(在 Docker 领域等同于 Microsoft MVP)。他们经常在博客和 Twitter 上介绍他们使用 Docker 所实现的炫酷功能,关注他们可以有效把握技术脉搏。

转载请注明出处。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 在Apache Spark 2.0中使用DataFrames和SQL

    在Apache Spark 2.0中使用DataFrames和SQL

  • 京东宣布启动618 变革玩法并开放使用618标识

    京东宣布启动618 变革玩法并开放使用618标识

  • HTC Link 是一台与 U11 配套使用的 VR 眼镜

    HTC Link 是一台与 U11 配套使用的 VR 眼镜

  • OPPO R11使用全新人像优化功能,比你更懂自己的美

    OPPO R11使用全新人像优化功能,比你更懂自己的美