每年应用软件工程行业单厢出现数百种新工具和新态势。现在我早已有一两年了,我想我应该继续发表许多预估,类似两个松讷的声纳:甚么样态势将对甚么样态势产生长久影响,甚么样态势会失败。能肯定的是,我早已做出了许多更让人难堪的预估,例如:曾和我的两个朋友赌说 Git 会败给 Mercurial,因为 Git 的使用者新体验太可悲了。他们都知道结果怎样。VPS
但总体而言,我认为我非常清楚甚么样控制技术将正式成为输家,甚么样控制技术将正式成为输家。当谈及无服务项目器排序时,我不须要使用任何专业技能。
等等,你在说甚么?
是的,你没弄错。无须Haveri就能看见无服务项目器排序是未来。没有人愿意管理工作服务项目器。管理工作服务项目器是想继续执行标识符的两个难以启齿的过敏反应。我须要两个安全的自然环境来运转标识符,因此由于他们的排序都如前所述「冯诺圣马蒂构架」,我须要许多缓存、许多硬盘空间和两个CPU。只要我有足够多的小东西,那些小东西采取甚么形式女团起来运货应用软件并不重要。我的销售业务标识符须要这二者中的一部分,因此我须要两个自然环境来代销那些销售业务应用软件。就这么简单。VPS
我希望实现这一点并不意味着我想管理工作服务项目器VPS或它所运转的自然环境。理想情况下,就要去找云服务项目供应商并说:「这是我的插件,麻烦事帮我运转它。」
甚么是无服务项目器?
在他们开始之前,让他们一起来了解一下无服务项目器到底是甚么。你会看见许多无服务项目器的表述,说它根据须要提供更多排序能力。虽然这是两个单纯的表述,但更常见的更广泛的表述是:它是以一种不须要您考虑管理工作服务项目器的形式提供更多排序能力的形式。
无服务项目器云排序产品形态
无服务项目器罐子
Heroku、Netlify、AWS ECS/EKS Fargate、google Kubernetes Engine 和 Azure Kubernetes Service 等无服务项目器罐子服务项目为您提供更多了两个自然环境,您能在当中构筑罐子并将其发送到管理工作罐子布署和继续执行的服务项目中。您无须担心运转代销您的控制服务项目器、结点服务项目器等资源怎样女团为软件产业,您只需发送两个包涵许多元数据的罐子,其余的网络管理任务交予服务项目供应商平台处理。VPS
无服务项目器表达式
AWS Lambda、Google Cloud Functions 或 Azure Functions 等无服务项目器表达式是提供更多应用软件运转自然环境的服务项目,您能在当中发送具有某一USB的标识符块,然后再初始化该标识符。VPS
无服务项目器与虚拟机
许多人不认为无服务项目器罐子是真正的无服务项目器,因为当您构筑和发送罐子时,您实际上是将整个服务项目器捆绑在两个漂亮的应用软件包中。虽然我倾向于同意它们不是「真正的」无服务项目器,但与运转完整的虚拟机相比,它们绝对具有巨大的优势,因此在某些情况下与无服务项目器功能相比具有明显的优势。
无服务项目器罐子的优点VPS
与传统服务项目器相比,无服务项目器罐子有很多优势。这里有几个:
很少的服务项目器管理工作—— 无须管理工作、修补或排除故障的服务项目器。您仍然在罐子内有两个操作系统,但这可能是两个非常小的安装,因此须要你亲自管理工作的系统依赖对比(虚拟)服务项目器要小得多。
通常是无状态的VPS—— 在构筑为罐子设计的插件时,您通常会构筑两个「12 要素插件」或遵循类似的模式。你的罐子是牛,不是宠物。如果您的罐子崩溃,则会自动启动两个新罐子。
轻松的水平可扩展性—— 虚拟机本身在可扩展性方面没有任何限制,但罐子将您推向两个方向,允许无服务项目器罐子服务项目根据须要轻松扩展您的应用软件。根据负载、时间和请求计数等因素,无服务项目器罐子服务项目能运转两个罐子实例或 10,000 个罐子实例,同时透明地处理存储分配、负载平衡、路由等。
安全性VPS—— 安装在罐子中的操作系统通常是短暂的、非常小的,有时是只读的。因此,与典型的通用和长期服务项目器自然环境相比,它的可进行网络攻击的总面积要小得多。
源标识符控制自然环境—— 您的罐子表述在能放入源标识符控制的文件中进行描述。虽然这在当今几乎任何情况下都是最佳实践,但与传统的服务项目器自然环境相比,它仍然是两个明显的优势,在传统服务项目器自然环境中,别人时不时还能登录进入并更改服务项目器配置导致意外的配置不一致。
插件和自然环境捆绑VPS—— 您将插件与其运转的自然环境结合起来,并将其布署为两个单元。这样,如果您的应用软件的新版本使用更新的库、操作系统版本或新的语言版本,它都能作为两个单元进行布署和回滚。
成本—— 您能轻松地向上和向下扩展工作负载。虽然运转无服务项目器罐子可能会贵许多,但通过许多服务项目平台工具协助,您能在灵活性上获得弥补。与传统的虚拟机选项相比,无服务项目器罐子通常为您提供更多更大的灵活性,能将资源分割成更小的单元。例如,两个 EC2 T3 nano 实例提供更多 2 个 vCPU,但您能请求两个只有 0.25 个 vCPU 的罐子。
云主机、VPS、挂机宝、游戏服务项目器上永恒云
无服务项目器表达式云的优点VPS
无服务项目器表达式云排序具有无服务项目器罐子的所有优点,但将其提升到另两个层次。
几乎零管理工作—— 在大多数情况下,您根本不须要考虑操作系统。您能将标识符向上发送,然后运转它。在操作系统级别没有甚么须要修补,也没有甚么须要维护 —— 只需发送并忘记它。
默认情况下是无状态的VPS—— 无服务项目器表达式迫使你以无状态的形式编写标识符,因为你不能依赖不同的初始化之间留下的任何小东西。这使得它们能轻松扩展,因为您的表达式能在任何服务项目器上启动,而无须依赖于本地状态。
几乎完美的水平可扩展性—— 某些小东西会初始化你的表达式,然后它就会运转。如果它被初始化一次,那么它运转一次。如果它被初始化 100,000 次,那么它会运转 100,000 次。当然,有许多平台限制可能会发挥作用,但那些通常是防止您意外花费 10,000 美元的保障措施,而不是平台的限制。
成本VPS—— 无服务项目器表达式排序仅在继续执行时才会计费和扣费。因此,如果您的功能很少继续执行或者非常突发,您能节省大量云排序费用。
无服务项目器罐子与无服务项目器表达式
无服务项目器罐子的优势
轻松迁移—— 如果你有两个现有的插件,它可能须要运转许多排序任务,但你能让它在罐子内运转。
稳定的工作负载且更便宜—— 如果你有两个一致的工作负载,那么无服务项目器罐子可能会比无服务项目器表达式的等效初始化更便宜。
灵活性VPS—— 您的操作系统、二进制文件、语言、版本等没有任何限制。您能控制整个罐子。无服务项目器表达式服务项目将限制您使用某一的运转时和版本。许多无服务项目器表达式服务项目允许自表述运转时,但您仍将被锁定在操作系统中。
故障排除—— 罐子让您能轻松进入并排除实时自然环境中发生的问题。它们还允许您在本地运转大部分自然环境,从而更容易调试正在发生的事情。
长时间运转的任务VPS—— 无服务项目器罐子是始终运转的,最适合长时间运转排序任务。大多数无服务项目器表达式单厢对表达式的继续执行时间有限制。例如,在撰写本文时,AWS Lambda 有 15 分钟的限制。
无服务项目器表达式的优势
降低突发工作负载的成本—— 无服务项目器表达式是按初始化付费的,这意味着您只需在标识符实际继续执行时付费。这意味着对于不经常运转的工作负载,与典型的服务项目器或罐子相比,它们能便宜得多。
快速扩展—— 无服务项目器表达式服务项目能创建两个新的表达式实例,并在几秒钟内(有时只需几分之一秒)就能为流量提供更多服务项目。这有一定的限制,您能在下面的「扩展无服务项目器表达式」部分中看见有关那些限制的更多讨论。
细粒度的可扩展性VPS—— 假设你有两个由几十个不同的无服务项目器表达式组成的插件,当中两个表达式的初始化次数是其它表达式的 1000 倍。该功能将独立于您的其它功能进行缩放,您甚至无须考虑它。
无服务项目器罐子的缺点
更重的布署VPS—— 无服务项目器罐子通常须要两个大的构筑步骤,然后您必须将数百兆字节的罐子发送到您在云端的存储库。然后你必须在你的软件产业中布署你的罐子,如果你有大型布署,这可能须要一两年。这个周转时间比推动单个云表达式并在几秒钟内启动并开始服务项目请求要长得多。
粗略的可扩展性VPS—— 当你布署两个无服务项目器表达式时,你实际上只是布署了两个表达式。该表达式能继续执行多项任务,但通常您正在布署两个单一用途的表达式,该表达式能独立于所有其它表达式进行扩展。当您布署无服务项目器罐子时,您通常会布署整个插件或微服务项目。该插件或微服务项目中的所有功能都将布署到单个罐子中,因此为了扩展它,您必须启动该罐子的更多实例。这意味着整个应用软件模块都能作为两个单元进行扩展。如果您的部分插件突然出现大量访问,那么您必须扩展整个模块以增加您能服务项目的流量。
无服务项目器表达式云的缺点
缺乏控制—— 有人管理工作你的标识符运转的服务项目器。您的标识符在操作系统中运转,而不是您能控制的操作系统。
重写—— 使用现有插件并使其在无服务项目器功能中运转通常是不可能的。您几乎总是必须从头开始编写插件才能利用无服务项目器功能。
可追溯性VPS—— 无服务项目器功能与微服务项目具有相同的挑战,但被带到了极端。在您的系统中跟踪单个请求可能涉及数十个无服务项目器表达式。您须要确保使用 AWS X-ray、Google Cloud Trace 或 Azure 中的 Distributed Tracking 等工具。
调试/测试VPS—— 您能使用无服务项目器、Google Function Framework 或 AWS SAM 等工具在本地排序机上相当轻松地运转云表达式,但获得真实的初始化和反馈可能是两个挑战,因为云表达式通常以自动化和专有的形式与云生态系统集成。此外,AWS step 表达式等服务项目在 lambda 之间引入了两个编排层,这会使调试实时自然环境中发生的情况变得更加困难。
布署—— 无服务项目器表达式的布署可能是两个挑战,但主要是因为它们提供更多了鼓励不良行为的工具(如 IDE)。使用无服务项目器框架能使您的布署自动化和可管理工作,但您须要确保您努力维护好标识符设置并保持其井井有条,否则版本控制和维护数十或数百个表达式将正式成为真正的痛苦。
扩展无服务项目器表达式(应用软件)
在这里扩展无服务项目器表达式须要额外注意,因为人们通常认为 AWS Lambda 或 GCP Cloud Functions 等工具是可扩展性的灵丹妙药。他们假设您只需提升您的云表达式并获得几乎即时的可扩展性。但这远非事实。那些无服务项目器表达式服务项目使扩展变得非常容易,但平台存在许多限制,那些限制会影响表达式的扩展速度和规模。VPS
如前所述此,您可能认为您只需初始化 AWS 客服并请求将并发初始化增加到 20,000 个,然后您能将一堆请求发送到您的 Lambda 表达式并让它快速扩展到该级别以满足您的需求服务项目。不幸的是,这种情况并非如此。
即使在获得 AWS 客服支持以将您的并发初始化限制增加到 20,000 之后,AWS Lambda 仍会将您限制为每分钟 500 个额外的并发初始化,这意味着如果您从零开始,将须要将近 40 分钟才能扩展到 20,000 个并发初始化能力。同时,所有无法定向到运转中的表达式的访问请求都将收到 429 错误。VPS
如果您的流量须要更多的并发扩容服务项目,您能购买亚马逊所谓的「预配置并发」。这将使一定数量的 Lambda 表达式保持活跃并随时可用,但随后您将放弃无服务项目器表达式的许多好处,因为您须要为保持它们始终运转而付费。但是,在某些情况下,这是值得权衡的。
还有人担心单个表达式会耗尽某一区域可用的所有并发服务项目资源。您能为某一表达式配置「保留并发」,以确保它们的并发不会被其它表达式完全消耗。但是,假设您的总并发数为 5000,因此您将表达式的保留并发数设置为 1000,那么您将只剩下 4000 并发数用于该区域中的其余表达式。VPS
虽然当中许多设置对于提供更多安全和可用的应用软件运转自然环境是必要的,但它能让刚接触无服务项目器表达式的开发者们感到意外。
供应商锁定
像 Knative 这样的项目在创建标准自然环境方面取得了进展,公司能使用该自然环境来布署无服务项目器工作负载,但一般来说,您必须布署和管理工作平台本身才能获得好处。这能消除以无服务项目器形式运转标识符的许多好处。目标是避免运转基础设施,对吗?我应该提一下,您能通过 Google Cloud Run 获得对 Knative 的原生支持,因此通过许多努力,您能在 AWS Fargate 上运转 Knative。VPS
你为啥反对无服务项目器表达式云排序?
听起来他们不喜欢无服务项目器表达式排序,但事实并非如此。他们只是认为它们的用途比无服务项目器罐子更有限。在某些用例中,无服务项目器表达式是完美的解决方案。更让人惊讶的是,这通常是您须要与底层云平台进行强大集成的时候。假设您要将图像上传到 S3,并让它自动触发以某种形式处理它的云功能;或者您有来自 Cloudwatch 等日志服务项目的日志数据,因此您想一段标识符来轻松分析日志流。那些都是无服务项目器功能真正展示其价值的场景。它们也适用于您拥有少量热端点的地方,您希望以不同于插件的其它部分的形式进行排序能力扩展。VPS
无服务项目器排序的终极理想
无服务项目器排序的终极理想是真正的「普适排序」。当我须要它们时,我的所有资源都可用,因为我须要它们。能够上传一大段标识符(无论是单个表达式还是整个插件)以及许多元数据,并让它以允许无限扩展的形式运转(有许多安全限制)。根本无须考虑它须要多少缓存、存储或排序,它只是自动排序出来。无服务项目器表达式实际上比无服务项目器罐子更接近这一理想,但由于上述原因,它们仍然没有达到这个终极理想。VPS
无服务项目器云排序,已成熟
请不要将这篇文章解释为:我认为无服务项目器表达式或罐子服务项目尚未准备好,并适合现实世界中投产使用。对于大多数组织来说,运转服务项目器对他们来说应该与自己能发电一样重要(许多大型组织须要两者都用!)。使用无服务项目器云排序,您的标识符仍在某处的服务项目器上运转,而不是您必须关心的服务项目器。这确实应该是大多数组织的长期目标,能够将一大块标识符发送到服务项目平台并让它运转。无服务项目器排序还不能完全实现「VPS发送即忘」的标识符更新梦想,但他们正在接近这个梦想。
无服务项目器排序早已到来,因此将继续存在。他们将继续看见无服务项目器服务项目越来越接近本文描述的理想状态。但是,尽管 Serverless 确实早已长大,但他们还有很长的路要走。为了真正实现无服务项目器排序的理想,他们须要重新思考当前的排序和安全模型。虽然挑战很大,但回报更大,所以他们可能会比他们想象的更快到达那里。
永恒云出品