当前位置: 首页 > 科技观察

公有云中的无服务器计算比较:AWSvsGoogleCloudvsAzure

时间:2023-03-13 16:48:50 科技观察

AWSLambda、GoogleCloudFunctions和MicrosoftAzureFunctions,一点业务逻辑可以大有作为。如果您曾经因为服务器宕机而在凌晨3点醒来,您就会理解“无服务器计算”等流行语的吸引力。物理服务器可能需要数小时、数天甚至数周的时间来配置,然后它们需要不断更新以修复错误和安全漏洞。这些更新通常会带来自己的麻烦,因为新的更新会导致不兼容,从而导致其他更新,或者似乎没有尽头。运行服务器无休止的级联问题是主要云公司采用“无服务器计算”架构的原因之一。他们知道,老板们这样的借口听得太多了,服务器有这个,服务器有那个,类似的问题太多了。能把服务器干掉,老大肯定要。无服务器计算是一个很好的销售,唯一的问题是它不太对。这些应用程序是无服务器的,就像没有厨房的餐厅。如果您想要的东西在菜单上并且您喜欢厨师准备食物的方式,那么坐在餐厅里就很棒。但是如果你想要不同的菜,如果你想要不同的香料,那么你必须有自己的厨房。亚马逊、谷歌和微软是三大公司,他们着眼于未来的应用程序,他们希望将这些应用程序写入无服务器API并通过其自动化层进行管理。如果这些平台做你想让它们做的事,并且新模式得到广泛传播,它们可能是创建价值数十亿美元的独角兽网络应用程序的最简单、最快捷的方式。您只需编写逻辑的关键部分,平台会处理所有细节。无服务器功能正在成为连接所有云功能的粘合剂或脚本语言。曾经相当独立的地图或人工智能工具现在通过事件驱动的无服务器功能连接起来。更多的工作现在可以通过在每个云的每个角落波动和反弹的请求来解决,由事件流触发和触发。如果您想探索机器学习并使用它来分析数据,最快的方法之一是创建无服务器应用程序并开始将事件发送到云机器学习部分。隐含的承诺是,将所有内容分割得更薄可以更容易地在云中共享资源。过去,每个人都会疯狂地创建新实例,例如在自己的虚拟机上运行的UbuntuServer。每个人都使用相同的操作系统,在假装成十几个或更多虚拟Ubuntu机器的同一个真实机器上复制了数十亿次。无服务器计算操作可以避免所有重复操作,从而显着降低云计算成本,特别是对于偶尔运行且永远不会真正堵塞空调服务器机房的旧服务器。当然,所有这些便利都有隐性成本。如果您想离开或将您的代码移动到另一个站点,您可能被迫重写大部分堆栈。这些API是不同的,虽然在JavaScript等流行语言中有一些标准化,但它们非常接近专有技术并被锁定在供应商中。为了了解无服务器计算的吸引力,我花了一些时间构建一些功能并围绕堆栈进行探索。我没有写太多代码,但这是关键。我花了更多时间单击按钮和输入Web表单来配置所有内容。您还记得我们使用XML和JSON来配置所有内容吗?现在我们填写一个网络表格,云为我们完成。不过,您必须像程序员一样思考,才能了解幕后发生的事情以及您无法控制的事情。AWSLambdaAWSLambda正在成长为亚马逊整个云的shell脚本层。这是一个基本系统,允许您嵌入响应AWSIaaS可能生成的几乎任何事件的函数。如果一个新文件上传到S3,你可以让它触发一个函数并做一些有趣的事情。如果某些视频正在由AmazonElasticTranscoder转码,您可以等待Lambda函数在转码完成后被触发。这些功能反过来可以触发其他Lambda操作,或者可能只是向某人发送更新。您可以使用JavaScript(Node.js)、Python、Java、C#和Go编写Lambda函数。鉴于这些语言可以嵌入到许多其他语言中,运行其他代码如Haskell、Lisp甚至C++是很有可能的。编写Lambda函数通常比您预期的要复杂,因为Amazon提供了许多配置和优化选项。虽然从技术上讲,您只需编写几行代码就可以做出很棒的事情,但我觉得我必须分配更多时间来配置代码的工作方式。大多数工作是通过在浏览器中填写表格而不是输入文本文件来完成的。有时感觉就像我们只是将文本编辑器换成了浏览器表单,但这是为保留亚马逊向Lambda用户提供的所有灵活性所付出的代价。其中一些额外的步骤是由于亚马逊向用户提供了更多的选择,并期待更多的黑客函数编写者。在Google或Microsoft编写功能后,我可以将浏览器指向正确的URL并立即对其进行测试。Amazon让我点击配置API网关并在防火墙中打开正确的漏洞。借助AWSLambda配置页面,您可以点击触发功能的事件源和更多事件的目标。***,所有这些点击都添加了一层手持工具,使工作比从文本文件开始更容易一些。当我创建一个函数时,浏览器有一个警告,“这个函数包含外部库”。Amazon还有许多其他选择,例如AWSLambda“无服务器计算”,如果无服务器计算意味着减轻您的服务器管理工??作的话。它具有弹性工具,如AmazonEC2AutoScaling和AWSFargate可以启动和关闭服务器,以及AWSElasticBeanstalk可以将您上传的代码部署到Web服务器并处理负载平衡和扩展。当然,对于这些自动化工具中的许多,仍然有创建服务器映像的责任。更有用的产品是AWSStepFunctions,这是一种无代码流程图工具,用于创建状态机以模拟软件架构师称为工作流的模式。部分问题在于所有无服务器功能都是完全无状态的,当您执行非常基本的业务逻辑时它工作正常,但当您让几个客户浏览列表或流程图时可能会有点噩梦。您经常去数据库重新加载有关客户端的信息。步骤函数将Lambda函数与状态粘合在一起。GoogleCloudFunctions和Firebase如果您的目标是消除配置服务器的麻烦,GoogleCloud提供了许多服务,这些服务提供各种自由,无需root密码,甚至无需使用命令行。从2008年的GoogleAppEngine开始,Google一直在慢慢添加不同的“无服务器计算”选项,这些选项具有消息传递和数据透明度的各种组合。名为GoogleCloudPub/Sub的用户隐藏了消息队列,因此您只需对数据生产者和消费者进行编码。GoogleCloudFunctions为许多主要产品提供事件驱动的计算,包括某些选取框工具和API。然后是GoogleFirebase,这是一个将JavaScript代码混合到数据存储层的数据库,该数据存储层将数据传递给客户端。其中,Firebase是我最感兴趣的一个。有些人认为数据库是原始的无服务器计算应用程序,抽象出数据结构和磁盘存储的繁琐工作,通过TCP/IP端口传递所有信息。Firebase通过添加JavaScript代码和消息传递来执行您可能希望对服务器端基础设施执行的任何操作,包括身份验证,从而将这种抽象发挥到极致。从技术上讲,它只是一个数据库,但它处理堆栈的大部分业务逻辑和消息传递。你真的可以摆脱一些客户端HTML、CSS、JavaScript和Firebase。您可能会想将Firebase的JavaScript层称为Oracle之类的“存储过程”,但这样做会忽略全局。Firebase代码是用JavaScript编写的,因此它将与本地版本的Node.js一起运行。您可以将大部分业务逻辑嵌入这一层,因为Node世界已经充满了处理此工作流的库。另外,您将享受在客户端、服务器和现在的数据库上运行同构代码的乐趣。引起我注意的部分是Firebase中内置的同步层。它将跨网络从数据库同步对象副本。诀窍是您可以将客户端应用程序设置为订阅相关数据(并且仅相关数据)更改的另一个数据库节点。如果数据在一个地方发生变化,那么它就会在所有地方发生变化。您可以避免所有消息传递的麻烦,并专注于将信息写入Firebase,因为Firebase会将其复制到需要的位置。GoogleFirebase提供了一个错误控制台,显示了好事和坏事的时间线。您无需专注于Firebase。更基本的GoogleCloudFunctions是将自定义代码嵌入GoogleCloud的更简单方法。目前,CloudFunctions在很大程度上只是编写将在预配置的Node环境中运行的Node.js代码的一种选择。虽然谷歌云平台的其余部分支持多种语言——从Java和C#到Go,但Python和PHP云函数严格限于JavaScript和Node.js。有迹象表明其他语言选项即将推出,如果它们很快出现我也不会感到惊讶。GoogleCloudFunctions不像AWSLambda,至少在这一点上是这样,当我探索构建一个与GoogleDocs交互的函数时,我发现我可能必须使用RESTAPI并将代码写入一个名为AppsScript的应用程序。换句话说,GoogleDocs世界有自己的RESTAPI,长期以来一直是无服务器的。值得注意的是,GoogleAppEngine继续保持强劲势头。它开始为访问网站的任何人提供启动Python应用程序的服务,但多年来已经扩展到处理许多不同的语言运行时。将您的代码捆绑到可执行文件中后,AppEngine会处理启动足够多的节点来处理流量的过程,并在您的用户发送请求时向上和向下扩展。有几个障碍需要牢记。与云函数一样,您的代码必须以相对无状态的方式编写,并且每个请求都必须在有限的时间内完成。但是AppEngine不会丢弃所有props,也不会忘记请求之间的所有内容。AppEngine是无服务器革命的重要组成部分,对于那些使用Python、PHP、Java、C#或Go以老式方式构建自己的堆栈的人来说,它仍然是最容易访问的。MicrosoftAzureFunctions当然,Microsoft和其他所有人一样努力工作,以确保人们可以使用Azure云来完成所有这些聪明的无服务器计算。该公司创建了自己的基本功能AzureFunctions,并构建了一些更复杂的工具,半程序员更容易使用。也许微软可能拥有的最大优势是它的Office应用程序集合,以前的桌面可执行文件正在缓慢但稳步地迁移到云端。事实上,一项云计算收入的计算使微软领先于亚马逊,部分原因是将其部分Office收入计入了“云计算”。AzureFunctions文档中的最佳示例之一展示了将电子表格保存到OneDrive时如何触发云函数。突然,云中的小精灵苏醒过来,在电子表格中做点什么。对于喜欢Excel电子表格(或其他Office文档)的IT支持团队来说,这绝对是天赐之物。他们可以编写AzureFunctions来做几乎任何事情。我们通常认为HTML和Web是云的唯一接口,但没有理由不能像MicrosoftWord或Excel这样的文档格式。AzureLogicApps作为一种工具引起了我的注意,它让你无需担心语义和语法即可填写表单。您仍然需要像程序员一样思考并就抽象和数据做出明智的决定,但您可能会说服自己您不是在像填写表格那样编写“代码”。MicrosoftAzure的WebIDE允许您编写Azure函数,运行它并通过插入日志调用来调试它。与亚马逊的StepFunctions一样,LogicApps旨在对“工作流”进行编码,这是一个比普通“函数”复杂得多的流行词,这要归功于某些状态的可用性。您仍然可以以类似流程图的方式编写链接各种功能和连接器的逻辑,但您不会用官方计算机语言拼写出来。LogicApps的一大优点是预建的“连接器”可以深入到一些较大的Microsoft和第三方应用程序中。您可以高效地从SalesApp、Twitter和Office365等逻辑应用程序推送或拉取数据。这些连接对企业IT人员来说非常有价值,他们现在可以编写逻辑应用程序来与外部工具交互,就像他们创建shell脚本一样。Azure的另一个有趣方面是AzureCosmosDB,它既是NoSQL数据库又是SQL数据库。Microsoft已经复制了Cassandra和MongoDBAPI,这样您就可以在不重写Cassandra或MongoDB代码的情况下输入和输出信息。或者,如果您想编写SQL,您也可以这样做。CosmosDB保持一切正常并为所有内容编制索引以保持其快速运行。如果您有大量要协作的SQL和NoSQL代码,这会使它成为一个有趣的中心链接。或者,也许您只是想在未来打开通往不同方法的大门。无服务器计算比较哪种无服务器计算平台适合您?在这三个孤岛中编写基本函数几乎相同,但也存在差异。最明显的可能是可用的语言,因为每种语言在完成对Node.js和JavaScript的支持后都会受到青睐。可以为Microsoft的Azure编写C#并不奇怪,但它对F#和TypeScript的支持是一流的。亚马逊使用Java、C#和Python。Google目前的基础功能严格限于JavaScript,但在AppEngine中支持更多语言。比较无服务器计算最困难的部分是处理价格和速度,因为隐藏在幕后的东西太多了。当我按小时定价虚拟机时,我常常觉得自己是个疯狂的消费者。供应商现在把意大利腊肠切得很薄,你只需不到一美元就可以获得数十万个函数调用。当然,这种明显的便宜很快就会压倒我们大脑中理性的、精打细算的部分,就像我们在一个货币差异很大的陌生国家度假时所做的那样。不久之后,您将订购另一个数据库数百万次,就像您在坎昆购买一杯葡萄酒时所做的那样,因为您无法足够快地分配来确定其真实成本。当云计算推出原始虚拟机时,您可以猜测内存和CPU的能力,但在无服务器计算的世界中,您真的不知道发生了什么。值得注意的是,无服务器计算模型几乎迫使您将数据存储在本地云数据库中,因为您实际上不允许在代码中保留任何状态。您必须信任这些后端。您的函数必须在没有任何本地缓存或配置的情况下运行,因为总是会创建和销毁其他版本。因此,数据库胶水代码会像“怪奇物语”中那些倒挂的藤蔓一样填充您的代码。比较成本的唯一真正方法是在所有平台上构建应用程序,这是一项艰巨的挑战。可以在这三者之间移动一些代码,因为它们都运行Node.js,但即便如此,您仍然需要忍受差异。(例如,您在Microsoft和Google中直接处理HTTP请求,但在AWS中通过API网关处理。)好消息是您无需如此偏执。在我的实验中,许多基本应用程序几乎不使用任何资源,您可以免费提供所有这三个好处,以吸引贫穷的开发人员。无服务器计算模型确实为我们节省了开销。除非您是那种始终以接近满负荷运行服务器并获得免费空调的类型,否则您很可能会通过无服务器最终节省一些大笔资金。您将节省如此多的钱,以至于您不会争论每百万次通话是1美元还是1.50美元。还有一个更深层次的问题。如果你受够了这些云,那你就有麻烦了。这不是很容易,只需将代码摘下来并在其他地方的商业服务器上运行即可,您可以使用装满您自己的代码的Docker容器来完成。如果幸运的话,您可以复制相同的原始架构和基本的JavaScript函数,但在那之后,您将在所有地方重写数据库胶水代码。这三个公司都有自己专有的数据存储层。目前还不清楚当出现问题时会发生什么。运行自己的服务器意味着当它不工作时让你的老板窒息你的脖子。目前尚不清楚该地区会发生什么。Google页面包含此良性警告,“这是GoogleCloudFunctions的测试版。此API可能会以不兼容的方式进行更改,并且不受任何SLA或弃用政策的约束。“亚马逊的服务条款比他们刚进入这个领域时更好,但它们仍然包含要牢记的警告,例如“我们可能会在提前30天通知的情况下删除您的任何内容,并且不承担任何责任上传到AWSLambda,如果不超过三(3)个月。“确保你的代码在你想要保留它的地方运行。像这样的警告当然是公平的(我知道我的旧Lambda函数将不再使用),但它表明你可以如何放弃一些控制权。MicrosoftforAzure服务附带服务水平协议,承诺通过服务积分对停机时间进行经济补偿。这些是否适用于您的功能退化?也许——只要您不在服务的某些测试区域徘徊。值得花点时间如果您要设置比儿童聊天室更重要的任务,请注意这些细节。