一般性问题

问:什么是现代应用程序?

现代应用程序是现代技术、架构、软件交付实践和运营流程的结合,可促使团队更快、更频繁、更始终如一且更安全地交付价值。这些应用程序通常采用松散耦合的分布式技术,并专注于事件驱动的无服务器组件,这些组件使团队能够减少无差别的繁重工作,从而将更多的时间用于为客户交付价值。现代应用程序还利用运营和安全工具来提高部署的可靠性和一致性,同时确保在一天内安全地进行多次部署。与依靠手动流程或更重要的运营管理相比,使用基础设施、安全性和部署自动化让拥有现代应用程序的团队可以更快地移动。

问:各公司如何构建现代应用程序?

现代应用程序通常是通过缩小应用程序的范围来构建的,可打造更好的敏捷性并简化运营和风险问题。这些应用程序的开发人员专注于选择合适的作业工具,确保所选的架构与应用程序的用途相匹配。例如,利用关系数据库可处理通常统一的数据,以显示诸如地址和联系信息之类的关系,而图形数据库可用于管理和可视化相互联系的深层关系,如某人及其各个朋友、家人和同事群组。尽管后者也可以使用关系数据库来构建,但图形数据库依然是最佳选择。从这点上来说,目标是最大限度地减少所选工具的运营管理,并尽可能地利用 AWS 构建块。最后,各公司将尽可能通过自动化来管理和维护现代应用程序。这使得现代应用程序变得轻量级、可靠、可扩展和安全,从而允许拥有者更快、更频繁地提供价值。

问:在 AWS 上构建现代应用程序有何独特之处或突出之处?

AWS 具有广泛的服务和功能,并且总结了现代应用程序开发的常见问题,使公司能够构建各种鼓舞人心的应用程序。如今,AWS 提供了越来越多的无服务器功能,例如 AWS Lambda、AWS Step Functions、Amazon API Gateway 和 AWS Fargate,这些功能使开发人员可以减轻无差别的繁重工作。并且AWS也将无服务器应用程序开发常见问题进行了总结归纳,以便后加入的企业进行参考学习。这些不断增长和日趋完善的 AWS 开发人员工具套件通过基础设施和部署自动化实现开发运营实践。还有一个使用 AWS Cloud9 进行无服务器开发的简单环境。从构建到提交再到发布,AWS 提供了一整套工具,使您能够灵活地持续交付,而无需担心历史产品的程序开发运营问题。最后,AWS 是最早采用微服务架构的公司之一,我们已经建立了丰富的专业知识和工具存储库,使组织能够构建和管理微服务架构。

架构

问:您如何划定微服务的界限?

在划定微服务界限时,要考虑的最重要因素是范围和依赖关系。目标应该是使服务的范围足够小,以便单个团队(通常 5 至 10 个人)能够独立于其他服务或其他团队拥有、管理、扩展和部署服务。界限通常是根据其功能范围来划定和标识的,通常属于单个数据或业务领域。服务的规模不如拥有它的团队的所有权和自主权重要。举一个例子,提供发送或请求付款功能的支付微服务将由存储、集成和计算组件组成,这些组件由通常称为 API 的服务接口绑定。一个团队就可以有效地拥有和管理这项服务。

问:我应该迁移到云还是先拆分整体架构?

企业倾向于在迁移到云之前先开始考虑重构。尽管在某些情况下会在迁移之前强制进行重构,但我们建议您以最少的工作量找到最快的迁移路径 — 最小可行重构。实际情况是,如果是在云中而不是在本地进行重构,那么应用程序的最终架构和构成将大不相同。例如,可以使用 AWS 构建块在云中以不同方式进行重构。您还可以受益于云中基础设施的按需可用性,从而可以通过减少投资更安全地进行重构和测试。

问:现代架构如何提高安全性?

微服务不仅可以提供可由小型自主团队拥有和运营的较小系统,而且可用于构建微服务的技术还为自动化、扩展和安全性提供了新的机会。

