根据 DevOps Pulse 调查,2018 年无服务器采用率从 30.55%上升到 42.58%。在采用者中,28.54%从事研发工作,44.26%从事 DevOps、DevSecOps、SysAdmin 或 SRE 工作。
无服务器计算是当前的热门话题,甚至热度超过 Docker 容器。当然,技术圈内的口水战从来不会因为技术发展而停止。过去一年,关于无服务器计算可能取代容器的言论甚嚣尘上。搞好了,无服务计算可以和容器相辅相成;搞不好,不仅面临绑定风险还可能耗费高昂成本。
自 Docker 出现开始计算,容器已经走过漫长的一段路。目前,不少企业在容器上运行越来越复杂的应用,生态系统也越来越完善。大型互联网公司,比如阿里巴巴,在容器层面进行了不少自研工作。通过解决基础架构层的问题,目前容器已经可以提供与语言和运行时无关的解决方案,这非常适合现代 IT 架构,即使用不同的语言构建微服务。
围绕无服务器的炒作显然没有容器那么长,除了托管服务外,一些解决方案可让用户在自己的 Kubernetes 集群上运行无服务器,比如谷歌与其合作伙伴所做的工作。虽然这些解决方案试图满足开发人员的所有需求,但不免让人感觉已经开始放弃无服务器的最大优势——不必担心服务器!
虽然无服务器计算可以和容器一起使用,但研发人员还是需要清楚各自的使用场景。
无服务器计算更倾向于处理网站或移动应用程序的后端任务,该任务相对快速且简单,可以根据需要执行,不会占用太多前端时间或资源;负责高容量的后台进程,比如将数据移动到长期存储设备上,或者转换、处理和分析数据,无服务器可以协调各个数据库,这一点也很关键;实时数据流处理和上传,无服务器可以解析、过滤传入数据流;将资源密集型实时进程挪出主应用,避免占用过多资源。
相比较而言,容器更适合需要长期运行、性能可掌握的大规模应用程序。由于二者的不同特点,容器比无服务器更容易实现弹性,并且更容易接触底层架构以调整性能、可用性和易用性等之间的关系。
众所周知,无服务器计算并不是没有服务器,这只是相对用户体验而言,服务器由云供应商统一管理、配置,开发人员只需专注代码层面即可,无需操心底层细节,这可能就是技术研发人员更喜欢无服务期计算的原因。
对企业而言,这种方式很容易被供应商锁定,而且很可能与单一云供应商的绑定越来越紧密,企业试图找到解决方案但往往会陷入另一种形式的绑定中,比如私有云。此外,不少企业在运行应用程度时其实希望了解底层基础设施的状况,以此调整一些性能指标。但是,无服务器计算无法让企业掌握这些信息,这既是它的优势也是它的劣势。当然,不少云供应商在积极尝试解决这些问题,只是还都处于早期阶段。
容器在很多方面都可以做得比无服务器计算更优,比如更适合运行大规模复杂应用程序,容器可以将其拆分为微服务;可以很容易掌握整个虚拟化基础架构,这可能也是 DevOps 人员偏爱容器的原因之一;在了解架构的基础上,技术人员可以进行适当的测试和调整。
风险总是与回报并存,无服务期计算虽然有不足,但可以节省不小一笔开支,比如基础设施成本、人力成本等,同时免于承担设置基础设施的责任。
但是,构建基于容器的通用计算平台需要大量具备专业知识的人才和一笔不小的投资,该平台与 AWS Lambda 等无服务器产品一样高效,可扩展且具有弹性。大多数企业根本没有能力解决过程中的问题。往往是投入了大量时间和金钱,最终还是竹篮打水一场空。
无服务器可大幅提升生产力,但却以控制基础架构为代价。开发人员纠结得往往是选择哪种方式运行应用程序。最终,无服务期计算和容器大概率会趋向协同,无服务器计算可能会更加开放,允许用户自己选择容器。高级用户甚至可通过提供符合 API 的子组件进行日志记录等保留对基础架构的控制。