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 ...
随机推荐
- eclipse 中为 java 项目生成 API 文档、JavaDoc
当我们的项目很大,编写了很多代码的时候,就需要生成一个标准的 API 文档,让后续的开发人员,或者合作者可以清晰的了解您方法的使用. 1.点击 eclipse 的 Project 菜单,选择 Gene ...
- 关于图片预览使用base64在chrome上的性能问题解决方法
在开发后台上传图片的功能时候使用base64预览图片,结果在传入大量图片后导致chrome崩溃,代码如下 var img = new Image(); var render = new FileRea ...
- C++ 输入外挂
inline int read() { int x=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch> ...
- Spring Security核心类关系图
以有限的脑力记忆无限的Knowledge,多画图,多画图,多画图. 核心类Authentication 和 GrantedAuthority AbstractAuthenticationToken 由 ...
- hammerjs & Swiper & touch & gesture
hammerjs https://hammerjs.github.io/getting-started/ http://hammerjs.github.io/recognizer-swipe/ Swi ...
- [luoguP2782] 友好城市(DP)
传送门 转化成 lis 后 n2 搞就行 ——代码 #include <cstdio> #include <iostream> #include <algorithm&g ...
- Mysql中Group By使用Having语句配合查询(where和having区别)
注意 : having语句一般结合GROUP BY一起使用的..... Having短语与WHERE的区别!!! WHERE子句作用于基表或视图,从中选择满足条件的元组.HAVING短语作用于组,从中 ...
- [bzoj1232][Usaco2008Nov]安慰奶牛cheer_Kruskal
安慰奶牛 cheer bzoj-1232 Usaco-2008 Nov 题目大意:给定一个n个点,m条边的无向图,点有点权,边有边权.FJ从一个点出发,每经过一个点就加上该点点权,每经历一条边就加上该 ...
- SQLITE报错database is locked的解决办法
用firedac连接SQLITE数据库,空间tdbedit绑定字段name,如下语句修改其值时报错. procedure TForm1.Button3Click(Sender: TObject);be ...
- w3m命令行模式浏览网页
w3m是一个基于文本的网页浏览器,支持多种操作系统,在命令行终端可以很好的支持中文.即使在没有鼠标支持的情况下也可以检查网页的输出. 我们一般用Ubuntu的X Windows来看图形界面的东西,有没 ...