![cover](https://img-blog.csdnimg.cn/img_convert/b1e96efd600044aaad7b2f286cc1a69c.png)
使用 Azure 和开源软件创建云本机应用程序
云原生应用程序代表了一种现代的应用程序开发方法,其中软件系统的设计考虑到了云的规模和功能。云原生应用程序在可行的情况下基于开源技术构建,重点关注架构模块化。在关注开放技术时,“云原生”意味着部署目标的灵活性,同时仍然能够使用 Azure 特定服务,例如 Azure Cosmos DB 和 Microsoft Entra ID。
此实践学习路径涵盖了为云原生应用程序选择组件、构建集成以及部署到 Azure 的基本知识。
您将创建多个服务,处理来自设备的大规模消息和来自 IoT 设备的流数据。
介绍
云原生应用程序代表了一种现代的应用程序开发方法,其中软件系统的设计考虑了云技术。与最初设计为在本地运行的应用程序不同,云原生应用程序可以充分利用 Azure 提供的许多服务。
许多云架构师在设计云原生应用程序时选择 Kubernetes 和 Docker 等开源软件 (OSS),但当优势巨大时,会转向 Cosmos DB 等专有产品。因此,云原生应用程序使构建应用程序的端到端过程变得更加容易,重点是架构模块化,而不是单一的一体化应用程序。您可以利用适合您的技能和情况的技术,而不必局限于技术选择。
场景:大规模智能冰箱、更智能的服务
假设您在 Adatum Corporation(一家家用电器制造商)工作,领导一个小型开发团队,并负责为智能冰箱构建应用程序。
例如,我们可以从为冰箱创建一个小型库存管理应用程序开始,这样企业就可以知道需要重新进货的商品,或者可能自动重新订购商品。云原生应用程序的本质是具有松散耦合的功能,因此我们可以在设计中更加敏捷,并避免预测未来的需求。相反,如果有必要,我们可以扩展该应用程序。稍后,我们可以向应用程序添加功能,例如连接到冰箱遥测和板载传感器。
什么是云原生应用程序?
云原生方法允许您构建基于云的应用程序,您可以在其中选择要使用的组件。数据库和 .NET Function 应用程序等组件可以作为服务耦合在一起,形成系统的独立部分。例如,您可能有库存服务、订购服务和支付服务,每个服务都有自己的技术选择。
此外,云原生应用程序本质上是模块化的。您选择云服务和技术,并将它们松散地耦合在一起,如图所示。云原生应用程序通常采用另一种模式,称为微服务。请注意每个服务如何拥有自己的技术堆栈,独立于其他服务使用的技术,这意味着您选择适合每个服务的技术,而不是一刀切的解决方案。
通过云原生,我们使用许多预构建类型的服务或具有预构建基础设施的服务。因此,我们可以使用 Kubernetes 或 Azure Function Apps 的扩展,以及 Cosmos DB 或 Hyperscale for PostgreSQL 的异地冗余数据存储。
因此,虽然基于“微服务”构建的应用程序通常具有许多相同的特征,但“云原生应用程序”可以在其工具链的某些部分中使用很少甚至不需要使用自定义代码来获得高级功能或卓越的操作。
此外,通过将不同的组件松散地耦合在一起来创建应用程序,您可以根据需要更改技术,而无需重写整个应用程序。例如我们的智能冰箱,每项服务都可以升级、部署、扩展和重新启动,而不影响其他服务,从而允许频繁更新。
使用您擅长的技术
大多数云原生服务支持多种技术。 Kubernetes 支持多个客户端操作系统和任何技术堆栈,例如 .NET、Node、Ruby 和 Java。可以使用任何主要编程语言连接的数据库有多种选择。
您可以将后端连接到为一项服务选择的关系数据库,同时还可以使用更适合另一项服务的 NoSQL 数据库和预构建的分析服务。您可以在同一个整体云应用程序中快速、简单地完成这一切。
将容器与云原生应用程序结合使用
使用容器的可靠、独立的环境
容器是可以运行软件包的松散隔离的环境。它们通常是云原生应用程序的关键组件,因为它们提供了一个可靠的、独立的环境,可以在任何计算机上以相同的方式工作。容器通常被称为“Docker 容器”,以最流行的创建和管理容器的工具命名。
每个容器都是独立的,具有自己的代码、数据和依赖项。容器化的优势之一是您无需配置硬件并花费时间安装操作系统、虚拟机和软件来托管部署。
虽然我们可以直接使用容器,但通过将工作软件程序从我们自己的机器转移到云端,我们还可以从服务中导出容器。例如 Azure 语音服务,它将实时语音转录为文本,并作为容器映像提供,可以直接部署到您自己的系统中。许多 Azure 服务在底层都使用容器,因此可用范围很广。
![](https://i-blog.csdnimg.cn/blog_migrate/046559a7c2d56737a044ec545a1dd963.png)
容器很容易与云服务一起使用。它们确保,一旦经过测试,您的应用程序在本地计算机上的工作方式与在云上的工作方式相同,从而为您提供更可靠、低维护的体验。这种容器化意味着您可以通过复制容器轻松扩展,并且应用程序的每个实例都位于相同的环境中。此外,您可以使用容器编排器(例如 Kubernetes)来管理容器。编排容器凭借其轻量级的特性,可以比虚拟机更经济、更灵活地进行扩展。
使用 Kubernetes 服务轻松管理容器
Kubernetes,通常缩写为 K8s,是一种为您管理多个容器的技术。您可以连接容器,以便数据库可以与后端通信、扩展资源并自动执行应用程序部署、备份和维护。
Kubernetes 的主要优势之一是能够将应用程序恢复到经过测试和保存的确切实例,也称为自我修复。由于容器可以保存和复制,Kubernetes 可以检查容器的运行状况,并在必要时用原始副本替换它。
如果需求发生变化,Kubernetes 还可以自动增加或减少容器数量。如果容器的流量较高,Kubernetes 可以进行负载均衡并分配网络流量,从而使部署稳定。
此外,使用 Kubernetes 服务的主要好处之一是简化安全配置管理。许多都内置了身份验证服务,允许这些服务为大多数国家/地区和行业提供合规性产品。
此外,当组件更新时,您可以自动化 Kubernetes 为您的部署创建新容器、删除现有容器并将其所有资源采用到新容器。 Kubernetes 服务(例如 AKS)可以简化容器管理,并可以大量节省开发时间、成本和安全义务。持续集成和持续交付(CI/CD)使 Kubernetes 服务能够优化开发管道和应用程序部署。
设计云原生应用程序
由于云原生应用程序由您选择的组件组成,因此您可以轻松构建使用您熟悉的技术的解决方案。例如,如果 Python 更适合您的数据分析服务,但您的电子邮件服务更适合使用预构建的解决方案,则云原生应用程序的架构模块化可显着简化实施。这种模块化甚至可以扩展到不同的云提供商。
例如,许多云服务(例如 Azure Database for MySQL)允许你使用你习惯的开源版本的技术进行开发,但让 Azure 为你负责管理和部署职责。
为 Adatum 构建云原生解决方案
在我们的场景中,我们可以构建一个解决方案,该解决方案既可以让小团队轻松开发,又可以安全地扩展到数千台设备。云功能消除了因需要连接大量设备并按需处理数据而产生的许多开发问题。通过使用云基础设施,可以轻松配置预构建的服务以相互通信并根据需要自动扩展。
稍后,如有必要,该解决方案可以扩展以适应新的或更新的产品。在我们的场景中,如果一家连锁酒店订购了数千台冰箱需要额外的功能,您可以创建额外的服务,而无需为现有客户造成停机。
从小事做起
首先,我们可以使用一个基本的 Web 应用程序作为管理界面。云中的简单后端可以将消息从智能冰箱中继到 Web 应用程序,然后可以将其容器化并部署到 Kubernetes 集群,因此容器的数量可以根据需要进行扩展。下图显示了这种关系。 Node.js Express 盒子将消息中继到我们的 Webapp Next.js 盒子,这两个盒子都是从我们的 Kubernetes 服务部署的。
该解决方案可以轻松连接到您选择的数据库,从而允许快速启动和运行可扩展的端到端服务。
发展我们的应用程序
智能设备提供丰富的连接和数据选项。物联网领域的进步为收集数据并将其流式传输到云端提供了经济高效的选择。适用于智能设备的物联网云服务易于连接,允许您传输冰箱温度、功耗和水质等遥测数据。
开发人员可以使用物联网中心和流分析等云服务来开发具有物联网集成的云原生应用程序。由于已经为您完成了大部分基础工作,因此可以显着缩短开发时间。
由于云原生应用程序的松散耦合性质,您可以为遥测数据选择更适合流数据的不同数据库解决方案(例如 Cosmos DB),而不是可能更适合库存服务的传统关系数据库。
![](https://i-blog.csdnimg.cn/blog_migrate/3aeee4a3d0f7ba76084eb44a743c85bd.png)
由于服务是分离的,您的团队还可以开发和部署 IoT 服务,而不会影响您现有的库存服务,如下图所示。
何时使用云原生应用
云原生应用程序在架构上与更传统的软件工程方法不同。由于云原生是一个非常广泛的类别,因此您可以轻松创建一个架构来满足大多数需求,例如上市速度、机器学习等新技术的集成以及快速适应客户反馈。
现有应用程序现代化
云原生应用程序不仅仅适用于新项目。虽然改造应用程序可能永远不会“真正原生于云”,但许多现有应用程序将受益于云原生思维——允许发布单个功能而无需重新部署整个系统,同时仍然提高可靠性。
对现有应用程序进行云优化通常具有成本效益,因为您可以更好地利用细粒度的可扩展性和改进的系统弹性。许多云服务提供适合云架构师和开发人员的管理功能,因为它降低了对专家管理的需求。
例如,Azure Database for PostgreSQL 具有类似于 DBA 的内置数据库管理功能,可以为你管理底层操作系统和数据库。
逐步采用云原生方法
对应用程序进行部分现代化并不一定意味着完全迁移和重新架构。通过将现有架构迁移到更加模块化、基于服务的架构并使用基于 API 的通信,现有应用程序可以向云原生方法发展。您可以通过添加基于云原生范例的新服务来扩展和发展现有应用程序。
根据优先级和用户需求,逐步采用这些技术和方法通常是有意义的。
何时不使用云原生应用程序
如果您已经拥有一个无法提供足够价值来投资现代化的现有应用程序,那么云原生应用程序可能不太适合。此外,如果您的应用程序具有可预测的资源需求,则现有的数据中心和现有的管理基础架构可能会很好。
然而,即使在这些情况下,您可能仍然需要考虑混合方法,即您的本地应用程序可以与其他基于云的应用程序和服务配合使用。
在工业中使用云原生应用程序
云原生流程使用自动化,例如 CI/CD 管道,使开发人员能够专注于开发代码,而不是许多传统系统涉及的部署开销。
许多拥有云原生架构的公司拥有数千个独立服务,每天部署数百次甚至数千次。他们可以即时更新实时复杂应用程序的小区域,并根据需要单独扩展这些区域。
![](https://i-blog.csdnimg.cn/blog_migrate/646c8ea6e9ab32df4f53e5ee58a6f6dc.png)
概括
在本模块中,您了解了云原生应用程序。您还了解了服务、容器以及其他云服务和概念。
云原生应用程序提供了一种新的、现代的系统构建方法。如果你想了解更多关于容器的知识,可以查看Docker容器简介。如果您想详细了解如何编排容器,可以参见Kubernetes 简介和Azure Kubernetes 服务简介。
现在您已经复习了本模块,您应该能够:
- 描述云原生应用程序的基本结构
- 确定应该构建云原生应用程序的情况
更多推荐
所有评论(0)