Serverless中微服务的优缺点和最佳实践

本文涉及的产品
简介: Serverless中微服务的优缺点和最佳实践

目录

Serverless中微服务的优势

1. 选择性地可伸缩性和并发性

2. 细粒度的资源分配

3. 松耦合

4. 支持多运行时环境

5. 开发团队的独立性

Serverless中微服务的缺点

1. 难以监视和调试

2. 可能会经历更多的冷启动

3. 其他缺点

Serverless微服务的挑战和最佳实践

1. Serverless中微服务应该是多大

2. 松耦合你的架构

3. 组件隔离

4. 使用并发限制策略

总结


Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。

它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时。

Serverless真正做到了部署应用无需涉及基础设施的建设,自动构建、部署和启动服务。


微服务的概念非常适合Serverless功能的结构,可以轻松实现不同服务在部署和运行时隔离。在数据存储方面,使用诸如DynamoDB之类的数据库,还使得每个微服务都能拥有独立的数据库,并在需要独立扩展它们时变得更加容易。

在我们深入研究细节之前,请考虑微服务对于你的特定项目和团队而言,其好处是否大于其缺点。 请不要因为“微服务是趋势”,就要必须选择它。单体架构(Monolith)也有他的适用场景。


Serverless中微服务的优势

1. 选择性地可伸缩性和并发性

Serverless功能使管理应用程序的并发性和可伸缩性变得容易。在微服务架构中,我们充分利用了这一点,每个微服务都可以根据需要具有自己的并发/可伸缩性设置。

这是有价值的:减轻DDoS攻击的可能性,减少无法控制的云账单的财务风险,更好地分配资源等等。

2. 细粒度的资源分配

通过选择性的可伸缩性和并发性,可以对资源分配优先级进行详细控制。

每个(微)服务可以根据其需求和目的具有不同级别的内存分配。面向客户的服务可以分配更高的内存,因为它将有助于缩短执行时间,提高响应速度。可以通过优化的内存设置来部署对延迟不敏感的内部服务。

存储机制也是如此,DynamoDB或Aurora Serverless等数据库可以根据(微)服务的需求而具有不同级别的容量分配。

3. 松耦合

这是微服务的基本属性,这样它可以使具有不同用途的系统组件更容易解耦

4. 支持多运行时环境

Serverless功能配置,部署和执行的简便性为基于多个运行时的系统提供了可能性。

尽管Node.js是后端Web应用程序中最流行的技术之一,但它不可能成为每个任务的最佳工具。但,对于数据密集型任务,预测分析和任何形式的机器学习,Python可能会成为你的选择。专用平台(例如SageMaker)则更适合于大型项目。

借助Serverless基础架构,在运维方面,你无需再花额外的精力就可以为常规后端项目选择Node.js,为数据密集型选择Python。当然,这将在代码维护和团队管理方面增加一些工作。

5. 开发团队的独立性

不同的开发人员或团队可以在各自的(微)服务上工作,修复错误,扩展功能等。

AWS SAMServerless之类的工具使得在操作方面也具有更大的独立性。 AWS CDK constructs 可实现更大的独立性,而无需牺牲更高级别的质量和运维标准。


Serverless中微服务的缺点

1. 难以监视和调试

Serverless带来的许多挑战中,监视和调试是最有难度的。因为计算和存储系统分散在许多不同节点中,更不用说缓存等的其他服务了。

但是,有专业平台可以解决所有这些问题。

2. 可能会经历更多的冷启动

调用功能时,Lambda会检查microVM是否已激活。如果有空闲的microVM可用,它将用于服务新的传入请求。在这种特殊情况下,没有启动时间,因为microVM已经启动并且代码包已在内存中。这称为 热启动。

相反的方法-必须从头开始提供新的microVM来满足传入的请求-被称为 冷启动。


当FaaS(Function as a Services)平台(例如Lambda)需要启动新的虚拟机来运行功能代码时,就会发生冷启动。如果你的应用对延迟很敏感,则它们可能会出现问题,因为冷启动会在总启动时间中增加几百毫秒到几秒钟。

因为在完成一个请求后,FaaS平台通常会将microVM闲置一段时间,然后在10-60分钟后关闭。因此,函数执行的频率越高,microVM越有可能运行传入的请求(避免冷启动)。

当我们将应用程序分散在数百或数千个(微)服务中时,我们还可能分散每个服务的调用时间,从而导致每个功能的调用频率降低,可能会经历更多的冷启动。


3. 其他缺点

