是不是还没有搞懂云原生是啥?

电子计算机技术发展至今,已经迭代了很多代,从二战的机械式、到二极管/三极管式、到半导体式、到现在的超高集成电路芯片式,甚至如火如荼的量子计算机也开始商用了。一切一切的发展都是算力的发展,而算力成本的下降和可封装模式的多样化,让我们有各种各种的使用场景出现,云原生只是一个发展阶段的其中一种IT技术的应用模式而已。

本渣认为的电子计算机发展阶段:

时期 模式 用途 利益
二战 机械式 通信加密 赢得战争
二战后 二极管 通信->科研 赢得领先
6,70年代 半导体 科研->商用 赢得市场
8,90年代 芯片 商用->个人 赢得霸权
千禧年 服务器 个人->服务 赢得垄断
10年代 集群 服务->社交 赢得用户
20年代 融合 社交->互联 赢得话语权
30年代 算力 互联->AI 赢得竞争

在这些阶段里面,可以看到是巨大利益在推动科技的发展,是科技的发展在改变商业和生活模式。每一次的改变都是必然的,每个技术阶段都是我们的个人、企业、国家需要避免不落后才不至于被动挨打。

现在的云原生也是,不是我们选不选择云原生,而是我们要怎样迁移到云原生?什么时候迁?迁哪些?成本怎样?获得的利益是否足够我们今天就做出行动?

云原生是一种可选的IT服务类型之一

首先,云原生仅仅一种可选的IT(资源)服务类型,出现的目的只是为了进一步降低IT资源的综合投资成本、软件开发成本、服务器降低运维的方式方法。就好像我们每家每户以前都有个小厨房能稍微煮点饭(半导体阶段),到有个大厨房能做九大簋(芯片阶段),到后面都点小作坊的外卖了(服务器阶段),到现在吃中央厨房的预制菜了(集群阶段)。云原生就是要建立一个可以灵活制作多种设计好的菜市的中央厨房,或者理解为可以较为快速去变化的生产流水线工厂,普通人家在家里建立一个中央厨房肯定是不划算,所以这注定是那是大公司大企业才会去考虑的事情。

云原生只适用正在高速发展中的业务

不管是内部的业务,还是外部的业务,是自己的业务还是客户/用户的业务。云原生都只是适合高速发展中的业务,或是有不断主动要求自己进行自我优化和迭代的业务。因为云原生的每一项功能都是为了服务能力快速变化而生的设计。如果使用非云原生技术,要在同样大的规模和效率达到同样的效果的成本和难度会大得多,也不是不可能,并非只有云原生技术才具备这些能力。

云原生技术不只是云服务

云原生虽然是在公有云服务上生长出来的模式,但是不一定要选择云厂商的产品服务。不少的大企业都会选择建设自己的相关的云原生能力,但是叫不叫云原生就不一定了,起码他们的技术体征都是一样的,如微服务、DevOps、Hadoop、MQ、Nginx、容器、K8S、NAS等的解决方法。是自己搭建的硬件、自己构建的平台、还是直接使用云厂商的各种服务(PaaS、iaaS),这都是需要看情况的。譬如索尼的PS云服务使用的是竞争对手微软的Azure,网飞用的是亚马逊的AWS。

而单纯从软件层来说,云原生化已经发展很久了。这是因为最新的开发技术,都是基于这些能应用在云原生的技术生态而打造的,也可以理解为各种软件都在增加对高可用、高并发、快速迭代的特性,让它们能适配云服务时代。譬如数据库MySQL可以用一台专用的服务器来搭建,或者使用云厂商的直接数据库服务。前者就是传统架构,后者就是云服务。两者其实可以归纳为云原生的实现方式的一种,看需求,没有绝对的优劣之分。但是从省事程度来看,云服务方式的MySQL肯定是最方便,对开发人员来说是最友好的。如果企业自己假设了好了MySQL的服务器,其实对于开发人员来说也只是需要知道IP、端口、用户名、密码和数据库名就够了,使用起来跟云服务没有差别,只是看运维方是谁,还是开通起来谁更加快捷方便而已。

经常说的云原生的架构

很多时候,在说IT技术架构的时候,都有很多所谓的“层”,其实都是虚构出来方便理解的归类结构而已。很多人容易被迷惑的就是在看这个图的时候,里面各种名称,每个厂商的理解都不一样。或者是列举出Flink、OBS这样的软件名字。这样的架构图更多是给IT来看的,主要实现的还是降低资源、开发、运维的成本。但是其的最低入门成本也水涨船高。有以下这样的几层是必须的,并且每一层都是有巨大的横向扩展可能。

