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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 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



相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
1907 4
|
4月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
5月前
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
227 0
|
2月前
|
消息中间件 监控 安全
构建高效微服务架构:最佳实践与挑战
在现代软件开发中,微服务架构因其高度的可扩展性、灵活性和敏捷性而受到青睐。本文深入探讨了构建高效微服务架构的关键策略,包括服务的划分、通信机制、数据管理、部署与监控等方面的最佳实践。同时,文章也分析了在实施过程中可能遇到的挑战,如服务间的依赖管理、数据一致性问题、安全考量及性能优化等,并提出了相应的解决方案。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们在构建微服务系统时能够有效规避风险,提升系统的健壮性和用户体验。
|
2月前
|
弹性计算 人工智能 自然语言处理
魔搭社区与函数计算:高效部署开源大模型的文本生成服务体验
在数字化时代,人工智能技术迅速发展,开源大模型成为重要成果。魔搭社区(ModelScope)作为开源大模型的聚集地,结合阿里云函数计算,提供了一种高效、便捷的部署方式。通过按需付费和弹性伸缩,开发者可以快速部署和使用大模型,享受云计算的便利。本文介绍了魔搭社区与函数计算的结合使用体验,包括环境准备、部署应用、体验使用和资源清理等步骤,并提出了改进建议。
|
2月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
87 4
|
3月前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
54 5
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
3月前
|
机器学习/深度学习 监控 物联网
函数即服务(FaaS)
函数即服务(FaaS)
117 6
|
2月前
|
运维 监控 负载均衡
介绍一下微服务架构的优缺点
介绍一下微服务架构的优缺点
50 0

相关产品

  • 函数计算