先后经历了几家做公有云的公司,也在不做公有云的公司的偏基础架构部门工作过,积累了一些思考。
我的想法比较激进,我认为每个有建设独立基础设施需求大公司都应该建设公有云,这个公有云并不一定要像 aws 或者 azure 那像全面,有几百个服务,但是核心的服务能力如 技术(主机,容器,函数)、存储(块、文件、数据库等)、网络(vpc,安全)能应该要完成,这套产品并非一定要对外提供服务,但是应该是以可以对外提供服务公有云标准来完成。这个想法基于下面几个理由。
首先,建设公有云的成本并不高。
从 AWS 开始,建设公有云的成本已经被大幅降低。一是大量的基础设施基于开源软件,如虚拟化、数据库等,研发成本并不高。二是大量产品已经被标准化,如主机、容器、函数,市面上的产品大部分已经经历了多次迭代,经历过用户、市场的检验。国内的大部分云产商基本也是这样的思路,通过模仿 aws 等比较成熟的产品形态完成初期等产品开发,后期发现这套设计已经非常自洽,大部分初期创新再后来看来都被发现有点自作聪明。三是完善的 idc 产商造成硬件设施的成本也不高。基于以上几个原因,完整的建设这套核心产品的成本已经很低,以我之前工作过的某云厂商(国内前 5)为例,在我工作期间,研发维护包括销售一套完整的公有云产品(还包括客服支撑)当时只有 500 多人,这可能比大部分的大公司的基础架构部门人都要少了,但是产品质量却很高,包括主机等产品,因为速度极快、性价比很高在业内很受好评,一度在某个行业的占有率第一。
其次,建设公有云就是建设基础架构的最佳方式。
事实上,公有云就是从建设基础架构的最佳方式中产生的。有兴趣了可以阅读这篇有趣的对比 google 和 aws 的文章, 从中大概的思考出,为什么做得最好的公有云厂商会是一个电商公司,而不是以技术能力著称的 google,以及为什么 aws 叫 amazon web service,而不是 amazon cloud。amazon 的这套工作方式使得他们的基础设施服务提供给外部使用变得自然而轻松,而这套机制的优越性在后来的发展中被越来越深的证明。包括这篇文章的说明,我总结传统的基础架构建设方式和公有云几点重要的不同:
- 任何服务都是接口,不允许以其他方式提供服务,团队之间以接口沟通,高内聚低耦合的设计以及完整完善的接口文档,避免没完没了没了的沟通、会议、以及内部定制需求。传统基础设施往往缺乏版本管理以及各种内部需求导致内部的产品和接口混乱,以至于没有人能熟悉所有接口,很多服务口口相传,内部重复制造轮子以及过几年推翻重做,旧接口完全废弃。
- 任何接口都必须从骨子里到表面上设计成能对外界开放的,这点限制了开发设计人员从第一天开始,就必须考虑产品设计的可拓展,可维护,版本化和安全性。与之对比,传统的基础架构内部到处充斥着不安全、无鉴权,以至于当一个服务企图对外提供服务时,整个公司的内部网络都可能收到入侵。
- 产品必须有充分的安全隔离能力,这点是对上面一点的补充,实际上今年来兴起的容器技术已经让这点变得容易,很多建设传统基础设施的公司也在践行。隔离有很多好处,避免了很多不可预测的问题,另外有一些觉得内部基础设施的建设不像公有云一样应对很多恶意的用户,所以隔离不那么重要的观点,实际上,在我看来,内部用户和外部用户一样危险,内部用户也可能是入侵黑客,或者有意无意的问题服务,做基础设施不应该假设用户的善意。值得一提的是,公有云都强大的接口管理和授权策略的配置能力,使得接口可以以非常灵活的方式授权给有权限的用户。
- 准确的计费能力,这点对于公有云来说显而易见很重要。然而对于内部基础设施的建设同样重要。传统基础设施的建设更像是计划经济,某个业务需要大量资源,经过某种神秘的预测和故意,发出申请,讨价还价,层层审批,最后资源分配。业务时常抱怨资源不够,而基础设施提供部门则面露难色,表示资源池里面就这么多,大家都很难。让我联想起计划经济时代的肉票饭票,造成这个结果的本质原因是:这是计划经济,而计划经济总是资源不足的。充分的市场化使得资源使用者会重视自己的资源投入效率和成本,而资源提供者也会更加关注提供资源的使用率和成本。当然对于内部业务,或许不用真正的收费,这是一个财务问题。但是完善的计费能力必不可少。
- 产品的标准化带来一个好处:基础设施提供的服务是可以被评估的。比如云主机或者函数,就有大量的评价指标,评价这个产品是否在效率、性能、成本上和其他云厂商的区别,从内部看,还有其他指标,比如提供同样的产品成本是多少,售价是多少,毛利是多少,如果毛利过低,或多或少说明的产品有待提高。而传统的基础设施厂商往往是 ppt 证明优越性,无数据无对比,动辄表示支撑了多少内部业务,管理了多少核的计算资源,但是要知道,内部用户并没有选择的余地,大部分内部用户的耐受性都很高,只要有东西用(还是免费的)就很好,并没有产品优越性的依据。公有云产品则是骡子是马都可以拉出来溜溜。
再者,建设公有云和对内服务并不冲突。
有种说法是我们公司的背景、需求比较特殊,所以对内造一套特殊的轮子比较能满足需求,这套说法是不是似曾相识?实际上,很多公有云厂商也要服务几万人的大公司,你所遇到的问题也是他们的需求。公有云也能很好的支持大组织接入,也不反对在上面做更高层的、更定制化的 pass、saas 设施。一切都是接口,并不会增大组织间沟通的成本,反而是降低。充分的隔离并不会降低整体的资源使用效率,反而是市场化的机制会自然而然的使资源使用效率更高。系统也会变得更加健壮。
这套体系的核心是市场化、标准化、以及接口化的产品。市场化的机制以及标准化的产品,使得基础设施服务的能力也不断(有依据的)提高。以我工作过的一个某 T 公司为例,一直以技术落后,需要被其他公司人才技术扶贫著称。自从发展公有云之后,技术能力不断提高,做出了很多有影响力的云产品或者开源工具。我想在未来很长一段时间内,无论在技术能力或者影响力上,都会甩掉技术落后的帽子。