浏览 3.4k
原文作者:熊平
原文链接:分享实录|MARA——现代应用参考架构
转载来源:NGINX 开源社区
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
编者按——本文为 NGINX Sprint China 2022 年度线上大会的分享实录,点击这里免费观看大会完整视频回放。本次分享中,我们将讨论有关 NGINX 现代应用参考架构的内容。
分享之前,先抛出一个问题,在现代应用架构中,我们通常会用到哪些的组件?可以是在外面学习来的知识,也可以是在企业里面的实践。比如 包含各种各样分支的 K8S,可能是 Rancher、 Kubesphere 、K3S 等组件。
如果大家从细分的角度去看,一方面是应用程序,要用 DDD 的模型把它拆成微服务化等各种方式。从下面往上看,有基础设施,比如 K8S 测试,需要管理平面,比如 IaC 如何把架构也代码化,让它能够很高效、很标准的执行,还有可观测性、CI/CD 等等提供自动化,构成元素非常多,支撑一个现代应用很复杂。由此,产生 MARA 架构。
正是因为这样的复杂度、企业数字化转型的要求,业务驱动现代化演进,所以对任何企业来讲都是非常大的挑战,因此,NGINX 发起了这样一个项目。该项目开源,所有的源代码都放在 GitHub 上面,在国内有 fork 一个镜像在 Gitee 上面,大家可以去下载、尝试。
我们希望提供一个完整的应用参考架构,可以很容易地利用并部署一个示范样板,非常灵活,不需要花半年的时间研究。当然还有一种思路,就是招一个很大的团队来支撑,但是很多企业并没有这么多资源,所以市场实际非常需要这样的工具,给自己的技术架构提供一个起点,这也是这个项目的由来。
接下来会花 15 分钟左右去介绍现代应用参考架构 MARA,有了脚手架之后可以非常快搭起来。再接下来会跟大家一起动手亲自部署。再接下来是介绍 MARA 的 Open Telemetry 的进度。
Telemetry 包含很多方面,它是 open tracing 和 open sensors 两个项目合并起来的,各有长处。合并起来之后才有了 Open Telemetry ,大家可以通过实验在 MARA 的架构下面直接体验,用 MARA 架构如何做可观测性。

首先是我们刚才谈到的现代应用架构,因为它牵扯到非常多的组件,MARA 也是通过业界比较好的实践总结出来的样本搭建,让大家能够很快使用。大家平时看到的可能是露在水面上的冰山部分,不管用什么样的方式去做,应用支撑商业逻辑就可以了,但是为了让业务能正常流转。
冰山下面还有百分之九十几的东西看不见,是开发团队、运维团队、平台团队努力来达成的效果,包括刚才谈到 monitor 去监测 metric、 prometheus、可观测性如何做 trace ,找到业务中哪一个是关键,哪一条链路是关键,哪一个是脆弱的环节,哪个地方开销最大,才能有针对性地去调整业务,得到更好的支撑。
你要通过可观测性来判断是否具备这样的能力,如何提高管理的效率,比如用 IaC 的方式。还有 Kubernetes 可能是未来大家都认可的底座,能跑在任何的应用上,这是我们希望能涵盖的元素。

大家可以看到整个全景图,左侧的管理平面开发的伙伴会把我们应用的代码都交付好放在上面,有非常成熟完善的体系去管理代码迭代质量以及最后的部署。
近两年,架构即代码、IaC 的理念越来越深入到各个企业的数字化转型实践当中,但是我们的关注点在下面,应用代码本身有非常完善的体系,所以我们是从网络架构开始就要融入在里面,包括入口怎么样控制,怎么样通过 K8S 的底座来承载管理、可观测性、监控等元素。
大家可以看到有证书的管理,因为大家都在搞业界的热点 TLS 双向的零信任, logging 怎么样收集,应用的日志、平台的日志、各个组件日志,还有可观测性怎么样做追踪,怎么样把它送出去,因为现在 SaaS 的方式大家比较容易接受。另外还有安全上,怎么样保证合规,所以我们期望在 MARA 架构里面涵盖这里所有的元素。
NGINX 作为重要的入口,包括今天腾讯和阿里的老师都分享了他们在这上面的实践,可以给我们很多的帮助。因为复杂且必要,所以我们希望把业界比较好的实践做成示例,也就是我们所说的参考架构。
很多企业爬坑的过程比较痛苦,有很多反面的案例,比如把很多东西硬串在一起,就很容易陷入问题,这样子的应用场景相对比较简单。还有一些企业是作为营销材料,给大家不好的感受,另外很多东西不可复用,这也是驱动我们做 MARA 的原因之一。
还有一个很重要的原因是开源是未来的一个非常大的驱动力,大家可以节省非常大的成本。所有的企业都在搞降本增效,所以利用好开源的资产是非常重要的。因此,我们以开源为主要的组件。

