

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 现代应用程序开发
<a name="modern-apps"></a>

**构建架构完善的云原生应用程序。**

[现代应用程序](https://aws.amazon.com/modern-apps/)开发实践对于组织构建架构完善的云原生应用程序并保持竞争力至关重要*。*企业可以使用云原生技术（例如[容器和](https://aws.amazon.com/containers/)[无服务器](https://aws.amazon.com/serverless/)计算）来创建可扩展的敏捷应用程序，以适应不断变化的市场需求。这些技术使组织能够优化资源利用率、降低成本并提高其应用程序的性能。

在设计现代应用程序时，开发用于运营和开发的敏捷解决方案。现代应用程序会自动对客户需求的变化做出反应，并且能够抵御故障。工程师可以快速开发和部署更改并监控应用程序性能。现代应用程序旨在实现自我修复，且能够在需要时扩展到大型或小型流量水平，包括在零流量时实现零成本。

构建架构完善的云原生应用程序需要对底层技术及其最佳实践有深入的了解。组织应采用微服务架构，并将应用程序设计成模块化和松耦合，从而实现独立部署和可扩展性。此方法使组织能够将其应用程序分解为更小、更易于管理的组件，这些组件可以快速、独立地开发、测试和部署。

## 启动
<a name="modern-apps-start"></a>

### 探索现代方法
<a name="modern-apps-approaches"></a>

首先研究容器、无服务器技术和其他支持[微服务](https://aws.amazon.com/microservices/)开发的方法，这些方法可以提高资源效率、帮助提高安全性并最大限度地减少基础设施开支。选择对现有的差异化应用程序和企业应用程序进行[现代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-modernizing-applications/welcome.html)改造，以提高效率并最大限度地提高现有投资的价值。根据以价值为导向的决策，考虑[更换平台](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-replatforming-cots-applications/welcome.html)（将自管理容器、数据库或消息代理过渡到托管云服务）和[重构](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/welcome.html)（重新开发应用程序以采用云原生架构）。 

当您更新现有的基于云的应用程序时，成功的方法是使用 [strangler fig 模式](https://aws.amazon.com/blogs/architecture/seamlessly-migrate-on-premises-legacy-workloads-using-a-strangler-pattern/)将您的架构逐渐分解为微服务。该程序有助于采用当代应用方法，因此您可以意识到其固有的好处，并向更大的组织展示其价值。考虑将您的应用程序构建为不同的微服务，在适用的情况下利用[事件驱动型架构](https://aws.amazon.com/event-driven-architecture/)。确保您的架构考虑到不可更改的[服务配额](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/manage-service-quotas-and-constraints.html)和物理资源，以免影响工作负载性能或可靠性。 

### 采用云原生计算功能
<a name="modern-apps-compute"></a>

云原生计算能力是现代应用程序开发的关键。此方法要求组织考虑他们希望如何托管计算单元，并为每个使用案例或服务确定最佳选项。例如，[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 提供了一种用于运行应用程序代码的无服务器机制，并在事件驱动型架构中起着关键作用。Lambda 函数按需启动，且可并行运行，直至达到定义的最大并发数，因此它们可以扩展以执行各种任务。   

### 使用容器化
<a name="modern-apps-containers"></a>

在现代软件开发中，管理应用程序及其依赖关系已成为一项越来越复杂的任务，尤其是当您考虑到需要在各种环境中保持一致性时。为了应对这些挑战，诸如 Docker 之类的容器化技术已成为打包应用程序及其依赖关系的有效解决方案。无论应用程序的运行时环境如何，容器都能确保部署的一致性和可重复性，因此本地环境中的开发与云环境中的生产开发相同。此方法可以减少因环境或其配置不匹配可能导致的错误。 

### 使用现代数据库
<a name="modern-apps-dbs"></a>

当您使用现代数据库时，应用程序内的每项微服务都可以使用符合其要求的正确专用数据库，从而提高敏捷性和性能，同时降低成本。例如，一个微服务可能使用 NoSQL 数据库在存储会话数据时实现高吞吐量，另一个微服务可能使用关系数据库来进行复杂的表联接，而另一个微服务可能使用量子分类账数据库来跟踪区块链的变化。 

现代数据库提供了可扩展性和灵活性。与传统数据库相比，它们还有助于提供更好的安全性、合规性和可靠性。它们使组织能够更有效地存储和管理数据，并确保应用程序能够在正确的时间访问正确的数据，从而带来更好的性能和用户体验。 

迁移到现代数据库是现代应用程序开发的关键组成部分。通过使用正确的数据存储解决方案，组织可以优化数据管理能力，并提供更高效、更可靠的应用程序。通过使每项微服务独立并为每项微服务选择正确的技术，组织可以进一步优化数据能力，从而在最大限度地降低成本的同时实现最高的效率和可扩展性。 

## 推进
<a name="modern-apps-advance"></a>

### 优化您的现代架构
<a name="modern-apps-arch"></a>

为了进一步优化，请改进无服务器技术的实现，并开发可独立扩展和部署的架构，利用 AWS 服务（例如 [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 和 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)）来实现。通过使用 [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) 和 [AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/latest/dg/what-is-cloud-map.html) 实现服务发现，以确保组件之间的无缝通信。

采用 API 版本控制、缓存和速率限制，以保持不同应用程序版本的兼容性和性能。使用 [AWS Identity and Access Management（IAM）](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 和资源策略增强安全性。这有助于确保您的基础设施受到保护，并且仅向授权实体授予访问权限。

如果可能，请在无需管理底层基础设施的情况下使用无服务器服务来运行容器。这使您能够专注于开发核心应用程序，并实现更好的资源管理和性能。还可以帮助您充分利用可扩展性、灵活性和成本效率的优势。

通过深入研究无服务器架构的复杂性并整合这些高级实践，组织可以发现改进和微调的机会，并最终最大限度地发挥云原生应用程序的潜力。这种追求有助于采用更复杂的应用程序模式，从而进一步提升整体用户体验。还使组织能够在软件开发过程中变得更加敏捷和高效。

### 使用服务网格技术
<a name="modern-apps-mesh"></a>

随着组织越来越多地采用微服务架构来构建和部署应用程序，管理这些服务之间的复杂性、安全性和通信变得至关重要。Istio、Linkerd 或 Consul 等服务网格技术在帮助增强微服务的安全性、可观测性和可靠性方面发挥着关键作用。

### 确保可见性和可追溯性
<a name="modern-apps-visibility"></a>

现代实践在开发过程中提供了更高的可见性和可追溯性，并使遵守行业标准和最佳实践变得更加容易。可见性和监控对于现代应用程序开发至关重要。实施监控和日志记录解决方案以提供有关应用程序性能的宝贵洞察，使组织能够确定需要改进的领域并优化应用程序。我们建议您与平台工程团队合作，确保有工具可用来提供端到端可见性，并监控应用程序错误、性能和合规性，以便您可以快速检测、诊断和解决问题。 

## Excel
<a name="modern-apps-excel"></a>

### 拥抱微服务
<a name="modern-apps-microservices"></a>

对于许多组织来说，现代应用程序开发是业务成功的代名词。微服务是此转型的核心，组织可以从采用这些强大的架构模式中受益。

微服务提供了高度可扩展、韧性强且敏捷的应用程序架构。通过将应用程序分解为可独立部署的小型服务，组织可以选择在不影响应用程序其他部分的情况下快速迭代特定组件。高级韧性模式（例如*断路器*和*隔板*）在确保这些应用程序的高可用性方面起着至关重要的作用。

[断路器](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/circuit-breaker.html)充当一种安全机制，它通过暂时停止或转移来自运行状况不佳的通信来防止级联故障，从而使其能够恢复。[隔板](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)隔离资源并限制潜在故障的影响范围。这些模式共同构成了一个稳健的架构，可以承受不可预见的中断并保持最佳性能。

实施微服务的另一个关键方面是域驱动设计（DDD）原则的采用。DDD 专注于建立对业务领域的共同理解，并将其转化为结构良好的软件设计。此方法可以构建更具凝聚力和可维护性的微服务，并确保应用程序能够随着组织的需求而不断发展。

在基于微服务的应用程序中，优化服务间通信也至关重要。通过实施 gRPC 或 GraphQL 等高级协议，组织可以显著提高服务之间的通信效率。这些协议提供了类型安全、低延迟和灵活性等功能，有助于提高应用程序的整体性能和可维护性。

采用微服务的组织提供了一个促进创新、敏捷性和协作的环境。开发团队通常围绕业务能力组织，且非常注重持续集成和持续交付（CI/CD）实践。他们有权做出决策、进行实验和快速迭代，且秉持责任共担和问责的文化。