(1)应用层:就是用户接触到系统的操作页面。还分PC、APP、小程序、H5等不同的环境平台。
(2)数据库层:就是应用层要展示的数据,数据存储的地方。会有MySQL、MSSQLServer等不同的数据库。
—-以上是传统系统的架构,一般就只有这两层—-
(3)大数据层:分数据收集、数据存储、数据清洗、数据计算、数据转化(大宽表/维度表等)、写入数据库、BI展示,如果比较复杂的处理还有AI和机器学习的版块。
(5)消息层:一般是指MQ,数据库之前的Redis等并发量的数据使用和通信传输的功能。
(6)中间件:就是把很多开发方法已经打包好,从而节省开发代码工作量的软件。
(7)K8S:就是做容器(Docker),即前面应用层微服务化后的存放位置的管理器。
(8)DevOps:就是一种快速发布开发成果到应用层、数据库层、大数据层…等地方的管理工具。因为自身的特性从而适应一边使用一边迭代的敏捷开发模式。
(9)git库:指的是代码管理的工具,一般是github或gitlab这样的工具。
(10)接口层:更多是云原生支持的开放性,支持如Webhook、WebService、OpenAPI、身份认证、数据库链接驱动、SFTP等的一整套对外扩展能力。
(11)网络层:这里不是指简单的局域网,而是有传输加密、SSL、防火墙、DMzone、负载均衡、网络隔离、黑白名单、防止攻击等的能力。而这些能力是上面各大服务组件的高速通路,可能需要万兆甚至光纤才能满足。
(12)移动层:移动的解决方法跟PC的有点不一样,PC层客户依赖浏览器,比较统一。而APP、小程序、H5这些使用场景比较割裂,需要各自开发调整。
(13)用户层:用户层一般是说用户自己的登入设备,手机、电脑甚至是一些特定的专业设备(如一体机、打卡机、生产设备、汽车、PDA等),用户层(业务层)考虑更多是要有良好的体验、畅通的流程、简单的交互、直白的理解。这也需要从测试、培训、手册、项目管理等手段入手去解决。

没有任何一个架构图能非常完整和形象生动的说明一套云原生系统的情况,因为业务和技术在架构中会越来越模糊,技术每年都有升级替代,说法和概念可能会很快过时。架构图本来就不是为不懂技术的人准备的,需要同时清楚业务需求和精通技术的CIO来做判断。

多租户

多租户要解决的事情是成本最低化的问题,一般是指,多家有数据权隔离需求的公司单位,在一套软硬件资源中分离出来开起来完全独立的应用,数据互相看不见,起码在用户眼中看起来完全看不见别的公司单位的任何存在。

(1)例子1:公司A和公司B在阿里云上都分别买了一套4C8G的服务器。公司A和公司B分别部署了自己操作系统、网站等应用。但是对于阿里来说,两套4C8G的服务器只是在一台物理机上的虚拟化而已,他们共用是同一台主机上的同一组CPU和同一组内存。只是公司A和公司B觉得是自己独立的使用一套环境。

(2)例子2:集团企业下的甲分公司和乙分公司,都在使用一种类似的财务系统,但是功能和界面都各有自己的特色。甲分公司用了总账、应收、应付三种功能;乙分公司总账、资产、预算三种功能。甲乙两家分公司的数据、报表、科目、凭证都是独立,相互看不见的,甚至界面风格、权限配置、门户样式都完全不一样。但是都是运行在集团的同一套云原生系统上。两家公司的业务同时处理,并且可以发生相互的往来交易。再来一家丙分公司也只是再开通一家公司就能马上使用一样的功能。

同样的需求,如果每一家都要拆分不同的硬件、操作系统、配套组件的话。维护成本、软硬件成本、维护难度都会高很多。但是这里多租户要成本上划算,起码是3个租户起,不然没有办法摊分其他成本。

我们可以想象成去餐馆吃饭,如果我们要做10桌菜,10家人来吃饭,今天除夕要开1桌大,3桌中,6桌小的,都去餐馆吃的总体成本是最低的。因为每家每户可能都会改变他们吃饭的菜式、口味、时间。如果每家人都只是为了一顿饭而建造一个可以做一大桌菜的厨房,成本是很高的。再譬如热度很高的抗癌厨房,每顿饭只要给5元能随便用里面的厨具,也是一种降低总成本的方法。用的都是以量来摊分成本的办法。硬件软件都是同一套,共享使用一套上限较高的集体资源。