过去十年,应用的构建方式不断改变。随着应用的功能愈加丰富,并对企业运维方式带来显著影响(在许多情况下,应用就是业务本身)。一种新型架构应运而生,提供了更高的可扩展性、可移植性、弹性和敏捷性。
为了支持现代应用的目标,相关基础设施也必须随之演进。Kubernetes 等平台在释放现代应用的潜力方面发挥了重要作用,其本身就是一种新的基础设施管理和服务范式。
之前围绕单体应用而建立的技能现已无法满足需求,为了帮助社区成员与时俱进,我们通过本文让大家粗略了解有关现代应用的核心概念。
有人可能根据名称想当然地认为,“现代应用”就是最新应用。但实际上,现代应用是相对于单体应用而言。单体应用由单个或区区几个部分组成,不仅部署方式僵化,而且依赖关系较弱。
相比之下,现代应用包含一系列微服务。单体应用可能会将所有功能内置到一个全面服务中,而微服务则会将服务分解成多个可单独运行的较小功能。
现代应用具有 4 个主要特征。
现代应用遵循 6 项设计原则。
容器已成为微服务的关键构建模块,可通过将启动应用所需的一切整齐有序地打包在 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 间通信才能围绕它们设计应用服务,如负载均衡、路由选择、可视性和安全性。
由于现代应用的流量模式不断发展,而且与单体应用大不相同,因此需要采用不同的方法来保持应用的稳定性。
随着现代应用日益扩展,其通信方式转变为微服务间通信,service mesh(服务网格)被用于提供流量的控制、保护和观测能力。鉴于各个微服务可能由不同的个人或小组编写,因此 service mesh 可以充当中介,以便支持不同微服务之间通信。同时,微服务之间可以执行信任和验证流程,以确保通信对象没问题。
而 sidecar 代理对 mesh 实现至关重要,不仅负责 TLS 卸载、双向 TLS 及身份验证等功能,而且还可用于链路追踪及其他可观测性任务。这意味着这些功能不必由微服务本身执行。
虽然现代应用会尽可能地采用开源解决方案,但其中一些应用可能是需要最高级别服务的关键任务应用。Kubernetes 集群中有许多重要部分可以通过增强型服务进行增强或替换。
实际上,NGINX 可作为增强型 Ingress controller(Ingress 控制器),为集群的入站流量提供高级控制和性能。NGINX App Protect 还能为应用的入站 Web 组件提供更精细控制的 Web 应用安全防护。最后,NGINX Service Mesh 能够帮助实现微服务间的控制、安全防护和可视性,从微服务身上卸载这些功能。
希望本文可以帮助大家简单了解现代应用架构。如需更多相关信息,欢迎访问 nginx-cn.net/blog,或微信添加小N助手(微信号:nginxoss)加入官方微信群,与社区用户交流探讨。
NGINX Kubernetes 互联套件可以帮助您扩展、观测、治理并且防护您的 Kubernetes 应用,从边缘到云端。我们有一整套集成好的工具,可以帮助您减少复杂性、延长正常工作时间并且拥有更好的实时可视性,从而助您提升客户体验。
点击文末“阅读原文” 即可申请免费试用 NGINX Kubernetes 互联套件,或在本文下方留言与我们讨论您的用例。