这篇文章主要是写我对团队在云计算方向上现状的一些思考。并没有什么关于云计算的干货,毕竟我在这方面还需要大量的实践才能有足够的发言权。

IaaS

我们用的最多的就是IaaS(Infrastructure as a Service)了。阿里云中的ECS和RDS就是典型的IaaS,另外阿里云OSS或者亚马逊S3那样的存储服务也是。

IaaS,简单的理解就是,将计算资源,作为一种基础设施,提供给用户。用户可以像消费水和电一样来按需进行使用计算资源。

IaaS是基于虚拟化和分布式技术来提供服务的。在云计算之前的时代,公司的网站是部署在一台台实体的服务器上的。一般来说,一家小公司,可能只需要一两台服务器就可以满足业务需求了。有服务器也自然有传统的运维人员,这种工程师精通硬件、网络和安全方面的知识,全权负责机房里服务器的正常运转和性能优化。

然而维护一台实体服务器的成本是很高的,需要雇佣一个服务器运维人员,需要付出电费和购置服务器的费用,以及架设网络的成本。

大公司会建立数据中心,其实就是有着大量服务器的厂房。大公司有着足够的人力去维护自有的服务器。

在那个年代,后端工程师部署服务是直接部署在实体机器上的,在部署时需要和运维人员确定服务器的环境等,经常会有一些沟通上的问题。

还有一个问题则是,那时的网站是很难动态伸缩的,一个应用往往同时部署在多台服务器上。然而,要使得一个服务能抗下更多的流量,就需要更多的服务器,如果不能在短时间内配置好新服务器,网站在压力之下往往会崩溃。

云计算对于小公司的好处在于,消除了维护实体服务器需要的各种繁杂的成本。维护实体服务器的责任交给了云服务厂商。小公司只需要购买服务就可以。

对于大公司来说,云计算可以动态扩容,一键部署,使得应用在压力之下可以弹性伸缩。将计算资源利用率最大化。

我们使用的ECS其实并不对应一台实体的服务器,但我们在使用的时候可以将ECS当成一台完整的服务器来使用。这就是虚拟化技术的好处。我们可以按需使用计算资源(一台实体服务器往往是8核或者16核CPU这样的配置,我们用不到这么多的CPU)。

我们也不用担心服务器会被攻击或者数据丢失。ECS提供了自动快照的服务。

在我看来云计算是对计算资源做的一次抽象,将后端应用和实体的服务器硬件资源隔离了。使得基于硬件的备份和维护这些事情抽象出来,开发人员只用关注应用层面的逻辑就可以了。

而RDS和OSS这些服务,也是同理。我们不用关心存储具体的物理位置在哪台服务器上,只需要调用这个服务就可以了。

而RDS、ECS和OSS三个服务的分离,也是一种抽象。ECS只关心业务逻辑,OSS和RDS只关心数据存储。只有无状态的服务才能轻松实现横向的拓展。如果ECS上的应用和数据库一起部署的话,会对应用的可拓展性造成影响。

具体说到我们团队,ECS和RDS我们使用阿里云的服务。对象存储我们则打算自建。一个是利用手上的物理服务器,降低一些成本,还有一个就是研究一下分布式存储相关的技术,加深团队在云计算方面的技术深度(Ceph这个开源的分布式存储框架已经非常强大了,我们目前打算先尝试Ceph)。

PaaS

PaaS(Platform as a Service)方面的服务的代表就是Google的App Engine(以下简称GAE)。在App Engine中你只需要写业务逻辑,不需要关心服务和数据的部署。GAE号称会根据你应用的流量实时拓展服务的部署。

GAE带来的其实是更高的一层抽象。将基础设施的使用也屏蔽了。其实这个就将当于大家写了一个Flask应用,push到Github,写一个简单的配置文件,然后就可以访问了。你不用关心Nginx的配置,也不用关心部署多个实例以及均衡负载这些问题。It just works。

另外你还可以在控制台用GUI控制你的应用,以及读取监控数据等等。

我对此是非常感兴趣的,特别是Docker的出现,使得自动化的部署,环境的隔离以及标准化变成了一件比较简单的事情。

我构想中的Muxi App Engine(以下简称MAE)是这样的:

支持Python和Node两种环境,会根据ECS上的实时部署情况,自动将容器实例部署在最合适的ECS上,并且在流量变大时会自动伸缩。在MAE控制台上可以看到常规的Log统计。可以在MAE上用配置中的Git仓库和分支进行一键部署,前端代码也是一样的。

MAE的目标是将一些应用公共的流程尽量标准化,目前我们的自动化部署还是需要自己写Webhook脚本的。统计的话也是需要手动去配置的。Nginx相关的一些配置也是手动的。

MAE是一个单独的服务,部署在一台服务器上。MAE对可支配的ECS都有着记录,并且在对应的ECS上都运行着守护进程,和MAE服务通信。

MAE时代的开发和目前并没有太大的区别,只是每个应用需要有一个MAE的配置文件,里面写了域名、Github仓库、Docker环境等等信息。

我们在MAE上新建一个应用,然后点击部署,就可以部署了。

对于我们的大部分,自己托管数据的应用(相比匣子这样需要实时爬取的应用),比如学而、桂声等等,MAE这样的模式可以很好的讲平台层的运维工作简单化、标准化。

当然MAE如何和微服务结合这个也是一个问题,目前的应用其实是有分拆成服务的空间的,这样的话MAE其实应该是以服务为单位的。

SaaS

SaaS(Software as a Service)离普通用户最近的云计算形式。我们用Tower、百度云盘、石墨文档这些,都属于SaaS。

我们日后推出的服务,比如云简历,或者是其他工具类的应用,都是以软件形式向用户提供了某种基于云计算的服务。

结语

基于综合的考虑,我认为云计算是目前最有用,也是最触手可及的前沿技术。

目前后端技术这边,机器学习/人工智能、云计算、大数据,是几个比较火的领域。当然这几个领域目前有融合的趋势。

对于我们来说,要构筑我们的技术壁垒,云计算是最好的突破口。在知识水平、业务体量等种种的不利因素下,云计算是可以深挖,并且实践的一个领域。

无论是对于我们内部服务的支持,或者是对于个人技术能力,就业市场竞争力的提升来说,这都是一个最优的方向。

所以在接下来的很长一段时间,我希望大家能一起努力,在云计算上,达到一个不算太寒碜的水准。这需要所有同学的支持,包括前端、客户端和设计组的同学,因为转向云计算会对目前的开发流程产生很大的影响。然后在UI和品牌方面,自然也需要前端和设计师的配合。PM同学也需要理解这个战略。

就写这么多吧。祝一切顺利。