在业界看来,基础架构会走向容器化,用 Kubeconfig 可以连通所有的 K8S 分支以及各种各样的云平台,通过 API 非常容易对接。在管理层面上面有证书的管理,如 IaC ,应用本身代码管理得非常好,架构的代码要通过非常有效的工具。NGINX IC 应用很多,包括早晨彦林老师分享的云原生网关、可观测性。
Opentelementry OTel 、Prometheus 看指标,ELK 看日志, Grafana 做展示,这些都是业界非常经典的实践,秉承了业界最佳实践。应用方面,也有一个比较典型的应用,比如银行示例 Bank of Sirius,是从谷歌银行的应用实例里面 Fork 出来的。
还有 CI/CD 的工具,应用的场景包括:一种是运行整个项目,可以对团队的能力进行培养、实践,甚至可以帮助一家初创企业快速搭建架构;还有一种是只查看使用X的场景,比如 Opentelementry 中间的 tracing,当然还有一种是拿代码来解决您环境中的问题 X,大家可以按照自己的需要去应用。

在 IaC 方面, Pulumi 是第一的选择,因为它跟各个开发代码结合得非常好,我们也会将 Terraform 集成进来,因为它比较成熟,很多企业都有非常多的实践,也有很多的资产积累。
架构方面,私有云的平台、K8s 都是一个重点,大部分的企业都基于 Kubeconfig 对接,另外还有 Registry、GitHub、IC,可观测性目前集成了 OpenTelemetry Operator 以及 Lightstep 的 SaaS 服务,大家可以利用它专业的服务,提供更好的可见性。另外还有针对应用的 WAF,是所有企业的关注的重点,我们现在已经差不多将 NGINX NAP 集成在其中。
日志很典型,Metrics 用 prometheus 实践时大家可以上手操作。Grafana 不用多讲,还有 Locust 可以模拟大量的用户的访问,你可以精确定义每一个动作,比如模拟存钱、取款,可以用熟悉的语言去交付,比如 Python 很容易去做场景化演示、压测,待会动手实验可以去体验一下。另外可以部署在什么地方?用任何 K8S 的分支,部署在云上面用云提供的 K8S as a service,也可以本地部署。
在国内有很多合作伙伴都可以支持,对环境的要求很低,需要有 persistent 的 volume 做持久化存储,原因是有很多东西固化。同时,最好对外要有一个 LB,能够提供比较方便的外部访问。K8S 是最重要的目标,通过 Kubeconfig 可以无障碍地去支撑所有的 K8S 分支。

如何使用?对于开发者来说,不管是做电商还是企业产业数字化,很熟悉业务、但平台一下子搞明白非常复杂,所以我们提供 MARA,专注应用代码即可;对于运维来说,可以很容易了解如何监控、管理、标准化部署并且支撑应用程序;对于 QA 来说,利用平台可以很好的用于基准测试等可重现的测试环境;此外,对于初创公司来说,可以很容易的将组件插入到演示/基准测试等架构中,基本覆盖大部分应用场景,实操时,大家可以详细体会。

可以直接访问 nginx.com/mara 并克隆 repo,保证您有 K8s 部署或者 AWS 上有云账号去运行两个脚本,基本上 5 分钟就可以拉起环境。接下来登陆模拟应用,这个子项目你可以替换成你的项目,下一步会看到多种场景,包括一般演示、定制版演示、性能演示。
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:
开源社区官网:https://www.nginx.org.cn/

按点赞数排序
按时间排序
微信公众号
加入微信群