构建更好的整体(使用WebAssembly)

2020-12-09 19:33:48

当您听说一家公司经营着一家大公司时,您可能会认为他们过时了,他们必须在扩展方面遇到麻烦,对吧?我在这里告诉您,有些人(包括我自己)认为整体对于许多团队来说都很棒。话虽如此,技术已经进步了,我真的认为现在是时候用一种新的方法重新审视整体。

如果您不熟悉后端开发,那么Monolith就是作为一个东西运行的服务器端系统。它是一个单个程序,可以启动,处理一些网络请求,然后终止。巨石的替代品包括面向服务的体系结构(SOA),微服务,无服务器功能,可能还有一些我从未听说过的功能。这些方法中的每一种都有其时间和地点,我向任何做出过明智决定以这种模式构建系统的人致敬。我认为,大量的Web应用程序和服务可以通过整体组件很好地服务....,但需要进行一些升级。

替代设计模式背后的理由非常合理。通过在许多不同的“事物”之间分配工作,您可以使系统作为一个整体来处理更多的事情。众所周知,这样做会引入更多的复杂性,这需要更多的精力,因此通常需要更多的人力和金钱。我看到的一个可能的例外是无服务器功能,确实确实简化了许多事情,但其缺点是测试更加困难,对供应商的依赖性更高,或者需要使用非商品工具。如果做得正确,那么额外的努力将导致一个功能强大的系统,其收益确实是非凡的。经典的例子是Netflix,他们自己做得很好。

如果整体难于扩展,而微服务太复杂,那么您如何设计一个可以随流量和开发团队进行扩展而又不致于难以操作,维护和扩展其功能的系统?在过去的几年中,很明显需要中间立场。我并不希望这个解决方案能为所有人所用,但是大多数产品并不能提供真正使微服务值得的流量。

在深入探讨SUFA的核心之前,我要提到这不是一种全新的思维方式。多年来,诸如演员模式,新独石等事物都规定了一些类似的想法,而SUFA只是将多个概念组合成一种简单的设计模式的一种方式。那是什么

使用SUFA设计的系统可以在最简单的部署方案中运行。自动缩放组已经存在很长时间了,容器编排系统使它们变得更加容易。 SUFA系统可以在一个ASG上运行,也可以通过服务网格进行扩展以允许功能组(我们将在以后的文章中讨论)。

SUFA系统不是作为一个要部署的东西而存在的多个服务,而是作为一个可部署的系统而存在。这可以是Docker映像,AMI或其他一些工件,但是只需要构建一件事。它应该由CI / CD以连续或带标记的发布节奏构建,并且应该在工件注册表(例如Docker注册表或S3存储桶)中可用。

标准的整体组件可能包括处理程序层,该处理程序层负责接收API请求并调用业务逻辑或数据存储层以处理这些请求。 SUFA系统通过将一系列功能链接在一起来处理请求,每个功能完全独立并且彼此之间不知道。函数应该期望一个特定的输入,执行一些操作,并产生一个输出,该输出将传递到更下游的函数中。这些功能应该易于在不同情况下进行测试和重用(例如针对不同的API请求)。 SUFA系统还应设计为使用和产生基于事件的流量作为主要的通信方法。

好吧,这似乎应该很简单,但是在SUFA设计中,“应用程序”具有非常特殊的含义。 SUFA系统应该服务于一个单一的应用程序,这意味着它应该包含完整产品所需的所有功能。这可以通过某种解释来解决(例如,即使公司具有不同的产品领域,一家公司是否应为整个业务使用一个SUFA),但关键是要避免在一个应用程序中使用多个“事物”。如果功能需要在多个应用程序之间共享,则构成SUFA系统的功能应易于重用,并可以用于其他目的。

您会注意到,这完全与技术无关,与供应商无关。 SUFA旨在跨越各种语言,云供应商和部署环境。 SUFA是一种设计可测试,可扩展且安全的服务器端系统的方法。您会注意到我还没有谈到可扩展性,所以让我们讨论一下

允许SUFA系统扩展的关键因素是它由独立的功能组成。 SUFA系统应依靠底层框架来协调这些功能的执行,以便可以有效扩展。通过使用函数运行器或作业调度程序运行所需的函数,SUFA框架可以抽象出函数的执行方式,而编写代码的程序员只需指示要运行的函数以及运行的顺序即可。

功能组和网格提供了额外的可伸缩性,我计划为其编写后续文章,因为值得对其进行详细探讨。

SUFA模式是与Atmo协同设计的,Atmo是可以构建SUFA系统的多合一框架。 Atmo使用称为' Directive'的文件描述应用程序的所有方面,包括如何链接功能以处理请求。您可以使用多种语言来编写函数,以便在Atmo上运行,因为它是使用WebAssembly模块作为计算单位而构建的。 Atmo将自动扩展以处理您的应用程序负载,并包括各种工具和内置的最佳实践,以确保您获得最佳性能和安全性而无需再次编写任何样板。

开源的Suborbital Development Platform利用WebAssembly的强大功能和SUFA背后的设计思想,引入了一种构建Web应用程序的新方法。我已经为实现这一目标进行了一年多的努力,到目前为止,我对结果非常满意。驾驭诸如JAMStack和边缘计算之类的新技术和新实践浪潮,意味着我们有机会将新旧软件的精华带给下一代软件制造商,以完成令人难以置信的事情。希望您能加入我的行列!

如果您想谈论SUFA设计或Suborbital项目,请访问Twitter(@cohix或@SuborbitalDev!