AWS 客户 Travelex 是现代架构如何提高安全性的完美示例。Travelex 在全球 130 个国家/地区开展业务,是全球可信赖的货币兑换公司。他们希望从本地的整体数据中心模型迁出,以比当前速度(每年 8 次)更快的速度发布,并提高安全性。尽管他们在遵守金融法规方面拥有数十年的经验,但尚不熟悉如何让云工作负载获得批准。

他们的设计具有更高的安全性,使其能够使用 Docker 和 Amazon Elastic Container Service 以及包括 AWS Key Management Service、Amazon VPC 和 Amazon Web Application Firewall 的安全性控制框架来获得批准并部署微服务架构。他们创建了自动化、可审计且防篡改的部署。而且,为了减少盗用的影响半径,他们设计了一个程序,可在 24 小时后摧毁每个容器,并重新部署新的安全证书,以尽量减少敏感配置丢失或被盗的影响。他们现在能够每周部署 100 次,而以前的低频模型每年才能部署 8 次,他们实施的自动化流程改善了他们的整体安全状况。

文化/组织

问:如何组织团队以实现所有权和自主权?

在亚马逊,我们建立了“两个披萨团队”,这个名字源自其规模,意思是团队规模很小,两个披萨足以喂饱,通常有 5-10 人。这些团队对他们的应用程序拥有完全的所有权和自主权,能够解决现代应用程序开发的常见问题并且具备交付所需的所有技能,最大限度地减少了交接、跨团队沟通和依赖关系。

例如,Cox Automotive 通过在整个企业中实施规模化敏捷框架 (SAFe)全面采用 AWS 并发展为“你构建,你运行”的环境,实现其人员、流程和技术的转型。Cox Automotive 组建了多个使用 Scrum、Kanban 或其他敏捷方法的小型团队,这些团队通常为 8-10 人,可促进所有权和自主权,这与亚马逊的两个披萨团队非常相似。通过实施协调的交付、运营和技术战略,Cox Automotive 得以基于高水平的 SAFe 创建产品、工程、架构和业务负责人团队来统一 IT 与业务流程,从而实现了更加透明、更具协作性的环境。该模型提供了优先级的连通性,让团队在设法解决客户问题的过程中可以了解相关情况。 

问:如何重新培训我的团队?

许多公司根据个人和组织不断变化的成熟度来构建持续教育计划。初次采用云时,我们建议您进行基础培训,重点关注您的安全着陆区、成本管理以及云服务和无服务器等概念,了解现代应用程序开发的常见问题。从那时开始,您应该利用 Well Architected Reviews 来推进整个组织的学习和架构发展。一旦建立了云基础,您就可以着手解决软件开发生命周期、自动化等无服务器服务应用程序开发常见问题,朝着采用 DevSecOps 理念的敏捷方法迈进。培训内容会根据您的出发点而有所不同。

问:要从过渡架构和组织化结构转变为更具战略性的地位,必须具备哪些基本要素?

在战略地位上执行之前,我们倾向于看到组织专注于领导者的参与、支持和变革。转型失败或成功是领导行为和支持的直接结果。在着手进行更具战略意义的变革性工作之前,许多组织开始涉足云、敏捷开发和开发运营实践。培训是采用新技术或新实践的一个关键方面,但最终,改变行为方式以及从入口转为使用保护工具将提高业务敏捷性。以现在的高速公路为例。公路上有标记的车道、入口匝道和出口匝道、超车道和限速。无论白天或黑夜,汽车都可以自由进出,最终行驶的速度比您想象的要快得多。这就是我们要为团队创造的环境。在这里,有既定的规则,并以一种可实现速度和灵活性的方式一致地执行这些规则。牢牢把握实现这一目标所需的活动和信念是领导者的关键起点。

问:在我们有意义地采用微服务架构之前,必须如何进行文化转变?

