全新开源现代应用参考架构

NGINX | 2021年8月24日

在NGINX,我们在过去几年中一直强调,需要让应用真正实现现代化并具备自适应能力,即可移植、云原生、有韧性、可扩展且易于更新。最近,有两个有助于构建和交付现代应用的概念日益受到关注。第一个是平台运维,即由企业级平台团队统一管理、维护、连接并保护开发和DevOps团队工作所需的所有工具。第二个是左移,即在开发生命周期的早期阶段,将生产级安全、网络和监控功能集成到应用中。开发人员需要承担更多过去由ITOps负责的职能,但同时也能以更多选择和更高自主性决定具体如何实现这些职能。

这些理念听起来不错,但在实际实施中,推行Platform Ops以及将基础设施和运维工具“左移”并非易事。首先,越来越多的应用采用高度分布式方式部署在容器化环境中,并使用数量不断增加的Kubernetes编排引擎之一。企业还希望在多个环境中部署应用,同时避免受困于不同云之间以及云环境与本地环境之间的差异。

现代应用的“黄金镜像”

客户和社区不断向我们寻求帮助,以应对他们面临的挑战,这也是理所当然的。他们希望获得所有这些优势,但要将安全、网络、可观测性和性能监控、扩展等各个部分整合起来,需要投入大量精力。要让由此构建的平台足够稳健,能够用于生产环境,还需要付出更多努力。他们不禁要问:“为什么没有一种可从单个代码仓库启动的现代应用‘黄金镜像’?”

这是一个好问题,我们也将其视为自身的挑战,努力给出令人满意的答案。首先,我们用更具体的方式重新表述了这个问题。我们认为,客户和社区真正想问的是:“能否帮助我们将不同的软件产品整合成一个更协调的整体,调优技术栈以确定合适的配置和设置,从而省去相关工作和麻烦?能否让应用更轻松地在不同云环境中运行,而不必因底层服务和功能的差异对配置进行重大更改?”

我们认为,真正解决这些问题的方案将惠及整个社区,而不仅仅是我们在数百家企业和各大云服务提供商中的合作伙伴。这将真正实现多方共赢。理想情况下,该方案不应只是一个“玩具”,而应是可靠、经过测试,并可随时部署到Kubernetes环境中实际生产应用的代码。坦率地说,我们希望任何人都能直接从GitHub上拿走我们的成果并加以利用。

长话短说,今天,我们在NGINX Sprint 2.0上宣布推出我们的解决方案:Modern Apps Reference Architecture(MARA)的首个版本。这是一种面向现代应用的开源架构和部署模型。我们希望大家喜欢它、使用它、直接拿来用,更希望大家通过修改或创建分支来改进或定制它。本文将介绍我们构建的内容及其工作原理。

NGINX现代应用参考架构

定义现代自适应应用

首先,我们来定义理想的现代自适应应用。它可能由微服务组成,采用容器化部署,并遵循云原生设计原则(松耦合、易于扩展、不依赖特定基础设施),但这些并非必要条件。现代应用的理念之一,是通过专门的架构设计来充分利用基础设施抽象。这一定义简单明了,却十分重要,因为它为所有参考架构确立了基本模板。

现代应用架构的关键支柱包括可移植性、可扩展性、韧性和敏捷性。

  • 可移植性:可轻松将应用部署到多种类型的设备和基础设施,包括公有云和本地环境。
  • 可扩展性,无论身处世界何地,应用都可以快速、无缝地扩缩容,以应对需求激增或下降。
  • 韧性:应用可以平稳故障转移到不同可用区、云或数据中心中新启动的集群或虚拟环境。
  • 敏捷性:应用可通过自动化CI/CD流水线快速更新;在现代应用领域,这也意味着代码迭代速度更快,代码推送更频繁。

设计参考架构

我们希望创建一个平台,满足现代应用定义和部署模式的基本要求。除了实现技术目标,我们还希望展示现代应用设计原则,并鼓励社区在Kubernetes上进行部署。此外,我们希望提供可供开发人员、DevOps和平台运维团队直接借鉴、试用、修改和改进的代码。简而言之,我们希望提供:

  • 一种易于部署、可用于生产环境的Kubernetes架构,而非仅供演示的玩具
  • 一个展示合作伙伴产品如何在Kubernetes上运行的平台
  • 一键轻松构建和部署Kubernetes Ingress控制器
  • 用于未来产品及合作伙伴集成的测试环境
  • 可插拔的部署框架
  • 单一开源代码仓库,简化发现和采用流程

以下是我们为平台第1版确定的设计和合作伙伴策略(有关下一版本的规划,请参阅“第2版:更多集成,更高灵活性”)。我们坚信,让参考应用广泛接纳合作伙伴,是促进合作伙伴和社区共同参与的关键。

代码部署方式

要安装和部署示例应用程序,只需运行一条命令来调用启动脚本,随后系统会按所示顺序执行以下Pulumi项目。每个项目名称都对应于相对于存储库根目录的一个目录名称。有关详细信息,请参阅README。

vpc - Defines and installs VPC and subnets to use with EKS  └─eks - Deploys EKS
    └─ecr - Configures ECR for use in EKS cluster
      └─kic-image-build - Builds new NGINX Ingress Controller image
        └─kic-image-push - Pushes image built in previous step to ECR
          └─kic-helm-chart - Deploys NGINX Ingress Controller to EKS 
                             cluster
            └─logstore - Deploys Elastic log store to EKS cluster
              └─logagent - Deploys Elastic (filebeat) logging agent to 
                           EKS cluster
               └─certmgr - Deploys cert-manager.io Helm chart to EKS 
                           cluster
                 └─anthos - Deploys Bank of Anthos application to EKS 
                            cluster

版本 2:集成更丰富,灵活性更高

我们认识到,初期成果可能无法提供Kubernetes环境所需的全部集成。平台运维强调明智选择,但并非无限选择。为了便于平台运维、DevOps和开发团队试用并考虑采用我们的新参考平台,我们计划在近期进行多项改进,包括:

我们希望,这项工作能够成为其他参考平台的框架,并为构建各类差异化现代应用提供一个可供借鉴的起点。Kubernetes不仅是构建现代应用的强大机制,也有助于增强平台运维能力并推动安全左移文化,因此,我们的参考架构越具扩展性和可插拔性,就越能发挥价值。我们期待了解社区对这项工作的看法,更期待看到大家以此构建出怎样的成果。

开始使用参考架构

下载我们的参考平台,亲自体验一下。欢迎告诉我们您的想法,以及希望我们接下来构建哪些内容。我们非常欢迎拉取请求。我们期待与您携手打造新一代现代、灵活且可供借鉴的应用,为社区和所有开发者持续创造价值。

相关文章

本文是系列文章的一部分。随着我们不断为MARA添加新功能,我们会在博客中发布详细信息:


分享

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。