原文作者:行云创新产品总监 陈晓露

前言

云原生在国内外发展得如火如荼,其实对云原生的理解,大家可能不尽相同。

有人认为,云原生跟我没关系,我用原来的方式就挺好。

有人认为,云原生就是Kubernetes。

我们先来澄清一下云原生是什么?

云原生 = 微服务 + DevOps + CICD + 容器云

云原生 kubernetes 云原生架构_云原生

云原生应用技术架构演进方向

从技术架构上来说,云原生的技术架构应该满足如下特点:

  1. 微服务。应用的架构应该是微服务的,且是基于K8s的。
  2. 韧性。应用的各个服务应该具有强韧性,即故障自愈能力。应用部署在K8s上,且提供健康检查接口,就能做到强韧性。
  3. 弹性。应用的各个服务应该具有强弹性,能根据负载情况弹性伸缩。应用是微服务的,各个服务是无状态的,且应用部署在K8s上,就能做到强弹性。

听上去很容易做到,对于应用服务而言,确实难度不大。但,技术架构上还有另外的重要组成部分——中间件,想要做到韧性和弹性,还有较长的路要走,云原生中间件的采用会越来越流行。

云原生应用架构管理演进方向

由于采用微服务架构,云原生应用技术架构会变得越来越复杂,包括横向堆叠、纵向嵌套等多重组合、各种服务的配置、中间件的配置等等。

**复杂是万恶之源。**复杂就需要有有效的手段来管理,人是这样,架构也是这样。突然发现,我们好像没有合适的手段来管理越来越复杂的技术架构图。传统的方式有如下几种:

  1. 在架构师或者研发leader的脑海里。
  2. 架构描述在文件上,纸质的或者电子档。

第一种方式,弊端很大,大脑是用来进行高性能计算的,而不是用来存储的,时间久一点,就没人知道应用的技术架构了。更麻烦的是,如果架构师离职,完全没人知道应用的技术架构了。这时候,代码改起来,研发童鞋战战兢兢,一不小心就踩中隐藏的雷线,想敏捷也敏捷不起来了。

第二种方式,听上去很不错,很多团队也是这么干的,而实质是,架构文档的更新总是落后于实际的应用技术架构,往往是应用更新了好多个版本了,才去更新一下架构文档。并且,相对而言,敏捷不太看重文档。这种方式跟第一种方式没太大差别,五十步笑百步。

那有没有更好的办法呢?当然!

我们稍微思考一下,第二种方式的弊端在于,技术架构跟实际应用不对应,我们只需要找个办法,让技术架构与实际应用对应起来就行了。参考一下3D打印技术,比如,我们要3D打印一个杯子,先用一个描述文件完整描述这个杯子,然后把这个文件以及原材料喂给一台3D打印机,3D打印机就能打印出杯子。类似的,我们可以用一个描述文件来描述应用的技术架构,再把这个文件交个一个应用的“3D打印机”(应用部署引擎),然后就“打印”出应用。要做到这些其实并不难,满足这几点就行了:

  1. 应用的技术架构描述文件必须标准化。这样才能被应用部署引擎识别和执行。
  2. 应用的部署和更新必须通过描述文件来执行,确保一致性。
  3. 应用的技术架构描述文件图形化——架构图,所见即所得。

这么做了之后,还会带来额外的好处:

  1. 应用的技术架构描述文件,作为企业重要的数据资产,本身具有版本管理,方便追溯和交付任意版本的应用。
  2. 应用的技术架构图一目了然,拉齐信息,方便团队成员对架构的理解。
  3. 基于可视化的技术架构图,还可以进行任务分配、团队协作。
  4. 架构图可以一键部署成应用。这个能力对微服务的应用太有帮助了,一般一个应用会有好几套环境:生产环境、测试环境、开发环境、预发布环境、有的还有特性分支开发环境。比如,有个应用有30个微服务,传统方式下,每部署一套新的环境出来都是巨大的工作量和资源消耗。但基于一键部署的能力,这个事情变得非常简单。
  5. Design once and run anywhere。一处开发,交付到任何云。架构图设计一次,将整个应用完整描述,部署的时候,直接部署到任何云,比如阿里云、腾讯云、自己公司的私有云。

对于没有画这种“架构图”的应用,怎么办?

我们能立刻想到的办法是把架构图补起来,但如果记得不太清楚了,怎么办?前面架构管理的思路是从架构图到应用,我们是不是想个办法,来个逆向工程,从应用到架构图?比如,提供一个工具,能基于运行中的应用,各服务和中间件的实际调用流量、调用日志、以及各服务的对应代码库,自动分析出应用的技术架构图?应用即架构、架构即应用。

写在最后

本文跟大家聊了云原生技术架构的演进方向、云原生架构管理的演进方向,我们的产品CloudOS/Methodot (CloudOS是私有云产品,Methodot是SaaS)正是沿着这个方向在做。

如果您对此也感兴趣,欢迎体验CloudOS(www.cloudtogo.cn)。

CloudOS

企业云原生数字化创新平台(CloudOS),为企业构建敏捷创新的应用研发环境,实现应用研发可视化、敏捷化和技术平台标准化,让传统应用研发人员快速实现云原生应用创新,加快企业数字化转型。提供可视化操作界面,通过WEB页面完成架构设计、API管理、在线开发、API自动化测试、多云发布、多云应用调度、应用运维等云原生应用全生命周期管理。支撑传统应用迁移上云,助力传统应用研发团队高效完成云原生应用创新。