终于抽时间总结一下对云原生的理解。
云原生是过去一年里云计算最火的用词之一。几乎每一个云计算的产品厂商都会把自己的产品与云原生联系在一起。但是到底这个词是什么意思,它的具体含义是什么,其实却是非常含糊的。
云原生这个词最早在2014年左右起源于Pivotal。Pivotal是一家做PaaS服务的公司。之后在2015年夏天,Linux基金会创建了云原生基金会CNCF。CNCF在宣布成立时也没有一个关于云原生的具体定义。只是提到了一些相关的技术,包括开源,容器,微服务,编排工具。但是并没有明确地描述怎样使用这些工具开发出来的应用才可以被称作云原生的应用。时至今日CNCF也还没有提出过这个明确的定义。
于是很多公司按照自己的理解去使用这个概念。这导致在很多时候,大家是在说不同的事情。很多公司的理解是只要是涉及云的应用就是云原生。或者是可以给云服务用的工具或者产品就是云原生的。
下面讨论一下云原生的含义,云原生的应用都有哪些特性,以及一个技术团队要成功开发和运维真正的云原生的应用所需要的4大支柱。
究竟什么是云原生?
云原生是云计算时代的新的团队文化,新的技术架构,和新的工程方式。
云原生指的是一个灵活的工程团队,遵循敏捷的研发原则,使用高度自动化的研发工具,开发专门基于并部署在云基础设施上的应用,以满足快速变化的客户需求。这些应用采用自动化的,可扩展的,和高可用的架构。这个工程团队通过高效的云计算现网的运维来提供这一应用服务,并且根据线上反馈对服务进行不断地改进。
我这里强调了几个关键字。一个是云基础设施。云原生的应用一定是会利用云计算,云存储等云资源创建的应用。这个应用也是一定会部署在云的基础设施上的。好的云设施都会提供自动化的,可扩展的,和高可用的架构以满足云原生应用的需求。
另外一个就是灵活的工程团队。云原生的应用一定会是由灵活的工程团队开发的,以快速上线在云设施上,快速满足客户的需求。这个工程团队会使用大量的高度自动化的研发工具,才有可能快速的完成新功能的开发,测试和上线。
最后,云原生的应用在上线到云上之后,工程团队会不断关注应用的运行情况。对这些应用进行运维管理,实时监测,解决随时出现的各种线上问题。云原生的研发团队还会收集应用的线上数据作为反馈,不断地进行分析并且基于这些反馈对应用进行持续的改进。
云原生应用的特征
一般的云原生的应用都会具有以下这些特征:
- 普遍可访问 (Universal Availability)
云原生的应用可以在任何地方从多前端访问。不需要特殊访问设备。没有网络或者地域的限制。
- 高可用性(High Availability)
云原生的应用可以充分利用云技术保持随时在线(24x7)。由于云服务多由计算集群提供,集群中一个节点的单点失败对服务影响小。节点失败也会触发自动恢复机制。新的服务节点会被启动,补充失去的资源。服务的升级和变更会采用灰度部署。在这个过程里,会对计算集群中的节点逐渐升级。现网流量会通过负载均衡器(LBS)在新旧版本的节点间分配流量。从而保证升级过程中,服务无中断。服务所涉及的数据会进行实时在线备份。在数据丢失的情况下可以使用数据备份进行数据恢复。对于更为严重的灾难性事件,云厂商大都会提供异地多活与同城双活的架构以保证服务的持续性。
- 高扩展性(Scalability