首先,云(Cloud)是什么?
不是云里雾里,所谓云,我的理解是物理资源的虚拟化,以前是你必须要买一台台硬邦邦的金属,有个机房,放自己的机房里,管水管电,这些管理维护工作都要投入一定的人手。云来了以后,她说你不用管物理机器了,你想用的无非就是操作系统,我提供给你,你想用什么去和操作系统打交道——shell、人机交互界面都提供给你,这样水电都不用你管,你只管给兄弟打点钱就行了????。
核心逻辑就是企业生存关心的是自己的业务逻辑,而远离业务的这些工作可以交给别人(云厂商)来打理,同意这样干的人多了,业务量起来以后,云厂商能挣着钱了,就专干这个,而且量大从优,企业摆脱了非核心业务逻辑的负担,同时又获得了专业的服务,香不香?这就是通过市场来进行资源的优化配置。
现在市面上很多公有云——阿里云、腾讯云、网易蜂巢、青云等等,不一而足。博主作为传统金融企业的从业人员,出去调研时,对方布道(忽悠)人员一般都会甩给你一张祖传秘戏图,不对,是基础设施演进图。
看,在“软件正在吞吃世界”的豪言壮语背景下,企业的技术基础设施也正在被拆解蚕食——这是好事。从水电到应用,一层层地被剥离出来,交给专门的厂商负责,而企业最终留下来的只有自己的核心业务诉求。
把物理基础设施吃掉的,叫 IaaS(Infrastructure as a Service)——基础设施即服务;把操作系统都吃掉的,叫 PaaS(Platform as a Service)——平台即服务;把所有的都吃掉,说声大爷您慢用的,叫 SaaS(Software as a Service)——软件即服务。IaaS 和 PaaS 都有叫云的,IaaS 就不说了,PaaS 有叫着容器云的,基于容器技术进行资源管理分配。当然,别忘了这些划分是从不同人员的角度来说的,比如在企业里,可能这样——运维同学看到的是 IaaS,技术同学看到的是 PaaS,业务同学看到的则是 SaaS。
到这里我们可以引出 Heroku 了,Heroku 就是一个墙外飘香的 PaaS 平台,她的用户只需要操心自己的应用代码,Git push 上去就会嗖嗖嗖地给你打包、测试、部署好,什么横向纵向伸缩、应用运行指标监控、负载均衡、失败重试、应用/数据回滚,都给你准备好了。不多说了,再说就要收钱了。总之 Heroku 对如何使用 PaaS 平台构建应用充满了丰富的实战经验,并提炼了 12-factor,大概意思我直接剪过来:
- 基准代码
一份基准代码,多份部署 - 依赖
显式声明依赖关系 - 配置
在环境中存储配置 - 后端服务
把后端服务当作附加资源 - 构建,发布,运行
严格分离构建和运行 - 进程
以一个或多个无状态进程运行应用 - 端口绑定
通过端口绑定提供服务 - 并发
通过进程模型进行扩展 - 易处理
快速启动和优雅终止可最大化健壮性 - 开发环境与线上环境等价
尽可能的保持开发,预发布,线上环境相同 - 日志
把日志当作事件流 - 管理进程
后台管理任务当作一次性进程运行
现在可以回来说说云原生(Cloud Native)应用。
在云计算平台上部署应用,叫云上应用,而应用在设计开发时就考虑到了云平台的支持,进行无缝对接,天生契合,就可以叫云原生应用了。什么叫契合,最初就是以匹配 12-factor 这 12 个最佳实践原则来说的,后来 Kevin Hoffman 又补充了三点:
- 遥测
提供应用的指标数据:应用性能监控、业务领域指标、健康及系统日志 - 认证和授权
所有暴露的端点都要做安全检查 - 一等公民:API
优先设计 API,在服务生态中通过 API 划定交互边界
集齐了15颗龙珠,我们落地云原生应用就差不多有些底气了。
在2015年7月,云原生的大本营建立了,她就是 CNCF(Cloud Native Computing Foundation)——云计算基金会。CNCF 在 V1.0 版中是这样 定义 云原生应用的:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
对应用、对基础设施都给出了一些指导原则,上 Git 仓库、上 DevOps、上 MicroService、上服务网格、上 Kubernetes、上 Jenkins… 需要上一大堆 CNCF landescape 里提到的东西,社区真是热火朝天,博主表示真的是一大坨。
一个巴掌拍不响,云原生应用必须是应用+云平台两方面的结合,其实传统企业技术架构转型面临的难题更多的是老旧的基础设施、管理流程,以及由此衍生出的技术文化、审批文化,而不只是应用开发这一个小点。