NFV一种提高进程消息高可用性的方法
1.背景及概述
1.1 背景
在做NFV的过程中,由于控制面进程被放置到不同虚拟机中,中间可能跨越路由器,因此期间网络有可能震荡,这种情况下保证高可用性就必须有保护机制,本文正是在这种背景下的考虑。
1.2 概述
原理其实很简单,有两个原则,一是这种保护机制不能让业务感知,二是尽可能简单。
2. 详述
2.1 正常交互

(1)源进程发送消息给目的进程
(2)目的进程回应消息给源进程
注意的是这些应该封装成公共库,以便复用。
2.2 异常交互
异常交互为两个方面,一是上述msg由于震荡被丢或被严重延时,二是ack由于震荡被丢弃或被严重延时。
2.2.1 msg异常
1)被丢,需要重传,为了保证唯一,需要加入进程1的id(记为clientid)、消息id(本进程唯一,且递增,记为msgid)、发送时间send_time。此外,需要设定重传interval、次数times。这些依然可能被丢弃,则应该通知源进程,所以这里应该有一段buff,用来唯一标识源数据(建议除正常id外,包括时间戳)。
2)被延时。除重传外,上次发送的消息的应答应该丢弃。
2.2.2 ack异常
1)被丢,则msg会被重发,重发时目的进程应该重新回复,若关联数据已不存在,则由目的进程业务做相关处理(如发送删除等)。
2)被严重延时。源进程重发,目的进程不论如何要回复。
2.3 总结及综述
(1)公共库的消息应该包含clientid、msgid、send_time,并设定interval、times,提供短buff(如64字节);
#define MAX_STORED_MSG 1000
#define MAX_BUFF_LEN 64
typedef unsigned int uint32;
typedef unsigned char byte;
typedef VOID (*send_fail_callback)(byte *user_buff);
typedef struct
{
uinit32 clientid;
uinit32 msgid;
uinit32 send_time;
byte times;
byte pad[3];
} MSG_T;
BOOL send_msg(byte *msg, uinit32 msg_len, const byte *user_buff, uinit32 user_buff_len);
(2)公共库lib有一个定时器,interval/2时间扫描重传链;
(3)发送消息挂在重传链中;
(4)若无回应,则更新发送时间后重传;
(5)若重传X次(如10次)后,回掉业务进程send_fail_callback。
(6)接收端若收到interval之前的消息,则丢弃。
(7)收到后立刻回应ack,clientid、msgid应与源消息相同,更新send_time。
(8)接收端若收到重复msg,与(6)处理相同重复回应,但要更新send_time。
(9)源端收到interval之前发送的ack,则丢弃。
NFV一种提高进程消息高可用性的方法的更多相关文章
- 【Android】一种提高Android应用进程存活率新方法
[Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...
- 一种提高Android应用进程存活率新方法
一.基础知识 1.Android 进程优先级 1.1 进程优先级等级一般分法:- Activte process- Visible Process- Service process- Backgrou ...
- 26种提高ASP.NET网站访问性能的优化方法 .
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...
- 几种Windows进程通信
32位Windows采用虚拟内存技术使每个进程虚拟4G内存,在逻辑上实现了对进程之间数据代码的分离与保护.那么相应的进程之间的通信也就有必要整理掌握一下. Windows进程间通讯的方法有很多:管道. ...
- 自己实现一个Electron跨进程消息组件
我们知道开发Electron应用,难免要涉及到跨进程通信,以前Electron内置了remote模块,极大的简化了跨进程通信的开发工作,但这也带来了很多问题,具体的细节请参与我之前写的文章: http ...
- Linux中的两种守护进程stand alone和xinetd
Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...
- AspNetWebApi管线中如果定义两种类型的消息处理程序(全局/路由)
AspNetWebApi管线中如果定义两种类型的消息处理程序(全局/路由) 在AspNetWebApi管线中存在两种类型的消息处理程序(Message Handler) 1.全局消息处理程序,所有的请 ...
- [No0000191]7种提高工作效率的Vim操作-Vim使用技巧(6)
Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性. 本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标 ...
- Delphi 7里Messages.pas里所有104种重定义消息种类,180种不同的消息名称
Delphi 7里Messages.pas里所有消息.经统计,共104种重定义消息种类,方便使用,180种不同的消息名称.省得像VC里一样,处处自己解析wParam和LParam参数进行分析.有空我要 ...
随机推荐
- 谷歌浏览器提示Adobe flash player不是最新版本的解决方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 参考资料 https://jingyan.baidu.com/article/a3a3f811c3d5058da2eb8a39.html 如果电脑 ...
- Servlet & JSP系列文章总结
前言 谢谢大家的捧场,真心感谢我的阅读者. @all 下一期,重点在 数据结构和算法 ,希望给大家带来开心.已经出了几篇,大家爱读就是我的开心. Servlet & JSP系列总结 博客, ...
- leetcode — minimum-path-sum
/** * Source : https://oj.leetcode.com/problems/minimum-path-sum/ * * * Given a m x n grid filled wi ...
- 一文带你看懂cookie,面试前端不用愁
本文由云+社区发表 在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并 ...
- 最好用的编辑器之一:Vim-Go环境搭建
本文由Librant发表 如果说在Linux环境下,什么编辑器最好用,如果我说是VIM,估计会有一大部分人嗤之以鼻,怎么可能.VIM可能是他用过众多编辑器最难用的一个.在我司用的是云虚拟机,说实话吧, ...
- spring springmvc mybatis maven 项目整合示例-导航页面
spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目 ...
- MySQL的GROUP_CONCAT函数
先根据如下语句生成测试表并填充数据 CREATE TABLE z ( a INT, b INT); INSERT INTO Z SELECT 1,200; INSERT INTO Z SELECT 1 ...
- linux添加字体
执行命令发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体库都没有,那么接下来就记录一下在Linux CentOS 7中如何安装字体库以及中文字体. 安装字体库 在Ce ...
- 【转】消除代码中的 if-else/switch-case
在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现.做的不好的会直接把实现的代码放在 if-else/swit ...
- python基础学习(六)函数基础
函数的基本使用 函数的定义 def 函数名(): 函数封装的代码 …… def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 函数名称 的命名应该 符合 ...