温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star、Fork,纠错。 集群的使用方法 注释:本文描述了如何使用 Akka 集群。...何时何地使用 Akka 集群? 如果你打算使用微服务架构或传统的分布式应用程序,则必须进行架构的选择。这个选择将影响你应该如何使用 Akka 集群。...如果你不使用 RP,你无论如何都应该仔细阅读 Split Brain Resolver 的文档,并确保你使用的解决方案能够处理此处描述的问题。...Death Watch 对集群中的节点使用集群故障检测器,例如检测网络故障和 JVM 崩溃,并优雅地终止被监视的 Actor。...Death Watch 对集群中的节点使用集群故障检测器,即它检测网络故障和 JVM 崩溃,并优雅地终止被监视的 Actor。
由此可见,要从头实现这样一个解决方案并非易事,很多时候,我们希望选择一款设计精良,易于使用的框架来处理这些问题,而Akka正是为此而生!...使用场景包括: 服务后端,比如rest web,websocket服务,分布式消息处理等。 并发&并行,比如日志异步处理,密集数据计算等。 总之,对高并发和密集计算的系统,Akka都是适用的!...另外,当JVM崩溃时,为了避免Actor状态的丢失,我们可以借助持久化方案来对状态进行持久化操作。...当程序出错, JVM崩溃时,任何关键状态的丢失,对我们后续的业务来讲都可能是致命的打击,所以状态数据的持久化变得非常重要。Akka提供了Actor状态的持久化方案,以便我们在必要时恢复数据。...Akka底层采用Scala语言实现(JVM上另外一款明星语言),它基于Actor模型,在底层帮助开发者屏蔽了异步、消息通信、容错处理、网络服务、分布式集群等实现细节。
文章目录 集群指标扩展 依赖 简介 指标收集器 指标事件 Hyperic Sigar 配置 自适应负载平衡 订阅指标事件 自定义指标收集器 配置 集群指标扩展 依赖 为了使用集群指标扩展(Cluster...集群指标信息主要用于负载均衡路由器(load-balancing routers),也可用于实现基于指标的高级节点生命周期,例如当 CPU 窃取时间过多时“节点让它崩溃”。...不同的收集器(collector)实现提供发布到集群的不同指标子集。当未设置Sigar时,某些消息路由和让其崩溃功能可能无法工作。...Sigar使用的是本机 O/S 库,需要提供库,即在运行时将 O/S 本机库部署、提取和加载到 JVM 中。...它可以配置为使用特定的MetricsSelector来产生概率,即a.k.a.权重: heap / HeapMetricsSelector - 已用和最大 JVM 堆内存。
当最老的节点由于诸如 JVM 崩溃、硬关闭或网络故障而无法访问时,集群故障检测器会注意到。然后将接管一个新的最老节点,并创建一个新的单例 Actor。...一般来说,当使用集群单例模式时,你应该自己处理downing的节点,而不是依赖于基于时间的自动关闭功能。...从 JMS 队列接收消息的 Actor,严格要求只有一个 JMS 消费者才能确保消息按顺序处理。这也许不是人们想要如何设计事物,而是与外部系统集成时典型的现实场景。...在解释如何创建集群单例 Actor 之前,我们先定义将由单例使用的消息类。...下面是这个示例中,单例 Actor 如何处理terminationMessage。
文章目录 集群分片 依赖 示例项目 简介 一个示例 它是如何工作的?...「集群分片」项目,以了解 Akka 集群分片的实际使用情况。...注意这两种消息类型是如何在上面展示的entityId和entityMessage方法中处理的。...当从集群中删除崩溃或无法访问的协调节点(通过down)时,新的ShardCoordinator单例 Actor 将接管并恢复状态。...这是由「Coordinated Shutdown」自动执行的,因此是集群成员正常退出进程的一部分。 删除内部群集分片数据 集群分片协调器使用 Akka 持久化存储分片的位置。
位置透明 上一节描述了如何使用 Actor 路径来启用位置透明(location transparency)。...这项工作的目的是确保在单个 JVM 中或在成百上千台机器的集群上运行时,所有功能都可以平等地使用。实现这一点的关键是通过优化从远程到本地,而不是通过泛化从本地到远程。...这还意味着消息丢失的概率要比一个 JVM 中的高很多,在同一个 JVM 中,它接近于零,但仍然是:没有硬保证! 如何使用远程处理?...Client-Server Akka 远程处理是一种以对等(peer-to-peer,或者称之为“点对点”)方式连接 Actor 系统的通信模块,是 Akka 集群的基础。...用路由器扩容标记点 除了能够在集群的不同节点上运行 Actor 系统的不同部分之外,还可以通过将支持并行化的 Actor 子树(例如,搜索引擎并行处理不同的查询)相乘,扩展到更多的核心。
在这一部分中,我们将通过实现设备 Actor 来在小范围(in the small)内观察 Actor。 如果我们处理对象,我们通常将 API 设计为接口,由实际实现来填充抽象方法集合。...此外,当在同一个 JVM 中发送时,如果一个 Actor 在处理消息时由于编程错误而失败,则效果与处理消息时由于远程主机崩溃而导致远程网络请求失败的效果相同。...第一种“至多一次传递”是 Akka 使用的方式,它是最廉价也是性能最好的方式。...如果我们依赖消息的成功处理,那么一旦订单提交给负责验证它、处理它并将其放入数据库的内部 API,Actor 就会报告成功。不幸的是,在调用 API 之后,可能会立即发生以下任何情况: 主机可能崩溃。...基于这些原因,Akka 解除了对应用程序本身的保证责任,即你必须自己使用 Akka 提供的工具来实现这些保证。这使你能够完全控制你想要提供的保证。
文章目录 集群客户端 依赖 简介 一个示例 ClusterClientReceptionist 扩展 事件 配置 故障处理 当无法到达群集时 集群客户端 依赖 为了使用集群客户端(Cluster Client...使用ClusterClient从外部与集群进行通信,要求系统与客户端既可以连接,也可以通过 Akka 远程连接到集群中的所有节点和接待员。...这就产生了紧密耦合,因为客户端和集群系统可能需要具有相同版本的 Akka、库、消息类、序列化程序,甚至可能是 JVM。...此外,由于 Akka 远程处理(Remoting)主要设计为 Akka 群集的协议,因此没有明确的资源管理,当使用了ClusterClient时,它将导致与群集的连接,直到ActorSystem停止(与其他类型的网络客户端不同...reconnect-timeout = off } 故障处理 启动集群客户端时,必须为其提供一个初始连接点列表,这些连接点是正在运行接待员的集群节点。
简单来说Akka-Cluster将多个JVM连接整合起来,实现消息地址的透明化和统一化使用管理,集成一体化的消息驱动系统。...由于在单一机器上就可以配置多个节点形成一个集群,我们开发的分布式程序可以在单机或多机群上运行,不同的只是如何部署和配置集群环境。...一部物理机器上可以构建多个集群节点Node,这时它们有着相同的hostname和不同的port,在不同机器上的Node则可以使用不同的hostname和相同的port。...集群内的节点分邻里相互通过Gossip交流更新集群状态数据,逐步扩散交流覆盖整个集群所有节点并形成完整的统一集群状态数据。 Gossip-Convergence:集群统一状态。...InitialStateAsEvents, classOf[MemberEvent], classOf[UnreachableMember]) 另外,我们还可以用callback方式在状态转换前后调用一些运算来进行准备处理和事后处理
Akka 简介 欢迎来到 Akka,它是一组用于设计跨越处理器和网络的可扩展、弹性系统的开源库。Akka 允许你专注于满足业务需求,而不是编写初级代码来提供可靠的行为、容错性和高性能。...为了取得成功,分布式系统必须在组件崩溃而没有响应、消息丢失而没有在线跟踪以及网络延迟波动的环境中进行处理。这些问题经常发生在精心管理的数据中心内部环境中,在虚拟化架构中更是如此。...一个集群的、高可用的体系结构,具有弹性、可按需扩展性,使你能够提供真正的反应式系统。 Akka 对 Actor 模型的使用提供了一个抽象级别,使得编写正确的并发、并行和分布式系统更加容易。...通过学习 Akka 以及如何使用 Actor 模型,你将能够熟练的使用大量的工具集,这些工具可以在统一的编程模型中解决困难的分布式/并行系统问题,在统一的编程模型中,所有东西都紧密且高效地结合在一起。...快速入门指南将引导你完成示例代码,其中介绍了如何定义 Actor 系统、Actor 和消息,以及如何使用测试模块和日志。
简介 Akka 持久性使有状态的 Actor 能够持久化其状态,以便在 Actor 重新启动(例如,在 JVM 崩溃之后)、由监督者或手动停止启动或迁移到集群中时可以恢复状态。...AbstractPersistentActorAtLeastOnceDelivery:将具有至少一次传递语义的消息发送到目的地,也可以在发送方和接收方 JVM 崩溃的情况下发送。...换句话说,一旦一个日志返回一个失败,它就被 Akka 持久化认为是致命的,导致失败的持久行 Actor 将被停止。检查你正在使用的日志实现文档,了解它是否或如何使用此技术。...下面的示例强调了消息如何到达 Actor 的邮箱,以及在使用persist()时它们如何与其内部存储机制交互。...发送 Actor 的状态,包括那些已发送但未被接收者确认的消息,必须是持久的,这样它才能在发送 Actor 或 JVM 崩溃后存活下来。
欢迎使用 Akka,Akka 是一套被用来在在多处理器核心和网络之间被设计可扩展和具有相关弹性的开源工具集。Akka 允许你更加关注商业需求而不是书写低级别的代码来提供可靠性,容错率和高性能。...为了帮助你处理上面提到这些现实的问题,Akka 提供了: 不使用低级并发结构的多线程,例如原子或锁;让你免于考虑内存可见性的问题。...一个高可用性的集群架构,这个集群具有相当的弹性,在线方式;让你真正能够部署一个反应系统。 Reactive System....Akka 使用 actor 抽象模型能够让 Akka 更加容易的创建正确的并发,并行的分布式系统。actor 模型贯穿整个 Akka 的库,能够让你更加容易的理解和使用它们,并且能够保证更好的完整性。...通过学习 Akka 和如何使用 actor 模型,你将访问到庞大和深入的工具集用来解决分布式并行系统中遇到的困难和挑战,通过统一的编程模型,其中所有的东西都能够紧密和高效的组合在了一起。
Actor 是一种程序上的抽象概念,被视为并发运算的基本单元:当一个 Actor 接收到一则消息,它可以做出一些决策、创建更多的 Actor 、发送更多的消息、决定要如何处理接下来的消息。...二、Akka Toolkits Akka Toolkit 也就是 Akka 工具包,其实就是 JVM 平台上对 Actor 模型的一种实现。...akka-http:HTTP 组件,现代、快速、异步、流媒体优先的 HTTP 服务器和客户端。 akka-cluster:集群组件,包括集群成员管理、弹性路由等。...同时,Akka 已经帮你搞定了各种异常后的处理。也就是说,使用 akka-remote,可以让数据接收方非常的简单,只专注逻辑的实现。 其次,在分布式环境中,通讯往往不是单向的。...四、最后 那么以上就是本篇文章全部的内容啦~ 通过本篇文章,我相信大家已经了解了 Actor 模型的基础概念,同时掌握了 JVM 上 Actor 模型的实现——Akka 框架的简单使用。
如何规划生产中的集群大小? 第一步是仔细考虑应用程序的运维指标,以达到所需资源的基线。...反压(backpressure)是实时计算应用开发中,特别是流式计算中,十分常见的问题。反压意味着数据管道中某个节点成为瓶颈,处理速率跟不上上游发送数据的速率,而需要对上游进行限速。...建议仔细查看TaskManager日志,并按处理JVM OOM问题的常规操作来排查。...Flink作业频繁重启 现象:作业频繁重启又自行恢复,陷入无尽循环,无法正常处理数据。 作业频繁重启的成因非常多,例如异常数据造成的作业崩溃,可以在 TaskManager 的日志中找到报错。...作业的崩溃重启还有一些原因,例如使用了不成熟的第三方 so 库,或者连接数过多等,都可以从日志中找到端倪。
它定义了 Actor 可以处理哪些消息,以及如何处理消息的实现。可以使用名为ReceiveBuilder的生成器来构建此类行为。...,以及如何处理这些消息的实现。...PleaseCleanupAndStop之类的协议级(protocol-level)消息,因为 Actor 知道如何处理这些消息。...要启用硬System.exit作为最终操作,可以配置: akka.coordinated-shutdown.exit-jvm = on 当使用「Akka 集群」时,当集群节点将自己视为Exiting时,...当使用 Akka 集群时,会自动添加集群的优雅离开任务,包括集群单例的优雅关闭和集群分片,即运行关闭过程也会触发尚未进行的优雅离开。
如何收到死信?...通常不令人担忧的死信 消息传递可靠性 Akka 帮助你构建可靠的应用程序,这些应用程序可以在一台机器中使用多个处理器核心(scaling up,纵向扩展)或分布在计算机网络中(scaling out,横向扩展...不建议依赖本节中更强的可靠性,因为它会将你的应用程序绑定到仅本地(local-only)部署:为了适合在计算机集群上运行,可能必须对应用程序进行不同的设计(而不是仅使用某些 Actor 本地的某些消息交换模式...实现第三部分的另一种方法是使消息处理在业务逻辑级别上是等量的。...如何收到死信? Actor 可以订阅事件流上的类akka.actor.DeadLetter,请参阅「事件流」了解如何执行该操作。然后,订阅的 Actor 将收到(本地)系统中从那时起发布的所有死信。
Akka 集群允许构建分布式应用程序,其中一个应用程序或服务可以跨越多个节点(实际上是多个ActorSystem)。另请参见在「何时何地使用 Akka 集群」中的讨论。...Akka 使用 UID 能够可靠地触发远程死亡监视(remote death watch)。这意味着相同的 Actor 系统在从集群中删除后,不能再加入该集群。...Gossip Akka 中使用的集群成员是基于 Amazon 的「Dynamo」系统,特别是在 Basho 的「Riak」分布式数据库中采用的方法。...Akka 使用一个带有向量时钟的单一共享状态进行版本控制,因此 Akka 中使用的push-pull gossip使用此版本仅在需要时推送实际状态。...消息的周期性具有状态更改的良好批处理效果,例如,将几个节点快速地彼此连接到一个节点之后,只会导致一个状态更改传播到集群中的其他成员。
WeaklyUp节点不算作集群的一部分。因此,就一致操作而言,3 个节点 + 5 个WeaklyUp的节点本质上是 3 个节点。...这意味着,如果集群大小小于大多数大小,它将使用minCap节点数,但最多使用集群的总大小。...如果需要递增和递减,可以使用PNCounter(正/负计数器)。 它跟踪的增量(P)与减量(N)分开。P和N表示为两个内部GCounter。合并是通过合并内部P和N计数器来处理的。...为了获得更好的性能,但是如果 JVM 崩溃,则有可能丢失最后一次写入,你可以启用写后模式(write behind mode)。然后在将更改写入 LMDB 并刷新到磁盘之前的一段时间内累积更改。...如果 JVM 崩溃的风险很小,则会丢失写操作,因为数据通常会根据给定的WriteConsistency立即复制到其他节点。
它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。...---- 为了保持回弹性,Akka采用了“让它崩溃(Let it crash)”模型,该模型已在电信行业成功用于构建具有自我修复功能的应用程序和系统。...下面看下Akka的特性: 可以更简单地构建并发和分布式系统 Akka基于Actor模型和Streams,让我们可以构建可伸缩的,并且可以高效使用服务器资源,使用多个服务器进行扩展的系统。...Actor模型允许构建分布式系统,不限于单个JVM内。 【Actor系统图】 使用消息传递避免锁和阻塞 Actor之间通信通过消息传递而不是方法调用,不会导致发送消息的调用线程被阻塞。...Actor可以高效地处理大量消息,充分利用多核CPU的潜力。 使用Actor优雅地处理错误 Actor模型中不存在共享调用堆栈,因此错误处理方式不同。
领取专属 10元无门槛券
手把手带您无忧上云