迁移到Serverless之前应该想清楚的几件事
这篇文章是Serverless系列的第三篇文章,这一系列文章是为了探索Serverless的本质。
Serverless技术承诺说可以消除IT运维相关的大部分繁重工作,第三方服务商会承担起更多服务器维护相关的管理工作,而不像企业组织为容器编排和微服务平台所做的那样。使用Serverless平台可以节省资源,其中部分原因是因为Serverless允许组织通过 “按使用量付费” 的模式来使用服务器。
迁移到Serverless资源有许多方法,有对的也有错的。在迁移之前,请记住以下几点。
不要被Serverless这个词迷惑
DevOps的团队成员可能已经听说过Serverless,并希望知道迁移后这个平台可能为他们的组织提供哪些功能,但他们可能一开始就会对Serverless这个词产生疑惑,Serverless意思是无服务器的。但实际上,”Serverless” 应用程序仍在服务器上运行。
“Serverless” 这个词的使用可以追溯到至少2012年,当时Ken Fromm在一篇ReadWrite论文 “为什么软件和应用程序的未来是无服务器” 中使用了这个术语。一个更精确,合适的定义出现在2016年一篇开创性的博客文章中,由Symphonia的合作伙伴兼联合创始人Mike Roberts在Martin Fowler的网站上提出。他写到Serverless架构是 “将第三方 后端即服务
(BaaS,Backend as a Service)服务,和包含自定义的服务代码的容器整合在一起的应用,并将应用运行在 ‘功能即服务(Function as a Service,FaaS)’平台上。”
Roberts写道:“通过整合实践这些想法以及相关的类似于单页面应用程序(SPA)的想法,这种架构消除了传统的对永远在线服务器组件的大部分需求。Serverless架构帮助企业降低运营成本,复杂性和工程准备时间,但代价是增加了对供应商的依赖和相对不成熟的支持服务的依赖。”
以上定义概括了许多供应商提供的Serverless产品,包括亚马逊网络服务(AWS)的Lambda,它被广泛使用并提供BaaS(Backend as a Service)和FaaS(Function as a Service)服务。其他Serverless产品包括 Cloud Functions(Google),IronWorker(Iron.io),Manta Functions(Joyent),OpenWhisk(IBM),PubNub BLOCKS(PubNub)以及Serverless Docker(Docker)。
了解Serverless的优缺点
Serverless的优点在于它能够通过将服务器和相关的基础架构管理任务外包给第三方来帮助公司节省资源。例如,开发人员团队只需要开发应用程序,而Serverless提供商则在异地服务器上完成所有数据维护工作。
Cloud Academy的产品营销经理Albert Qian表示: “Serverless的易用性可以提高开发人员的效率,Serverless计算使开发人员不用接触基础设施,他们可以完全只专注开发单一功能”。
Serverless供应商允许组织根据他们的需求进行扩展或缩小,不再担心冗余的服务器容量。
“Serverless架构让云服务供应商管理服务器以及服务器的扩展以满足需求。将Serverless视为平台即服务(PaaS)的抽象,您需要做的就是上传代码,当您需要向上或向下扩展某个功能时,您只需扩展这个单一功能,”Qian说。 “因此,您无需扩展整个系统,容器或应用程序。另一个好处是无服务器具有内置的容错能力和设计的的高可用性。”
因此,企业可以通过依赖第三方执行操作和数据管理任务来节省资金。 “Serverless的最大优势之一是它可以降低成本。使用FaaS作为您的计算层,您只需为正在运行的功能付费,”Qian说。 “尤其是对于利用率较低的工作负载,您会节省很多支出。因为您只需支付处理请求所需的计算资源,而不是为等待请求进入的空闲服务器付费。”
但是,通过将服务器管理移交给第三方,您的组织也失去了对服务器的大部分控制权, 这一点在您确定是否以及何时迁移到Serverless时是需要慎重考虑的。
“由于Serverless解决了资源管理问题,它正在迅速发展。对于不想维护服务器的小公司来说,这是完美的解决方案,”Raygun的高级开发人员Jeremy Scott说。 “您可以在几乎完全不用关心运维问题的前提下将工作完成,并且比使用自己搭建的服务器架构更便宜。但是Serverless也有其局限性,当你交出责任时,你同时也交出控制权和访问权,这样一来,对你的服务的监控和分析会变得非常困难。”
通过这种方式,对在Serverless平台上运行的微服务和容器进行分析可能成为一个问题。 “你必须了解你的软件,否则就有可能在没有数据支持的情况下做出商业决策,”Scott说。 “因此,如果您使用Serverless,那么在某些情况下您可能需要在客户端(例如App或者浏览器)添加监控,或者您可以尝试为Serverless Function添加异常处理。”
虽然具有挑战性,但将分析软件应用于Serverless部署仍然是可行的。如果为Serverless Function添加了异常处理,可以将Function包装在try-catch中然后发送https API请求,那么错误信息就会被记录在错误报告客户端(例如:Raygun[2])。然而,如果是基于API的服务,将无法被监控,另一种解决办法就是观察API的行为方式”,Scott说。
在决定哪些功能可以移植到Serverless架构时,需要考虑到Serverless部署的缺点——不太强大的计算性能。 “Serverless Function有很多限制。任何需要超过3GB内存的功能都必须重新设计否则无法运行,”Cloud Academy的Qian说。 “要确保团队了解这些限制,并确保他们有足够的知识,经验和培训,来决定适合特定工作负载的最佳技术,这一点非常重要。Serverless或任何新技术的‘酷’因素在架构方面有时会笼罩批判性思维,结果可能导致的松散的Function的组合,而不是整体一致的应用程序。”
安全清单
就像监控和分析一样,在Serverless架构上保护你的数据也十分困难。毕竟服务器的管理和控制都被转移给了第三方。
“例如,Serverless运行时环境不是标准化的,并且被运行的云服务隐藏起来,这使得我们更难以保护云上的数据”,Aqua Security营销副总裁Rani Osnat表示。“对于无服务器,我觉得有几个关键的安全问题,”Osnat说。在进行迁移时,某些安全检查尤其重要。 例如,如果在Serverless Functions中使用了潜在的易被攻击的代码,那么需要在使用之前解决这个问题”,同时对于那些违反政策的FaaS Functions, 我们必须使用强制控制来阻止这些功能的部署。
Osnat说道:“尽管Serverless架构如此具有挑战性,企业组织们仍需要确保他们的Serverless平台在运行时会被监控,以便监测异常。”
Cloud Academy的Qian表示,当迁移到无服务器时,同时也会面对多用户的挑战。 “即使客户的工作负载在虚拟机或容器中是被隔离的,也可能存在安全问题,特别是如果应用程序使用敏感数据。 一个客户代码中的潜在的bug可能会影响另一个应用程序的性能,从而影响客户服务和应用程序的质量。”
译者:Grace Linktime Cloud公司全栈工程师
原文链接:https://thenewstack.io/serverless-migration-strategies-what-to-know-before-making-the-leap/