Dapr的云计算设计模式(4)

简介: Actor 模型 起源于Carl Hewitt 在 1973 年提出的作为并发计算的概念模型,这种形式的计算会同时执行多个计算。 当时并没有高度并行的计算机,但多核 Cpu 和分布式系统的最新进步使得Actor 模型 变得流行。在Actor 模型中,Actor 是一个计算和状态独立的单元。 Actors 完全彼此隔离,它们永远不会共享内存。 Actors 使用消息相互通信。

Actors
Actor 模型 起源于Carl Hewitt 在 1973 年提出的作为并发计算的概念模型,这种形式的计算会同时执行多个计算。 当时并没有高度并行的计算机,但多核 Cpu 和分布式系统的最新进步使得Actor 模型 变得流行。在Actor 模型中,Actor 是一个计算和状态独立的单元。 Actors 完全彼此隔离,它们永远不会共享内存。 Actors 使用消息相互通信。 当一个Actor 收到消息时,它可以更改其内部状态,并将消息发送到其他 (可能是新的) Actors。

Actor模型使得编写并发系统变得更简单的,它提供了基于 turn-based 的 (或单线程) 访问模型。 多个Actors可以同时运行,但每个Actor 一次只处理一个接收的消息。 这意味着,在任何时候,都可以确保在Actors 中最多有一个线程处于活动状态。 这使得编写正确的并发系统和并行系统变得更加容易。

Dapr 的实现基于 项目 "Orleans" 中引入的虚拟Actor模式。 对于虚拟Actor模式,不需要显式的创建Actor。 第一次将消息发送到Actor时,Actor将被隐式激活并放置在群集中的节点上。 当不执行操作时,Actor 会以静默方式从内存中卸载。 如果某个节点出现故障,Dapr 会自动将激活的Actor 移到正常的节点。 除了在Actor之间发送消息以外,Dapr Actor模型还支持使用计时器和提醒调度将来的工作。

虽然Actor模型 提供了很大的优势,但必须仔细考虑Actor的设计。 例如,如果多个客户端调用相同的Actor,则会导致性能不佳,因为Actor 操作会按顺序执行。 下面的检查清单是是否适用于 Dapr Actor的一些标准:

问题空间涉及并发性。 如果没有Actor,则需要在代码中引入显式锁定机制。
可以将问题空间分区为小、独立和隔离的状态和逻辑单元。
不需要低延迟的读取Actor 状态。 因为Actor 操作是按顺序执行,不能保证低延迟读取。
不需要在一组Actor 之间查询状态。 跨Actor 的查询效率低下,因为每个Actor 的状态都需要单独读取,并且可能会导致不可预测的延迟。
满足这些条件的一种设计模式非常好,就是 基于业务流程的 saga 或 流程管理器 设计模式。 Saga 管理必须执行的一系列步骤才能达到某些结果。 Saga (或进程管理器) 维护序列的当前状态,并触发下一步。 如果一个步骤失败,saga 可以执行补偿操作。 利用Actor,可以轻松处理 saga 中的并发,并跟踪当前状态。 EShopOnDapr 参考应用程序使用 saga 模式和 Dapr Actor来实现排序过程。

image.png

为了提供可伸缩性和可靠性,将在Actor服务的所有实例中对actor进行分区。 Dapr placement 服务负责跟踪分区信息。 启动Actor 服务的新实例时,Sidecar 会将支持的Actor 类型注册到placement 服务。 placement 服务计算给定Actor 类型的更新分区信息,并将其广播给所有实例。

关于 Actor Pattern 的信息以及相关论文:

Actor pattern
Orleans: Distributed Virtual Actors for Programmability and Scalability
总结

分布式架构的门槛比较高,需要考虑的问题很多,通常我们都需要考虑如下问题。

服务治理:包含Service Invocation、Service Trusted and Authorization (服务的信任、认证与授权)、通信模式(HTTP / gRPC)、通信机制(Push / Pull)、状态管理(State Machine)
运维:高可用、扩展机制、Log 处理、分布式追踪、Metric
安全性:Data Encryption、Secret Management、KMS、Auth 集成
性能和可靠性:Rate Limit、降级、熔断…
可扩展的架构
如何提升开发团队的效能
上述的这些东西,通常是一个有经验的、资深的软件工程师,如何在资源有限的情况下,可以快速开发、容易测试,是很多技术人的痛点所在。