理想情况下,组织应该从改变组织结构和交付方法开始,采用对产品或服务具有自主权和所有权的小团队模型。虽然您可以采用微服务而不改变您的文化或组织结构,但获得服务采用者并防止重复数据删除可能会很棘手。如果没有一个连贯的战略或交付模式,结果会有所不同。尚且没有正确的方法来应对变革,但肯定有许多错误的方法。首先关注您要实现哪些目标。您要解决的问题是什么?如何知道您是否成功地解决了问题? 从小规模开始,并不断迭代。

软件交付

问:如何开始为我的团队介绍 CI/CD?

随着现代化进程的推进,使用持续集成 (CI) 和持续部署 (CD) 工具有助于将快速变革带来的风险降到最低。事实上,大多数组织都从持续集成开始,并且在部署前几个应用程序时,可能仍会手动部署到生产环境中,最后进行人工检查以控制发布过程。如果您有少量相互通信的服务,或者向需要专门通信的现有应用程序进行复杂集成,您应该开始考虑 CI。随着实践的成熟和自动化程度的提高,组织通常会对发布更加自信,对自动化安全检查也更加满意。通常,这时可以转换到 CI/CD 并删除手动步骤。

问:加快价值交付的关键是什么?

提高速度的最简单方法是减少工作量。如果组织在选择要做什么工作、不懈学习和修改优先次序方面训练有素,并将他们的时间、精力和金钱集中在最有价值的活动上,那么他们将在加快价值交付上表现出色。有几种工具、方法和技术可以帮助您从创建持续交付管道开始,实现基础设施、安全性、部署、测试和回滚自动化。这有助于提高部署的一致性,减少平均修复时间和变革故障率,同时提高部署频率。在云中,您可以减少运营和维护工作,同时选择适合的作业工具。这有助于您专注于创造价值,同时避免出现格格不入的情况。您可以选择完全托管的服务和无服务器产品,例如 AWS LambdaAWS FargateAmazon DynamoDB,以减少运营和维护。通过专注于正确的作业工具并最大程度地减少无差别工作,您可以将更多的时间放在构建解决方案上,从而为您的企业和客户带来价值。此外,通过简化您的解决方案,可以降低变革的成本,提高转变和/或迭代的速度。

运作模式

问:如何确定何时使用 Lambda 和/或容器?

越来越多的客户选择使用 AWS Lambda 和容器来构建具有最大敏捷性的现代应用程序。您的选择很大程度上取决于工作负载的复杂程度、典型的任务运行时及其调用模式。容器是打包代码的最流行选择,也是实现旧版应用程序现代化的有效工具,因为容器在应用程序设置方面具有出色的可移植性和灵活性。使用 Lambda,您将实现最大限度的精简性。您需要编写的唯一代码是业务逻辑。

容器提供了一种将代码、配置和依赖关系打包到单个对象中的标准方法,因此您可以在任何地方运行它,还可以快速扩展并精确地设置 CPU 和内存使用率。实际上,大多数容器工作负载都在 AWS 上运行。要运行容器,您需要计算服务,比如 Amazon EC2 或 AWS Fargate。Fargate 让您能够以无服务器方式运行容器。您还需要编排服务,例如 Amazon ECS 或 Amazon EKS。

Lambda 运行代码以响应事件或触发器,例如添加到 S3 的新文件或 DynamoDB 中的新表条目,或直接通过调用其 API。Lambda 有 115 个事件触发器,比市场上其他任何服务都多。客户只需上传代码,Lambda 便会处理运行和扩展高可用性代码所需的一切工作。他们只需为实际使用的计算时间付费 – 代码未运行时不产生任何费用。客户几乎可以为任何类型的应用程序或后端服务运行代码,而且完全无需预置或管理服务器。

问:我应该选择哪种容器编排服务?

这取决于您当前的专业技能以及对操作简便性或对应用程序设置的控制的偏好。为了最大程度地减少操作,我们建议使用 AWS Fargate,因为它是唯一一款让您无需管理服务器即可运行容器的计算引擎。使用 Fargate,您可以构建容器映像、定义其运行方式和运行位置,并为资源支付费用。这就不再需要您选择正确的实例类型、保护、修补和升级实例或扩展集群。