微服务概念本身还具有其他固有的缺点。这些并不是与Serverless固有的联系。尽管如此,每个采用这种架构的团队都应努力降低其潜在的风险和成本:

  • 确定服务边界并非易事
  • 更广泛的攻击面
  • 服务编排开销
  • 同步计算和存储并不容易


Serverless微服务的挑战和最佳实践

1. Serverless中微服务应该是多大

微服务(MicroService)是软件架构领域业另一个热门的话题。如果说微服务是以专注于单一责任与功能的小型功能块为基础,利用模组化的方式组合出复杂的大型应用程序,那么我们还可以进一步认为Serverless架构可以提供一种更加“代码碎片化”的软件架构范式,我们称之为Function as a Services(FaaS)。

而所谓的“函数”(Function)提供的是相比微服务更加细小的程序单元。例如,可以通过微服务代表为某个客户执行所有CRUD操作所需的代码,而FaaS中的“函数”可以代表客户所要执行的每个操作:创建、读取、更新,以及删除。当触发“创建账户”事件后,将通过AWS Lambda函数的方式执行相应的“函数”。从这一层意思来说,我们可以简单地将Serverless架构与FaaS概念等同起来。

在Serverless中,经常会将“Function as a Services(FaaS)”的概念与你所选择的编程语言中的函数语句混淆。

我们正在进入一个无法画出完美界限的领域,但是经验表明,使用非常小的Serverless功能并不是一个好主意。

你应该记住的一件事是,当决定将(微)服务分拆为单独的功能时,你将不得不应对Serverless困境。只要有可能,将相关逻辑保持在单个功能中就会有很多好处。

决策过程也应考虑到拥有单独的微服务的优势。

如果我分拆这个微服务,

  • 这将使不同的团队独立工作吗?
  • 我可以从细粒度的资源分配或选择性可伸缩性功能中受益吗?

如果不是,则应该考虑将该服务与所需的组件等捆绑在一起。


2. 松耦合你的架构

通过组成Serverless功能来协调微服务的方法有很多。

当需要同步通信时,可以进行直接调用(即AWS Lambda RequestResponse调用方法),但这会导致高度耦合的架构。更好的选择是使用Lambda LayersHTTP API,这使得以后可以在不中断客户端请求的情况下,修改或迁移服务成为可能。

对于异步通信,我们有几种选择:消息队列(SQS),主题通知(SNS),Event Bridge或者DynamoDB Streams


3. 组件隔离

理想情况下,微服务不应将实现细节暴露给用户。

诸如Lambda之类的Serverless平台已经提供了隔离功能的API。但这本身就会导致实现细节泄漏,理想情况下,我们将在功能之上添加一个不可知的HTTP API层,以使其真正隔离。


4. 使用并发限制策略

为了减轻DDoS攻击,在使用AWS API Gateway等服务时,请确保为每个面向公众的终端节点设置单独的并发限制策略

此类服务在云平台中具有针对全局并发配额。如果你没有基于端点的限制,则攻击者只需将一个端点作为目标即可耗尽你的资源配额并使整个系统瘫痪。


总结

无论你是迁移旧系统还是从头开始构建某些产品,确保其按预期顺利运行都是一个持续的挑战。在本文中,我们研究了Serverless的优点和缺点,Serverless的微服务挑战和最佳实践等等。


译文链接:https://dzone.com/articles/microservices-and-serverless-winning-strategies-an



相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
407 3
|
1月前
|
运维 Serverless 调度
Serverless 应用引擎常见问题之资源使用完影响服务使用如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
22 0
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
1月前
|
监控 Serverless
函数计算(FC)作为一种无服务器的计算服务,在使用过程中可能会遇到各种问题
函数计算(FC)作为一种无服务器的计算服务,在使用过程中可能会遇到各种问题
21 4
|
3月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
223 7
|
1天前
|
监控 测试技术 持续交付
探索现代微服务架构的最佳实践
【4月更文挑战第25天】 随着软件开发领域不断演进,微服务架构已成为设计灵活、可扩展且高度可维护系统的首选方案。本文将深入探讨构建和部署微服务时的关键最佳实践,涵盖从服务划分原则到持续集成/持续部署(CI/CD)的流程,再到监控与日志记录的策略。我们的目标是为开发者提供一套实用的指南,帮助他们在构建未来的应用程序时做出明智的架构选择,并确保这些系统能够快速响应市场和技术的变化。
|
12天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。
|
25天前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
25天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
27天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
20 1

相关产品

  • 函数计算