Understanding Modern Application Architecture

NGINX-Part-of-F5-horiz-black-type-RGB
Buu Lam 缩略图
Buu Lam
Published December 16, 2023

过去十年,应用的构建方式不断改变。随着应用的功能愈加丰富,并对企业运维方式带来显著影响(在许多情况下,应用就是业务本身)。一种新型架构应运而生,提供了更高的可扩展性、可移植性、弹性和敏捷性。

为了支持现代应用的目标,相关基础设施也必须随之演进。Kubernetes 等平台在释放现代应用的潜力方面发挥了重要作用,其本身就是一种新的基础设施管理和服务范式。

之前围绕单体应用而建立的技能现已无法满足需求,为了帮助社区成员与时俱进,我们通过本文让大家粗略了解有关现代应用的核心概念。

什么是“现代应用”?

有人可能根据名称想当然地认为,“现代应用”就是最新应用。但实际上,现代应用是相对于单体应用而言。单体应用由单个或区区几个部分组成,不仅部署方式僵化,而且依赖关系较弱。

相比之下,现代应用包含一系列微服务。单体应用可能会将所有功能内置到一个全面服务中,而微服务则会将服务分解成多个可单独运行的较小功能。

 现代应用具有 4 个主要特征。

  • 可扩展性确保应用能够满足不断扩大的用户群的需求,无论是突发需求还是长期增长的需求。
  • 可移植性确保应用可从它的底层环境中移植,同时仍能保持其所有功能和管理平面功能。
  • 弹性确保系统内的故障无伤大体,或者将对应用用户造成的干扰降到最小。
  • 敏捷性确保应用能够轻松适应代码或基础设施的快速变化。

现代应用遵循 6 项设计原则。

  • 中立性支持应用在任何平台上自由运行。
  • 合理利用开源软件通常有助于您快速开发应用,并在需要全面支持时采用该软件的商业版本。
  • 代码定义能够提高配置的统一性,摆脱需要专业知识的僵化接口。
  • 自动化 CI/CD 流程可确保快速集成和部署代码,从而在不断改进的同时,最大限度地减少和避免故障。
  • 安全开发确保将应用安全防护集成到开发流程中,并在将代码部署到生产环境之前对其进行全面测试。
  • 分布式存储和基础设施可确保应用不受任何物理限制,并能够让组件适得其所。

构成现代应用的平台和组件

容器已成为微服务的关键构建模块,可通过将启动应用所需的一切整齐有序地打包在 Docker 等容器运行时中,帮助实现应用的可移植性。

虽然 Docker 等容器运行时可在服务器上单独运行,但 Kubernetes 项目实现了这一概念的可扩展性。容器运行所在的 worker 节点能够加入集群中。命令可以通过 YAML 文件下达给主节点,并作用于整个集群。容器可在一体化管理的集群中进行高效调度。

Kubernetes API 是 K8s 集群的主接口。虽然有一些图形用户界面解决方案可添加到 K8s 集群上,但它们在背后仍与 API 对接,因此了解 API 的功能及其对集群的作用非常重要。向 API 发布命令的主要方式是通过 YAML 文件和 kubectl 命令。然后,API 服务器将与集群的其他部分进行交互,以执行操作。

Ingres controller 是将流量从集群外部引入 pod 的主要方式之一。F5 客户对该功能特别感兴趣,因为他们可以使用 NGINX、NGINX Plus 或 BIG-IP 在 Kubernetes 集群中实现这一重要功能。

随着应用从单体应用转向现代应用,它们被分解为执行应用各个功能的微服务。这些微服务相互通信,构成一个整体应用。您必须了解这种 service 到 service 间通信才能围绕它们设计应用服务,如负载均衡、路由选择、可视性和安全性。

Kubernetes 平台的管理支持组件

由于现代应用的流量模式不断发展,而且与单体应用大不相同,因此需要采用不同的方法来保持应用的稳定性。

随着现代应用日益扩展,其通信方式转变为微服务间通信,service mesh(服务网格)被用于提供流量的控制、保护和观测能力。鉴于各个微服务可能由不同的个人或小组编写,因此 service mesh 可以充当中介,以便支持不同微服务之间通信。同时,微服务之间可以执行信任和验证流程,以确保通信对象没问题。

sidecar 代理对 mesh 实现至关重要,不仅负责 TLS 卸载、双向 TLS 及身份验证等功能,而且还可用于链路追踪及其他可观测性任务。这意味着这些功能不必由微服务本身执行。

虽然现代应用会尽可能地采用开源解决方案,但其中一些应用可能是需要最高级别服务的关键任务应用。Kubernetes 集群中有许多重要部分可以通过增强型服务进行增强或替换。

实际上,NGINX 可作为增强型 Ingress controller(Ingress 控制器),为集群的入站流量提供高级控制和性能。NGINX App Protect 还能为应用的入站 Web 组件提供更精细控制的 Web 应用安全防护。最后,NGINX Service Mesh 能够帮助实现微服务间的控制、安全防护和可视性,从微服务身上卸载这些功能。

NGINX 助力您的现代应用之旅

希望本文可以帮助大家简单了解现代应用架构。如需更多相关信息,欢迎访问 nginx-cn.net/blog,或微信添加小N助手(微信号:nginxoss)加入官方微信群,与社区用户交流探讨。

NGINX Kubernetes 互联套件可以帮助您扩展、观测、治理并且防护您的 Kubernetes 应用,从边缘到云端。我们有一整套集成好的工具,可以帮助您减少复杂性、延长正常工作时间并且拥有更好的实时可视性,从而助您提升客户体验。

点击文末“阅读原文” 即可申请免费试用 NGINX Kubernetes 互联套件,或在本文下方留言与我们讨论您的用例。