问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

在云中部署应用程序

创作时间:
作者:
@小白创作中心

在云中部署应用程序

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/training/modules/cmu-build-apps-cloud/2-deployments

在云环境中部署应用程序是一个复杂但至关重要的过程,涉及多个阶段和最佳实践。本文将详细介绍从开发到生产的完整部署流程,包括测试、暂存和生产环境的管理,以及如何通过持续集成系统简化部署任务。此外,文章还将探讨如何通过冗余和容错设计提高应用的可用性,并提供了一系列安全强化措施,以确保云应用在生产环境中的稳定运行。

设计和开发云应用程序后,可以将其移动到部署阶段,以便发布到客户端。 部署可以是一个多阶段过程,每个阶段都涉及一系列检查,以确保满足应用程序的目标。

在将云应用程序部署到生产之前,可借助一个清单,参照必要和推荐的最佳做法列表来评估应用程序。 示例包括来自AWS和Azure的部署清单。 许多云提供商都提供了有助于部署的工具和服务的完整列表,如 Azure 中的此文档。

部署过程

云应用程序的部署是一个迭代过程,该过程从开发结束开始,一直持续到生产资源上的应用程序发布:


图 1:代码部署过程

通常,云开发人员需要维护其应用程序的多个并发运行版本,以将其应用程序的部署输送到各个阶段:

  1. 测试
  2. 暂存
  3. 生产

理想情况下,这三个阶段都应具有相同的资源和配置,使开发人员能够测试和部署应用程序,并最大限度地减少因环境和配置更改而造成不一致的可能性。

管道应用程序更改

在典型的敏捷应用程序开发方案(如上图所示)中,应用程序由一组工程师和开发人员维护,他们使用某种问题跟踪机制处理问题和 bug。 对代码所做的更改通过代码存储库系统(如
svn

mercurial

git
)进行维护,在这种情况下,将为代码的发布维护单独的分支。 通过代码更改、评审和审批后,可以将代码输送到测试、暂存和生产阶段。 可以通过多种方式完成此操作:

自定义脚本:开发人员可以使用自定义脚本来拉取最新版本的代码,并运行特定的命令来生成应用程序并将其引入生产状态。

预融入虚拟机映像:开发人员还可以预配和配置虚拟机,使其包含部署其应用程序所需的所有环境和软件。 配置后,可为此虚拟机创建快照并将其导出到虚拟机映像。 可以将此映像提供给各种云业务流程系统,以便针对生产部署自动进行部署和配置。

持续集成系统:为了简化部署中所涉及的各种任务,可使用持续集成 (CI) 工具自动执行任务(例如,从存储库中检索最新版本,生成应用程序二进制文件以及运行测试用例),这些任务需要在组成生产基础结构的各种计算机中完成。 常见 CI 工具的示例包括 Jenkins、Bamboo 和 Travis。 Azure Pipelines 是一种特定于 Azure 的 CI 工具,旨在搭配 Azure 部署使用。

管理停机时间

对应用程序进行的某些更改可能需要部分或全部终止应用程序服务,以将更改合并到应用程序的后端。 开发人员通常需要安排一天中的特定时间来最大程度地减少对应用程序客户的干扰。 为持续集成而设计的应用程序可能能够在生产系统上实时执行这些更改,而很少或不会造成应用程序的客户端出现中断。

冗余和容错

应用程序部署中的最佳做法通常会假设云基础结构是临时的,并且可能随时不可用或发生更改。 例如,根据 SLA 的类型,可以让云提供商来安排何时终止在 IaaS 服务中部署的虚拟机。

应用程序必须避免对各种组件(例如数据库和存储终结点)进行硬编码或假定静态终结点。 精心设计的应用程序最好使用服务 API 来查询和发现资源,并以动态方式连接到这些资源。

资源或连接有时会出现灾难性故障。 设计关键应用程序时必须考虑到此类故障,并且必须考虑到故障转移冗余。

许多云提供商都将他们的数据中心设计为地区和区域。 地区是一个特定的地理位置,其中包含一个完整的数据中心,而区域是独立于容错的数据中心内的各个部分。 例如,数据中心内的两个或多个区域可能有单独的电源、冷却和连接基础结构,因此,一个区域中的故障不会影响另一个区域中的基础结构。 地区和区域信息通常由云服务提供商提供给客户端和开发人员,用于设计和开发可利用此隔离属性的应用程序。

因此,开发人员可以将其应用程序配置为使用多个地区或区域中的资源,以提高其应用程序的可用性,并容许可能跨地区或区域发生的故障。 他们将需要配置系统,以便在地区和区域之间对流量进行路由和均衡。 还可以将 DNS 服务器配置为根据请求的起源位置回复每个区域中特定 IP 地址的域查找请求。 这提供了一种基于客户端地理邻近性的负载均衡方法。

生产中的安全性强化

在公有云上运行 Internet 应用程序时必须谨慎。 由于云 IP 范围是高价值目标的已知位置,因此必须确保在云中部署的所有应用程序在保护和加强终结点和接口时遵循最佳做法,这一点非常重要。 应遵循的一些非常基本的原则包括:

  • 所有软件都应切换到生产模式。 大多数软件都支持使用“调试模式”进行本地测试,而使用“生产模式”进行实际部署。 处于调试模式的应用程序通常会向发送错误输入的攻击者泄露大量信息,从而为黑客提供很容易就可以获取的侦查源。 无论使用的是 Django 和 Rails 这样的 Web 框架,还是像 Oracle 这样的数据库,都必须遵循用于部署生产应用程序的相关准则。

  • 对非公共服务的访问应限制为特定于管理员访问的内部 IP 地址。 请确保管理员必须通过访问内部快速启动板才能从 Internet 登录到关键资源。 配置具有 IP 地址和基于端口的规则的防火墙,以允许所需的最小访问集,尤其是通过 SSH 和其他远程连接工具。

  • 遵循最小特权原则。 将所有服务作为可执行所需角色的最小特权用户运行。 如果系统管理员需要调试或配置系统中的一些关键问题,则会将使用根凭据限制为特定手写登录名。 这也适用于访问数据库和管理面板。 通常应使用较长的随机公钥-私钥对来保护访问,此密钥对应安全地存储在受限制和加密的位置。 所有密码都应有严格的强度要求。

  • 为入侵检测和防护系统 (IDS/IPS)、安全信息和事件管理 (SIEM)、应用程序层防火墙和反恶意软件系统使用常见的防御性技术和工具。

  • 建立修补计划,该计划应与所用系统的供应商发布的修补程序版本相符。 通常,像 Microsoft 这样的供应商都会有一个固定的修补程序发布周期。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号