你是否能读懂分布式系统开发实战:Serverless的架构原则?

Serverless架构原则

Peter Sbarski和Sam Kroonenburg合著的Serverless Architectures onAWS一书中总结了Serverless架构的以下5个原则,运用这些原则可以帮助我们在构建Serverless架构应用时做出正确的决定。

  • 根据需要使用计算服务执行代码(没有服务器)。

  • 编写单一用途的无状态函数。

  • 设计基于推送的、事件驱动的管道。

  • 创建更粗实、更强大的前端。

  • 拥抱第三方服务。

接下来详细地分析每一个原则。
你是否能读懂分布式系统开发实战:Serverless的架构原则?_第1张图片

根据需要使用计算服务执行代码

Serverless架构是SOA概念的自然延伸。在Serverless架构中,所有自定义代码作为孤立的、独立的、一般是细粒度的函数来编写和执行。

这些函数在AWS Lambda之类的无状态计算服务中运行。开发人员可以编写函数,执行几乎任何常见的任务,比如读取和写入数据源,调用函数以及执行计算。在比较复杂的情况下,开发人员可以构建更复杂的管道,编排多个函数的调用。可能会有这种场景:仍需要服务器来处理某个任务。然而,这种情况并不多见,作为开发人员,我们应该尽量避免运行服务器并与之交互。

编写单一用途的无状态函数

作为软件工程师,我们在设计函数时应该尽量着眼于单一职责原则。单单处理某一项任务的函数更容易测试、运行更稳定,而且带来的错误和意外的副作用比较少。以一种松散编排的方式将函数和服务组合起来,我们照样能构建易于理解、易于管理的复杂后端系统。拥有明确定义的接口的细粒度函数也更有可能在无服务器架构里面被重复使用。

为Lambda等计算服务编写的代码应该以无状态方式来构建。它不得假设本地资源或进程会在当前的会话之后保存下去。无状态性功能很强大,因为它让平台得以迅速扩展,以处理数量不断变化的入站事件或请求。

设计基于推送的、事件驱动的管道

可以构建满足任何用途的无服务器架构。系统可以一开始就构建成无服务器,也可以逐步重新设计现有的整体单一式应用程序,以便充分发挥这种架构的优势。最灵活、最强大的无服务器设计是事件驱动型的。

构建事件驱动的、基于推送的系统常常有望降低成本和复杂性(我们不需要运行额外代码来轮询变更),可能让整个用户体验更流畅。不言而喻,虽然事件驱动的、基于推送的模式是个美好的目标,但它们并非在所有情况下都是适当的或可以实现的。有时候,我们不得不实施一个Lambda函数来轮询事件源或按时间表运行。

创建更粗实、更强大的前端

有必要记住这一点,在Lambda中运行的自定义代码应该快速执行。较早终结的函数较“便宜”,因为Lambda的定价基于请求数量、执行时间段以及分配的内存量。在Lambda中要处理的事务比较少、比较“省钱”。此外,拥有调用服务的更丰富的前端有利于实现更好的用户体验。在线资源之间更少的环节和缩短的延迟会让人觉得应用程序的性能和可用性更好。

数字签名的令牌让前端可以与不同的服务(包括数据库)直接进行通信。相比之下,在传统系统中,所有通信经由后端服务器来实现。让前端与服务进行通信有助于减少创建环节、尽快获得所需的资源系统。

然而,不是一切服务都可以或者都应该在前端执行。有些私密信息无法交给客户端设备来处理,比如,信用卡或向用户发送电子邮件只能由不受最终用户控制的服务来完成。在这种情况下,就需要计算服务来协调动作、验证数据,并实施安全。

另外要考虑的重要一点是一致性。如果前端负责写入多个服务,可是中途出现故障,就会导致系统处于不一致的状态。在这种情况下,应该使用Lambda函数,因为它可以从容地处理错误,重新尝试失败的操作。一致性在Lambda函数中实现起来和控制起来比在前端容易得多。

拥抱第三方服务

如果第三方服务能提供价值、减少自定义代码,自然欢迎它们加入。如今,开发人员可以充分利用许多服务,从用于验证的Auth0服务,到用于支付处理的Stripe或Braintree服务,不一而足。只要考虑到价格、性能和可用性等因素,开发人员就应该试着采用第三方服务。开发人员花时间解决其领域独有的问题要比重复构建别人已经实施的功能有意义得多。如果已有了切实可行的第三方服务和API,别纯粹为了构建而构建,应站在“巨人的肩上”达到新的高度。

本文给大家讲解的内容是分布式系统开发实战:Serverless架构原则

写在最后

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
在这里插入图片描述

码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!

你可能感兴趣的:(java,编程语言,大数据,数据库,并发编程)