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



相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
5月前
|
监控 算法 NoSQL
Go 微服务限流与熔断最佳实践:滑动窗口、令牌桶与自适应阈值
🌟蒋星熠Jaxonic:Go微服务限流熔断实践者。分享基于滑动窗口、令牌桶与自适应阈值的智能防护体系,助力高并发系统稳定运行。
Go 微服务限流与熔断最佳实践:滑动窗口、令牌桶与自适应阈值
|
6月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
348 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
6月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
632 1
日志收集和Spring 微服务监控的最佳实践
|
11月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1662 11
借助 serverless 将 MCP 服务部署到云端
|
11月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
595 12
|
微服务
什么是微服务?微服务的优缺点是什么?
微服务就是一个独立的职责单一的服务应用程序,一个模块 1.优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低 , 扩展性好, 天然支持分库2.缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
弹性计算 人工智能 自然语言处理
魔搭社区与函数计算:高效部署开源大模型的文本生成服务体验
在数字化时代,人工智能技术迅速发展,开源大模型成为重要成果。魔搭社区(ModelScope)作为开源大模型的聚集地,结合阿里云函数计算,提供了一种高效、便捷的部署方式。通过按需付费和弹性伸缩,开发者可以快速部署和使用大模型,享受云计算的便利。本文介绍了魔搭社区与函数计算的结合使用体验,包括环境准备、部署应用、体验使用和资源清理等步骤,并提出了改进建议。
|
消息中间件 监控 安全
构建高效微服务架构:最佳实践与挑战
在现代软件开发中,微服务架构因其高度的可扩展性、灵活性和敏捷性而受到青睐。本文深入探讨了构建高效微服务架构的关键策略,包括服务的划分、通信机制、数据管理、部署与监控等方面的最佳实践。同时,文章也分析了在实施过程中可能遇到的挑战,如服务间的依赖管理、数据一致性问题、安全考量及性能优化等,并提出了相应的解决方案。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们在构建微服务系统时能够有效规避风险,提升系统的健壮性和用户体验。
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
644 4

热门文章

最新文章

相关产品

  • 函数计算