一个软件的诞生

开发过程

准备:市场调查、需求分析……

确定方案:技术,平台

开发:

  • 设计&前端:界面
  • 后端:业务逻辑

上线:

  • 运营:宣传
  • 运维:服务器维护

传统的运维方式

把写好的软件部署到服务器上,跑就完事了。

如果业务量大了呢?

用一样的方式部署到很多服务器上,跑就完事了。

有什么问题?

  • 必须时刻以最大业务量安排服务器数量,成本高。
  • 每个公司都要有专职运维人员,招人难
  • 运维人员无论水平高低,所能管理的服务器数量有上限
  • 遇到突发状况,所需运维人员数量陡增,而保持一个大量运维团队需要高成本

一种趋势

所需管理的服务器数量庞大,但大部分工作都是重复的。所以……

CI/CD

持续集成,持续交付,持续部署。让后端开发人员(数量庞大,不乏牛人)来完成运维工作

Devops

运维开发,专门开发运维工具的人。试图将运维工作尽可能的自动化。

另一种趋势

虚拟化技术的进步

最初的虚拟化:让windows的应用在mac上跑起来(纯举例),虚拟化的环境具有完整的系统,可以在另一个操作系统上跑起来。在性能上具有极大的开销(就是会很慢)

容器化:让一个应用在一个容器中运行,该容器具有该应用所需的全部环境。一个容器就是一个进程,开销较小,与操作系统兼容良好(主要指linux)

容器时代

不再关注各式各样的环境问题,所需要的环境都可以打包成容器,并且可以使用别人打包好的容器。

docker:第一个开源容器技术的公司,现在仍然是王者。

docker的开源使得任何人都可以轻松部署各式各样的服务,因为环境的配置已经不是难题。但是对于企业来说,问题仍然存在:每个服务器上都可以跑好几个容器,就像以前一个服务器上可以跑好几个应用一样。如果有几千台呢?几万台呢?

容器编排

能不能让不同的服务器上的容器连成一个整体?或者自动编排容器,让它们在合适的时间或者位置提供服务?

kubernetes:来自google,简称k8s,容器编排唯一的标准,生态的中心。

允许将多个提供同一服务的容器打包成一个pod(豆荚),将多个服务器设置为一个cluster(集群),由k8s来决定pod在哪台服务器上运行。并且k8s可以在不同服务器上启动相同的pod,当一台服务器出现故障时,k8s迅速在其他服务器上添加故障服务器上运行的pod,从而保证了服务的稳定性。

即成事实:k8s是生态的中心

围绕k8s的生态:监控,流水线部署,自动预警,网格化网关,容器化数据库以及serverless

k8s标志着云时代的正式开始

再进一步

如果容器可以方便的创建和销毁,能不能更进一步?

当有请求时才创建容器进行服务(而不是一直等着),请求结束就销毁容器,这便是Serverless,来自Amazon(亚马逊)

Serverless,无服务器技术,只有有需求的时候才服务。

试想一个秒杀系统,在短暂的几秒内,服务器收到了数以亿记的请求,服务器立刻反应,创建大量容器进行服务,每服务完就立即销毁,把资源留给下一个创建的容器。而在几秒前或几秒后,服务器也许还处于一个“清闲”的状态。当前的serverless按照请求数计费,小公司无需按最大并发量购置服务器,只需直接购买serverless服务。

云服务现状

自k8s被推出以后,大公司们成立了CNCF(云原生计算基金会)。示例成员:google、AWS(亚马逊,世界最大的云服务供应商,serverless的领头羊)、RedHat(红帽,世界上最大的服务器软件公司,负责的centos操作系统跑在世界上百分之五十以上,中国百分之八十以上的服务器上)、docker、apache基金会(最成熟的服务器软件apache拥有者)、github、gitlab(二者分别为最大的代码托管网站和最大的开源私有git服务提供商)、华为(独立的鲲鹏架构)。

国内环境

  • 阿里云:全国最大的云服务供应商,对内为淘宝等提供服务,对外为各类企业提供云服务。
  • 腾讯云:对内有qq、微信、微信小程序等业务。拥有独立的小程序平台。
  • 华为云:有自产鲲鹏服务器,使用与绝大多数服务器不一样的arm架构(大部分服务器包括个人电脑都是amd64,也叫x86-64,但苹果的自研芯片M1是arm)。
  • 七牛云:阿里云出走大佬创办,有一定实力。
  • 青云:一个k8s开源集群管理系统的国内主导者。

现状分析:

一方面,围绕容器和容器编排的标准已经制定完成,但基于标准的各项指标仍有提升空间,各大公司仍然在试图在这些标准下做出更好的工具,比如容器和容器的构建工具。另一方面,围绕生态的工具也有许多不完善之处,比如一个让不懂运维的人也能轻松部署的自动部署平台,或是一个完善的部署到监控的工具链。这些被统称为“云基础设施”,云基础设施仍然有许多待完善之处。对于互联网行业来说,传统的运维会越来越少(但绝对不会消失),更多企业倾向于请云服务供应商来构建自己的服务,甚至直接将自身服务交给云供应商。反过来,云供应商也要开发更好的云平台给企业使用。

一些其他的机会

云与AI

当服务器闲下来可以做什么?挖矿(划掉)。服务器被设计成可以不间断的运行,但很显然它并不会真的时刻运行,当它闲下来时,其算力就有大用途,比如用于机器学习。当然,对于专业的ai公司,他们也有自己的服务器集群,如何利用互联网的云服务来管理自己的集群,也成了一个不错的方向。

云与物联网

专业的物联网后端早就有了,尤其是近年来通信行业的进步,更加促进了“计算不一定非要在本地完成”这种概念的推广。对于传统控制行业来说,大多数计算会在嵌入式设备(看作是一个低性能的计算机)上完成,底层工程师们不得不想尽办法优化性能,确保其服务能稳定的运行在嵌入式设备中。而现在,这些计算有望在很远的云服务器上完成。(当然,嵌入式设备工程师并不会消失)

这就是我对这个行业的一些了解。