《Akka应用模式:分布式应用程序设计实践指南》读书笔记2

简介: Akka简介  Akka是什么:“Akka是在JVM上构建高并发、分布式、弹性消息驱动应用的开源工具包”。弹性意味着要积极响应失败情况,从失败中恢复的能力。  其实Akka的定义很符合响应式领域模型,这个模型有几个基本特征:  1、弹性。

Akka简介

  Akka是什么:“Akka是在JVM上构建高并发、分布式、弹性消息驱动应用的开源工具包”。弹性意味着要积极响应失败情况,从失败中恢复的能力。

  其实Akka的定义很符合响应式领域模型,这个模型有几个基本特征:

  1、弹性。面对失败的响应能力

  2、伸缩性。不同负载情况下的响应

  3、消息驱动。高内聚低耦合,通过异步消息隔离

  4、响应能力。限定延迟

  如果一个Akka设计的比较好,可以很容易满足响应式模型的基本要求。毕竟Akka也是围绕失败来做设计的。Akka通过消息驱动和其他完美(至少我认为)的设计,支持了高响应性、高容错性、高可伸缩性。这几个特性对于分布式系统来说还是相当重要的。

Akka actor

  actor实现了状态不共享、基于异步消息传递机制的Actor模型。这个可以类比OOP中的对象来理解,但要注意区别。每一个actor都有一个ActorRef与之关联,有点类似于OOP对象的指针。所有的消息都必须通过ActorRef发送,Actor模型的消息驱动本质就是通过使用它来实现的。本质来说,actor可以接收的消息就是对外暴露接口的输入,返回的消息就是接口的输出。

remoting

  Akka让actor的位置变得透明,使用ActorRef发送消息时,并不需要关心对应的actor是在本地还是在其他机器上。如果设计得当,通过修改配置就可以使系统变成分布式。

clustering

  在Akka中设计集群系统也会非常简单,毕竟actor的位置是透明的,你只需要做的可能就是给集群设置一个或多个节点。actor系统使用gossip协议的变体管理集群的成员。集群中节点的生命周期的变化都会以消息的方式通知其他节点。

集群分片

  sharding的想法最初被应用于数据库中,当单个数据集过大,无法被包容在单个节点中时,需要进行分片处理。集群分片,无形中水平扩展了系统的处理能力。

集群单例

  集群的另一个重要的技术点就是集群单例,即在集群中始终有且只有一个特定的actor实例,它的位置不重要,重要的是只能有一个。如果要自己实现一个集群单例的节点,感觉还是挺复杂的,但Akka居然自带这个功能,只能说太牛逼了。

Akka HTTP

  提供了一种在Akka之上构建HTTP API的方法,如果你要问这有什么用,毕竟已经有那么多的HTTP库了,那你好好看看Akka提供了那么多的功能,就知道原因了。

 TestKit

  TestKit专门用来测试akka系统。具体的功能或者特性,读者可以自己探讨

Akka Streams

  Akka Streams提供了一个更高级别API来与actor进行交互,同时提供自动处理“背压”(back pressure)的机制。简单点来说,Akka Streams就是基于actor的DSL,并提供一些基础的特性。如果一个分布式系统支持背压机制,还是很牛掰的,毕竟这个机制单独实现还挺麻烦的。

消息传递

  Actor模型指定消息传递应该是actor进行通信的唯一方式,并且所有操作都应该是为了响应此消息传递才发生的。Akka中有三个消息传递机制,分别代表不同的设计模式。

  1、tell。就是 fire and forget 消息机制,它不会阻塞当前代码,不等待任何响应。连是否发送成功都不期望,就是尽可能的发送消息。

  2、ask。这个跟调用OOP对象的方法有点类似,给目标actor发送消息,阻塞当前代码等待响应,且一定会有响应。超时后返回null也是一种响应。

  3、发布/订阅。各个actor之间通过引用事件总线来发布消息,即消息的接受者必须订阅该类型的消息,然后才能接收其他actor发布的同类型的所有消息。各个actor并不知道对方的存在。事件总线有点类似于消息中转站的功能。

actor 系统

  actor系统为actor提供通信的基础功能,例如位置透明、创建actor等

这一章节书籍的作者介绍了Akka的各个技术细节,但还是有很多没有讲到的。例如位置透明具体怎么用呢?集群开发的基本设计模式是神马,随着后面章节,才会慢慢了解Akka构建分布式系统的巨大威力。

目录
相关文章
|
9月前
|
消息中间件 监控 Java
Apache Kafka 分布式流处理平台技术详解与实践指南
本文档全面介绍 Apache Kafka 分布式流处理平台的核心概念、架构设计和实践应用。作为高吞吐量、低延迟的分布式消息系统,Kafka 已成为现代数据管道和流处理应用的事实标准。本文将深入探讨其生产者-消费者模型、主题分区机制、副本复制、流处理API等核心机制,帮助开发者构建可靠、可扩展的实时数据流处理系统。
819 4
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
1110 35
|
12月前
|
分布式计算 Java 大数据
Java 大视界 —— 基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用进展(176)
本文围绕基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用展开,剖析行业现状与挑战,阐释技术原理,介绍其在数据处理及天气预报中的具体应用,并结合实际案例展示实施效果。
Java 大视界 -- 基于 Java 的大数据分布式存储在视频监控数据管理中的应用优化(170)
本文围绕基于 Java 的大数据分布式存储在视频监控数据管理中的应用展开,分析管理现状与挑战,阐述技术应用,结合案例和代码给出实操方案。
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
机器学习/深度学习 存储
DeepSeek进阶开发与应用4:DeepSeek中的分布式训练技术
随着深度学习模型和数据集规模的扩大,单机训练已无法满足需求,分布式训练技术应运而生。DeepSeek框架支持数据并行和模型并行两种模式,通过将计算任务分配到多个节点上并行执行,显著提高训练效率。本文介绍DeepSeek中的分布式训练技术,包括配置与启动方法,帮助用户轻松实现大规模模型训练。数据并行通过`MirroredStrategy`同步梯度,适用于大多数模型;模型并行则通过`ParameterServerStrategy`异步处理大模型。DeepSeek简化了分布式环境配置,支持单机多卡和多机多卡等场景。
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
374 5
|
监控
Saga模式在分布式系统中保证事务的隔离性
Saga模式在分布式系统中保证事务的隔离性
380 4