如果您熟悉 AWS 构造并且打算将 AWS 工具和服务主要用作容器基础设施的一部分,那么 Amazon ECS 是运行容器的最佳场所。由于我们是从头开始构建 ECS 的,并且可以完全控制其路线图,因此我们能够快速与多种 AWS 服务进行原生集成,例如 IAM、CloudWatch、Autoscaling、Secrets Manager 和负载均衡器,同时为您提供熟悉的容器部署和扩展体验。

如果您想运行 Kubernetes,那么我们建议使用 Amazon EKS,这是在云中运行 Kubernetes 的最可靠方法。EKS 之所以可靠,是因为它跨多个 AWS 可用区运行,因此具有内置的冗余性和弹性。我们还确保我们的 EKS 客户拥有最新的安全补丁程序,这意味着我们将使用最新版本的修复补丁,并将其应用到不受支持的版本中,以防止 EKS 应用程序出现可靠性和可用性问题。

问:在什么情况下应当选择无服务器技术而不是自己管理?

除非管理基础设施和运营是贵公司的核心能力,否则我们建议将这些工作转移出去,专注于创新,从而使您的客户受益。我们的许多客户都采用了无服务器优先的方法,除非有令人信服的理由不这样做,不然为什么不使用无服务器技术呢。无服务器技术使您的开发人员可以专注于业务逻辑,从而消除了管理基础设施的复杂性。如果您对构成应用程序的功能有充分的了解,则无服务器允许您将其分解为单独的组件,并使开发人员可以专注于交付成果。

问:使用无服务器技术会影响我的多云战略吗?

选择无服务器技术的决策是选择云提供商的总体决策的一部分,并且不会对多云战略产生增量影响。在公司制定云战略计划时,他们通常会以为自己将要在两三个提供商之间相对平均地分配他们在云中的工作负载。但是,当他们实际进行评估时,最后很少有人选择这种方法。大多数情况下,选择一个提供商有以下几个原因。首先,在多个云上运行很困难,因为这将迫使开发团队能够熟练地使用多个云平台。它还迫使团队在最简共同平台上进行标准化,而不是利用特定提供商的更广泛功能。最后,它会在云提供商之间分散工作负载,却降低了您的购买力和获得批量折扣的能力。因此,绝大多数客户普遍选择单一基础设施或云提供商。

安全性

问:现代应用程序如何提高安全性?

现代应用程序设计的一个关键组成部分是“尽早并经常”将安全性纳入开发过程。在构思时,要考虑设计、开发、测试和发布、安全性、风险以及合规性因素。关键安全控制的自动化,以及 CI/CD 管道中的安全触发器,不仅考虑开发过程中的安全性,而且不再需要手动干预(测试与修复)。

问:安全实践和选项如何随着云和现代应用程序而改变?

在现代应用程序中,安全性现在是代码,就像基础设施是代码一样。对于许多组织来说,自动包括安全控制和监控基础设施的能力是改变竞争格局的一项重要因素。这样就可以设计和构建可自我修复的基础设施。此外,随着无服务器技术的使用,应用程序的攻击面大大减小,因为任何容易受到攻击的代码仅在需要时运行。

例如,Verizon 当时正在将另外 1000 个关键业务应用程序和数据库迁移到 AWS,并需要一种能够扩展其安全验证流程的方法。他们需要将云资源的直接访问权交给成千上万的开发人员,而不仅仅是基础设施团队。Verizon 还知道,他们需要解放开发人员,让他们将更多的时间用于为客户提供新价值,而不是等待硬件和安全检查。于是,他们开发了一个自动化的安全验证流程,使团队可以根据自己的日程开发新的应用程序。在第一阶段,该流程在使用基本配置规则进行部署、加密检查、日志记录、访问权限配置之前,先对其进行分析。在第二阶段,它将经过验证的模板部署到测试环境中进行实时验证,并使用 AWS 原生配置服务审核已部署的系统配置。最后,在第三阶段,运行第三方漏洞评估,检查是否缺少操作系统补丁或存在其他漏洞。完成后,对结果进行数字签名,并进行自动化部署管道检查以确定该应用程序是否已获准用于生产,并仅部署已通过此验证流程的应用程序。