这些问题从个别来看,都有相当成熟的系统,如果个别看,有很多现成的实践可以参考。但是对于存在了几十年的祖传代码的系统架构而言,如果要进行微服务改造,往往都要伤筋动骨,让技术主管和架构师伤透脑筋,往往要面对新旧技术的整合,同时也要面对现实的团队需求的交互和对于新技术的学习门槛。对于开发应用程式的开发人员来讲,满足业务需求的开发已经够头痛了,还要考虑这么多系统架构层面的东西,这种事是无法靠热情填补的。Dapr 将一些经过验证的技术和最佳实践带到微服务开发中。它通过即插即用模型将90 年代的数据驱动的客户端/服务器应用程序的操作,应用于现代云原生应用程序所需的最常见服务,让我们集中于业务需求的开发,而不需要考虑系统架构层面的东西 。

相关文章
|
设计模式 开发框架 Kubernetes
Dapr的云计算设计模式(3)
这就是我们在微服务里面常说的服务治理,Dapr 作为一个分布式系统,多个Dapr app怎么知道彼此的存在,通过什么方式进行沟通,这就是Dapr的服务治理要解决的问题,Dapr的服务发现机制,按照架构的不同方式(k8s还是自托管)有不同的实现。
120 0
Dapr的云计算设计模式(3)
|
设计模式 中间件 API
Dapr的云计算设计模式(2)
基于这样的设计,Dapr 把最核心的Component 提供了基于分布式系统的 最佳实践 (Best Practice)和 设计模式(Design Patterns)。
111 0
Dapr的云计算设计模式(2)
|
设计模式 Kubernetes 安全
Dapr的云计算设计模式(1)
Dapr实际上是把分布式系统 与微服务架构实践的挑战以及k8s 这三个主题的全方位的设计组合,特别是《Kubernetes设计模式》一书作者Bilgin Ibryam提出的Multi-Runtime Microservices Architecture这一概念。分布式系统 和微服务架构实践的核心问题就是要解决系统复杂性这个难题,降低复杂性的通常做法就是分而治之。
135 0
Dapr的云计算设计模式(1)
|
存储 缓存 API
云计算设计模式(一)——缓存预留模式
云计算设计模式(一)——缓存预留模式 根据需求从数据存储缓存加载数据。这种模式可以提高性能,并有助于维持在基础数据存储在高速缓存中保持的数据和数据之间的一致性。
962 0
|
云计算 设计模式 负载均衡
云计算设计模式(二)——断路器模式
云计算设计模式(二)——断路器模式处理故障连接到远程服务或资源时,可能需要耗费大量的时间。这种模式可以提高应用程序的稳定性和灵活性。 背景和问题 在分布式环境中,如在云,其中,应用程序执行访问远程资源和服务的操作,有可能对这些操作的失败是由于瞬时故障,如慢的网络连接,超时,或者被过度使用的资源或暂时不可用。
853 0
|
存储 云计算
云计算设计模式(三)——补偿交易模式
云计算设计模式(三)——补偿交易模式 撤消由一系列步骤,它们共同限定了最终一致性操作中,如果一个或多个步骤失败执行的工作。按照最终一致性模型,业务实现复杂的业务流程和工作流的云托管的应用程序中很常见。
1280 0
|
6天前
|
存储 人工智能 文件存储
阿里云吴结生:云计算是企业实现数智化的阶梯
文章背景:阿里云副总裁、阿里云云存储产品线负责人吴结生在云栖大会的演讲中表示:“从云的角度来看,云的存力、算力,云上提供的数据管理的能力,大数据分析能力和人工智能计算能力,帮助每家企业从数据公司演进到数据驱动的公司。因此云计算是企业实现数智化的阶梯。”
|
6天前
|
弹性计算 云计算 虚拟化
GPU云服务器_GPU云计算_异构计算_弹性计算-阿里云
阿里云提供多种GPU服务器,包括NVIDIA V100、T4、A10和A100计算卡,其中gn6i实例享有最高3折优惠。包年包月价格如:gn6v实例(16G V100)从4685.20元/月起,gn6i实例(16G T4)从1878.40元/月起。学生无特定GPU服务器优惠,但新用户有折扣活动。GPU服务器计费模式有包年包月和按小时计费,按需选择。详细价格及活动规则见官方链接。
23 0
GPU云服务器_GPU云计算_异构计算_弹性计算-阿里云
|
6天前
|
弹性计算 NoSQL 数据库
电车卷?云计算更卷,阿里云领头降价,2024阿里云服务器又降价了!
电车卷?云计算更卷,阿里云领头降价,2024阿里云服务器又降价了!