如果你曾经在凌晨3点因为服务器出了故障而被叫醒,你就会明白像“serverless”这样的流行词的魅力所在。“这些机器可能需要数小时、数天,有时甚至数周的时间来配置,然后需要不断更新,以修复bug和安全漏洞。这些更新通常会带来一些麻烦,因为新的更新会导致不兼容,从而迫使其他更新,或者看起来是无穷无尽的。运行服务器带来的无穷无尽的麻烦是主流云公司采用“无服务器”架构的原因之一。
无服务器功能正在成为连接所有云功能的粘合剂或脚本语言。如果您想探索机器学习并使用它来分析数据,最快的方法之一就是创建一个无服务器的应用程序,并开始将事件发送到云计算的机器学习角落。
其中隐含的承诺是,将所有东西都切得更薄,可以更容易地共享云中的资源。在过去,每个人都会疯狂地创建新的实例,例如,Ubuntu服务器在自己的虚拟机中运行。每个人都使用相同的操作系统,而且它被无数次地复制到同一个真实的机器上,这个机器假装成一打或更多的虚拟Ubuntu机器。没有服务器的操作避免了所有这些重复,使得云计算的成本大大降低,特别是对于那些偶尔运行的任务.
当然,所有这些便利都有隐藏的成本。如果您想离开或将代码迁移到另一个站点,您可能需要重写堆栈的大部分内容。api是不同的,尽管JavaScript等流行语言有一些标准化,但它们非常接近于专有的。
为了理解无服务器选项的吸引力,我花了一些时间构建了一些函数并查看了一些堆栈。我没有写太多代码,但这就是重点。我花了更多的时间点击按钮和输入web表单来配置一切。还记得我们用XML和JSON配置所有东西吗?现在我们填写一个web表单,然后由云来为我们完成。但是,您仍然必须像程序员一样思考,才能理解幕后发生了什么,并且超出了您的控制。
AWS Lambda
AWS Lambda正在成长为Amazon整个云的shell脚本层。它是一个基本的系统,允许您嵌入响应事件的函数,这些事件几乎可以由庞大的Amazon云基础设施的任何部分生成。如果将一个新文件上传到S3,您可以让它触发一个函数,该函数可以用它做一些有趣的事情。如果某个视频正在被Amazon Elastic Transcoder转换代码,那么可能会有一个Lambda函数等待它完成时被触发。反过来,这些函数可以触发其他Lambda操作,或者只是向某人发送一个更新。
您可以用JavaScript (Node.js)、Python、Java、c#和Go编写Lambda函数。考虑到这些语言可以嵌入许多其他语言,很有可能运行其他代码,比如Haskell、Lisp,甚至c++。
编写Lambda函数通常比您想象的要复杂得多,因为Amazon提供了许多配置和优化选项。虽然从技术上讲,您只需要编写几行代码就可以完成一些伟大的工作,但是我觉得我必须分配更多的时间来配置代码的运行方式。这在很大程度上是通过在浏览器中填写表单而不是在文本文件中输入来实现的。有时感觉我们只是用文本编辑器交换了浏览器表单,但这是保留Amazon向Lambda用户扩展的所有灵活性的代价。
一些额外的步骤是由于Amazon向用户提供了更多的选项,并期望首次编写函数的用户提供更多的选项。一旦我在谷歌或Microsoft上编写了一个函数,我就可以将浏览器指向正确的URL并立即测试它。
最后,所有这些单击操作都增加了一层握手操作,这使得这项工作比从文本文件开始更容易一些。当我创建一个函数时,浏览器有一个警告:“这个函数包含外部库。“在纯Node的时代,这是我应该知道的事情,或者我可以在交叉手指的时候通过谷歌搜索错误信息来学习,希望答案就在那里。”现在,乌云正冲进来帮忙。
Amazon还有许多其他选项,它们就像AWS Lambda一样“无服务器”,如果无服务器意味着免除服务器管理的杂务的话。它拥有Amazon EC2自动伸缩和AWS Fargate等弹性工具,可以启动和关闭服务器;AWS elastic Beanstalk可以接收上传的代码,将其部署到web服务器,并处理负载平衡和伸缩。当然,使用许多这样的自动化工具,您仍然要负责创建服务器映像。
其中一个更有用的产品是AWS Step函数,这是一种无代码流程图工具,用于创建状态机来建模软件架构师所称的工作流。部分问题在于,所有的无服务器函数都应该完全不受状态的限制,当您强制执行非常基本的业务逻辑时,这是可以工作的,但是当您让一些客户机遍历检查表或流程图时,这就有点像噩梦了。您需要不断地到数据库中重新加载关于客户机的信息。Step函数将Lambda函数与状态绑定在一起。
Google Cloud Functions and Firebase
如果您的目标是摆脱配置服务器的麻烦,那么谷歌Cloud有许多服务可以提供各种各样的自由,比如不需要根密码,甚至根本不需要使用命令行。
一个名为谷歌Cloud Pub/Sub的包对您隐藏了消息队列,所以您需要做的就是为数据生产者和消费者编写代码。谷歌云函数为许多主要产品提供事件驱动计算,包括一些选框工具和api。然后是谷歌Firebase,一个基于类固醇的数据库,它允许您将JavaScript代码混合到数据存储层中,从而将数据交付给客户机。
其中,Firebase最吸引我。一些人认为,数据库是最初的无服务器应用程序,抽象出数据结构和磁盘存储任务,通过TCP/IP端口传递所有信息。Firebase将这种抽象发挥到了极致,它还添加了JavaScript代码和消息传递,以完成几乎所有您可能希望对服务器端基础设施进行的操作,包括身份验证。从技术上讲,它只是一个数据库,但它可以处理堆栈的大部分业务逻辑和消息。您确实可以使用一些客户端HTML、CSS、JavaScript和Firebase。
您可能想要像Oracle一样,将Firebase的JavaScript层称为“存储过程”,但这将忽略更大的内容。Firebase代码是用JavaScript编写的,因此它将在Node.js的本地版本中运行。您可以在这个层中嵌入很多业务逻辑,因为Node的世界已经充满了处理这个工作流的库。此外,您还将享受在客户机、服务器和数据库上运行的同构代码的乐趣。
吸引我眼球的部分是内置在Firebase中的同步层。它将在整个网络中同步来自数据库的对象副本。诀窍在于,您可以将客户机应用程序设置为另一个数据库节点,该节点订阅相关数据的所有更改(并且只订阅相关数据)。如果数据在一个地方发生变化,那么它在任何地方都会发生变化。您可以避免所有消息传递的麻烦,并专注于将信息写入Firebase,因为Firebase将在需要的地方复制这些信息。
您不需要只关注Firebase。更基本的谷歌云函数是在整个谷歌云中嵌入定制代码的更简单的方法。此时,云函数在很大程度上只是编写Node.js代码的一个选项,这些代码将在预先配置的节点环境中运行。虽然谷歌云平台的其他部分支持多种语言——从Java和c#到Go, Python和php——但是云函数严格限制在JavaScript和Node上
至少在这一点上,谷歌云函数不像AWS Lambda那样深入谷歌云。当我四处查看如何构建一个与谷歌文档交互的函数时,我发现我可能不得不使用REST API,并用一种叫做Apps Script的东西编写代码。换句话说,谷歌文档世界有它自己的REST API,早在这个流行词出现之前就没有服务器了。
Microsoft Azure Functions
Azure函数文档中最好的例子之一展示了当有人将电子表格保存到OneDrive中时如何触发云函数。他们可以编写Azure函数来做任何事情。我们经常认为HTML和web是云的唯一接口,但是没有理由不能通过Microsoft Word或Excel之类的文档格式。
与Amazon的Step函数一样,逻辑应用程序也意味着要对“工作流”进行编码。您仍然可以编写逻辑,以类似流程图的方式链接各种函数和连接器。
逻辑应用程序的最大优势是预先构建的“连接器”,可以深入到一些较大的微软和第三方应用程序中。您可以有效地在逻辑应用程序和Salesforce、Twitter和Office 365等应用程序之间推送或拉出数据。这些连接对公司IT人员非常有价值,他们现在可以通过编写逻辑应用程序将外部工具连接起来,就像过去创建shell脚本一样。
Azure的另一个有趣的特性是Azure Cosmos DB,这是一个同时包含NoSQL和SQL的数据库。微软已经复制了卡桑德拉和MongoDB的api,这样您就可以在不重写卡桑德拉或MongoDB代码的情况下输入和输出信息。如果您想编写SQL,也可以这样做。Cosmos DB保持了一切正常,并为所有东西建立了索引,使其快速运行。如果您想让许多SQL和NoSQL代码协同工作,那么这将使它成为一个有趣的中心连接。或者你只是想在未来为不同的方法敞开大门。
Serverless云比较
哪个无服务器平台适合您?在这三个竖井中,编写基本函数的方法基本相同,但是有所不同。最明显的可能是可用的语言,因为每一种语言在完成对Node.js和JavaScript的支持后都会播放收藏夹。您可以为Microsoft的Azure编写c#并不奇怪,但是它对f#和TypeScript的支持是独一无二的。Amazon支持Java、c#和Python。虽然谷歌在应用程序引擎中支持更多的语言,但目前它的基本功能仅限于JavaScript。
刘世民
资深云计算技术专家,《OpenShift云原生架构:原理与实践》作者之一;
十几年IT从业经验,曾先后就职于IBM、EMC、云极星创和易航科技,担任过云架构师、顾问工程师、CTO和事业部总经理等职务。并译有《Ceph Cookbook中文版》、《精通OpenStack》和《机器学习即服务》等书籍。
与各位深度交流《Istio服务网格基本原理及用法》
微服务架构演进历程
Istio的架构及核心组件
Istio的核心功能之一 - 流量控制
Istio的核心功能之二 - 安全
Istio的核心功能之三 - 可观测性
Istio的数据平面 - Envoy
Istio的发展路线和应用
关注新钛云服公众号,扫下方二维码,报名参与直播,分享邀请卡前五名,活动现场可获得刘世民最新书籍《OpenShift云原生架构:原理与实践》一本。