Verizon 的自动化安全验证流程就是一个例子,说明了客户如何通过在团队内部建立自主权来使用自动化和 AWS 云提高业务敏捷性,从而使他们能够安全快速地迁移。 

问:在无服务器环境中,我实际上要保护什么? 我的工具和流程会改变吗?

您的关注点有两个:1 — 根据最佳实践(例如 OWASP 前 10)保护已开发/正在运行的应用程序代码;2 — 保护您控制的基础设施,并与专注于身份、检测性控制、基础设施安全性、数据防护和事件响应的云最佳实践保持一致。

问:如何在这个新世界中实施我现有的安全策略?

许多公司专注于其安全成果或控制目标,并确保这些目标得到实现,而不是将安全性等同于特定的产品或服务,最终取得了成功。这通常涉及重写安全性政策,使其更广泛和更侧重于安全性和合规性目标。在运行手册中,详细了解该平台的控制如何达到或超过相关策略中所述的安全性目标。

数据管理

问:如何评估哪个数据库最适合使用?

客户告诉我们,他们希望构建可扩展、高性能的功能性应用程序,以满足特定的性能和业务需求。在为应用程序选择数据库时,客户应考虑这些要求以及数据模型和数据访问模式。
为了满足这些多样化的客户需求,我们提供了一系列专用数据库服务:

Amazon RDS,用于完全托管的关系数据库;Amazon Aurora,用于商业级关系数据库;还有不断改进的功能集,如 Amazon Aurora Serverless
Amazon DynamoDB,一个键/值和文档数据库,可以在任何规模的环境中提供个位数的毫秒级性能
Amazon Neptune,用于图形数据库
Amazon DocumentDB,一个完全托管的文档数据库,支持 MongoDB 工作负载
Amazon Timestream,用于物联网 (IoT) 和运营应用程序的时间序列数据库服务
Amazon Quantum Ledger Database (QLDB),一个专用的分类账数据库
Amazon Aurora Global Database,跨多个 AWS 区域,同时以通常少于一秒的延迟复制写入。

问:我有一个旧数据库和一项长期许可协议。如何开始迁移到更现代化的数据库?

Database Freedom 是一个独特的程序,旨在帮助符合条件的客户从传统数据库引擎迁移到 AWS 上的原生云引擎。Database Freedom 支持迁移到 Amazon Aurora(一个专为云构建且兼容 MySQL 和 PostgreSQL 的关系数据库)、Amazon RDS for PostgreSQL、Amazon RDS for MySQL 和 Amazon RDS for MariaDB、Amazon RedshiftAmazon DynamoDBAmazon EMRAmazon KinesisAmazon NeptuneAmazon QLDBAmazon TimestreamAmazon DocumentDB。此外,AWS Schema Conversion ToolAWS Database Migration Service 也可以帮助客户将其数据库快速安全地迁移到这些服务。
我们为符合条件的客户提供有关应用程序架构、迁移策略、程序管理和针对其技术前景和迁移目标而定制的员工培训的建议。我们还支持概念验证,以证明迁移的可行性。

我们还通过我们的 AWS 专业服务团队和我们的数据库自由合作伙伴网络,协助符合条件的客户迁移到 AWS。这些团队和组织专门研究各种数据库技术,通过将数千个数据库、应用程序和数据仓库成功迁移到 AWS 获得了丰富的经验。我们还向符合条件的客户提供服务抵扣金额,尽量减少迁移对财务的影响。

我们已经帮助 3M、Verizon、Capital One、Intuit、Ryanair 和 Amazon.com 等客户实现了数据库自由。

了解有关 Database Freedom 的更多信息,单击此处与我们联系。

准备好开始使用了吗?
尝试使用“构建现代应用程序”教程
还有更多问题?
联系我们