入门学云原生系列01——云原生是什么?
什么是云原生?
简单认识
云原生有一个简单的理解:云指的就是云服务器,原生指的就是云服务器中自带的应用软件。这些应用软件可以高效弹性扩缩容(指的就是增加或减少服务器的数量)后,自动适配新的服务器数量环境,而不需要运维或开发做什么。
应用场景
设想一种场景:有一个电商系统,其中包括商品浏览模块、商品购物车模块、商品支付模块,每个模块一共部署了10000台服务器,共计30000台服务器。那么双11的到来了,这些服务器肯定不够用,那么怎么安排才能满足双11的需求呢?那么可以把双11活动分解成:
活动前:双11前引导用户浏览商品,并把商品添加到购物车
活动中:双11开始,引导用户直接从购物车下单购买
按照上述分解之后,活动前的访问压力就集中到商品浏览、商品购物车模块,支付模块的压力相对就较小了,那么此时是否可以把支付模块的一半服务器分配给商品浏览和商品购物车模块使用呢?答案是肯定能的。反之活动中,购物车和支付模块的压力变大,我们可以同样把商品浏览模块的一半服务器分配给购物车和支付模块使用。通过以上的合理调配,你会发现我们没有增加新服务器,也能应对高并发。
云原生雏形
上述场景如果要实现,会关注到几个关键点,其实这些就是云原生的雏形特点。
程序首选要拆分成商品浏览模块、商品购物车模块、商品支付模块——这个思想后续发展成微服务
上万台的服务器,从机房到服务器的建设是相当大的一个工程,更廉价的方式就是使用——云(基础设施)
服务器可以任意调配,从10000台缩减到5000,并变成其它模块的程序——这个就是容器化技术的表现
云原生重定义
通过上述,我们知悉微服务、基础设施、容器化是云原生的组成。其实这是不云原生的全部定义,因为云原生重定义了互联网的软件架构趋势,发展快速且广范,毫不夸张的说云原生引起了新的互联网技术革新。因此它应该具有更强的定义:
核心组成
云原生涉及的领域还在高速发展,但上图6个方面普遍是行业内共识的内容,用公式来表达既:
云原生 =
容器(Containers)+ 微服务(Microservices)+无服务(Serverless)+服务网格(Service Mesh)+持续交付/集成(DevOps)+云基础(Cloud)
容器(Containers): 容器时一种轻量级的虚拟化技术,方便在云上快速创建和运行操作系统
微服务(Microservices):把一个大系统,拆分成多个独立可运行的子模块,方便在云上依据流量调整子模块的服务器数量
无服务(Serverless):无服务并不是指不需要服务器了,而是指不用关注服务器部署、扩容等,开发者重点关注业务即可
服务网格(Service Mesh): 让用户更精细化、更智能的去关联服务之间的通讯
持续交付/集成(DevOps):是开发、运维、测试高效协作交付成果的指导思想,当然也包括系列工具
云(Cloud):是大规模机房、服务器的组建表现形式,是云原生的基础,没有云也就没有云原生
云原生发展简史
2010年,Paul Fremantle在博客中首次提出云原生,将其描述为一种和云一样的系统行为的应用的编写;
2013年,Pivotal公司的Matt Stine首次大力推广云原生(CloudNative)的概念;
2015年,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;
2015年,由谷歌牵头成立,CNCF基金会成员目前已有一百多企业与机构,包括亚马逊、微软。思科等巨头;
2017年,Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器;
2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh)和声明式API给加了进来;
云原生与传统应用的区别
云原生带来的最大好处就是:能够快速交互结果、应对业务快速需求变化;具体两者区别如下: