Akka源码分析-Remote-网络链接生命周期
remote模式下,网络链接的生命周期往往影响着对应Actor的生命周期,那么网络链接的生命周期是怎么样的呢?

每一个与远程系统的链路都是四个状态之一:空闲、活跃、被守护、被隔离。远程系统的某个地址没有任何通信之前其关联状态就是Idle(空闲)。当第一条消息试图发送给远程系统或入站链接被接受,链路的状态就被转化为Active(活跃),这也意味着两个系统有消息的接收或者发送,而且目前为止也没有发生任何失败。当一个通信失败,或者两个系统间的链接丢失,链路的状态就会变成Gated(被守护)。在被守护状态,系统不会试图去链接远程系统主机,所有出站消息都会被丢弃。链路处于Gated状态的时间是通过 akka.remote.retry-gate-closed-for 参数控制的,当超过这个时间,链路状态会重新转化成Idle(空闲)。Gate 是单边的,这也就意味着这期间无论何时当远程系统的入站链接被接受,都会被自动转化成Active(活跃)状态,通信被立即重用。当通信失败,且无法恢复时,由于参与系统的状态不一致,远程系统就会变成Quarantined(被隔离)状态。与Gate不同,被隔离是永久的,它会一直持续到其中一个系统被重启。重启之后,通信可以被重新恢复,链路状态重新变成Active(活跃)。
其实remote的链路状态也比较容易理解,当没有建立连接时,就处于空闲状态;有入站链接请求或消息发送时,如果连接建立成功,则变成活跃状态;活跃状态时,如果发生通信失败且不是致命错误,比如网络中断,就会转到被守护状态;被守护状态下,在指定时间内,如果网络正常,且收到了成功的入站链接请求,则重新恢复到活跃状态,若超过指定守护时间则转化到空闲状态;在活跃状态下,如果发生灾难性、不可恢复的错误,比如系统消息传递失败或收到MemberRemoved事件,则该链路被隔离,直到远程系统重启后,收到成功的入站或出站链接,则重新转换到活跃状态。
被守护、被隔离都是应对网络故障的,但分别对应可恢复和不可恢复。被守护期间还有一定的时间阈值,该阈值内还有机会编程活跃状态。
lifecycle-and-failure-recovery-model:https://doc.akka.io/docs/akka/current/remoting.html#lifecycle-and-failure-recovery-model
Akka源码分析-Remote-网络链接生命周期的更多相关文章
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- Vue.js 源码分析(九) 基础篇 生命周期详解
先来看看官网的介绍: 主要有八个生命周期,分别是: beforeCreate.created.beforeMount.mounted.beforeupdate.updated .beforeDes ...
- 干货分享之spring框架源码分析02-(对象创建or生命周期)
记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新.欢迎大家指正! 环境: spring5.X + idea 之前分析了Spring读取xml文件的所有信息封装成beanDef ...
- Akka源码分析-Remote-网络链接
上一篇博客中,我们分析了Akka remote模式下消息发送的过程,但细心的读者一定发现没有介绍网络相关初始化.创建链接.释放链接的过程,本文就介绍一下相关的内容. 网络初始化就离不开ActorSys ...
- Tomcat源码分析 (三)----- 生命周期机制 Lifecycle
Tomcat里面有各种各样的组件,每个组件各司其职,组件之间又相互协作共同完成web服务器这样的工程.在这些组件之上,Lifecycle(生命周期机制)至关重要!在学习各个组件之前,我们需要看看Lif ...
- 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- Akka源码分析-Persistence
在学习akka过程中,我们了解了它的监督机制,会发现actor非常可靠,可以自动的恢复.但akka框架只会简单的创建新的actor,然后调用对应的生命周期函数,如果actor有状态需要回复,我们需要h ...
- Akka源码分析-Remote-收消息
上一遍博客中,我们分析了网络链接建立的过程,一旦建立就可以正常的收发消息了.发送消息的细节不再分析,因为对于本地的actor来说这个过程相对简单,它只是创立链接然后给指定的netty网路服务发送消息就 ...
- Akka源码分析-local-DeathWatch
生命周期监控,也就是死亡监控,是akka编程中常用的机制.比如我们有了某个actor的ActorRef之后,希望在该actor死亡之后收到响应的消息,此时我们就可以使用watch函数达到这一目的. c ...
随机推荐
- Nginx配置 隐藏入口文件index.php
Nginx配置文件里放入这段代码 server { location / { index index.php index.html index.htm l.php; autoindex on; if ...
- 来说一说chrome扩展和chrome插件到底有什么区别?
想讨论chrome扩展和chrome插件区别这个话题很久了!但是迟迟没有写.因为我自己也没有搞清楚这两者之间的区别!回想当初是因为需要寻找番羽墙插件才想到去搜索到chrome插件. 想讨论chrome ...
- 56-混沌操作法之我见:二、AO、AC指标.(2015.2.9)
混沌操作法之我见:二.AO.AC指标 先看看其算法: Y=(H+L)/2: AO=MA(Y,5)-MA(Y,34): AC=AO-MA(AO,5). 由算法可以看出,AO表示的是近5期的综合价格与近3 ...
- BZOJ 1370 团伙
两个认识的人不是朋友就是敌人,且满足: 1,朋友的朋友是朋友: 2,敌人的敌人是朋友. 一群朋友组成一个团伙,给出m个信息,求有多少个团伙. 用并查集,把一个点x拆成x和x’ 若a与b为朋友,则将a与 ...
- PAT 1125 Chain the Ropes
Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...
- SRAM的简单概念
CY7C138 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Uva679 Dropping Balls
A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Each ...
- jQuery对象是怎么创建的
一.jQuery源码 在jQuery中,$是jQuery的别名,执行“$()”就是执行“jQuery()”,执行“$()”返回的是一个jQuery对象,在源码中,它是这样定义的: ... var jQ ...
- 二叉堆练习3&【模板】堆
时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定N(N≤500,000)和N个整数(较有序),将其排序后输出. 输入描述 Inp ...
- 洛谷—— P1187 3D模型
https://www.luogu.org/problem/show?pid=1187 题目描述 一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成.在每个网格上都可以有一个建筑,建筑由若 ...