实时交易系统中参数实时更新解决方案
来源:互联网 发布:mac ps破解版安装教程 编辑:程序博客网 时间:2024/05/07 00:56
好久没有写技术方面的东西了,今天有时间写点实时交易系统方面的东东!
一. 问题提出
在实时交易系统中,参数的更新管理是整个系统稳定与高效的基础。当然,如果你的系统中的参数不需要实时的更新,那么就没必要看下去了,你可以随便从文件中、从数据库中读取参数,甚至于把参数写在程序代码中。
实时更新参数可分为两类需求:
- 多进程的参数没有依赖关系:这种情况下,这些参数都是独立的,一个参数的变化的影响范围只局限在一个进程中;
- 多进程的参数相互依赖:这种情况下,某个参数的变化,可能影响多个进程,并且改变的先后顺序要对结果产生影响,那么就必须实现进程的同步。
二. 解决方案
我这里假设的实时交易系统的模式如下:
- 初始化环境;
- 进入主循环;
- 阻塞在某处(比如等待端口的数据),或者轮询的处理业务(一般不用此方式,太消耗系统资源);
- 处理业务;
- 回到第3步。
对于第一种情况,可以按以下思路来实现,在进入主循环后,根据一个标志来读取参数(直接从文件或者数据库中读取),这个标志可以用共享内存来实现,再简单一点,甚至可以通过读取一个文件中的值来实现。
这是最简便的实现方式。
对于第二种(这也是常见的情况),可以采用 “共享内存 + 信号 + 版本策略” 的方式来实现:
- 把所有参数读取到共享内存中,为了实现进程同步,每个参数信息中要带上版本信息;
- 当外部管理程序更新参数后,触发一个主机中一个参数更新服务,把参数更新到一个新的版本,同时,保留旧版本的参数信息;
- 参数更新服务给所有注册的进程发送更新信号;
- 进程在收到更新信号时,应该处于两种状态中:一是阻塞在某处,一是正在处理业务。那么,如果是第一种情况,则先进入信号函数,进行参数的更新;如果是第二种情况,则应该设置一个标志位(表示下一次需要更新参数),然后继续进行业务处理;
- 版本策略用来同步进程的行为:
- 当一个进程的参数已经更新,这时它把处理结果转发到下一个进程,而下一个进程的参数有可能并没有来的及更新,那么根据策略,有两种行为:一是该进程等待参数的更新,二是报错,或者直接丢弃该笔业务;
- 当上一个进程的参数没有更新,而转发到的下一个进程已经更新了,那么根据策略,有两种行为:一是报错,或者直接丢弃该笔业务;二是下个进程也使用同上个进程同版本的参数来进行业务处理。
在这种机制下,可以做到参数的实时更新,把对实时业务的影响降到最低,整个实时业务都不会有任何中断和阻塞。
当然,这种机制也要求必须管理好共享内存和各种信号,不然,反而会带来程序的黑洞!^_^
- 实时交易系统中参数实时更新解决方案
- vue中虚拟dom,无法实时更新的解决方案
- At 命令使用手记(实时更新中...)
- Ajax在Ie中无法实时更新
- WPF中实现实时更新progressbar
- QT中实现当前时间实时更新
- WPF中实现实时更新progressbar
- 资源地址总览(实时更新中)
- Linux基本指令(实时更新中)
- 微软开发技术大全(实时更新中.............)
- 企业实时通信解决方案
- lucene的实时更新
- 时间实时更新
- E文(实时更新)
- 实时更新异地数据库
- 实时更新 (网络数据)
- datagridview Checkbox实时更新
- linux实时更新时间
- DW项目的总结与回顾
- swingworker--Tasks that Have Interim Results
- 破解试用软件的时间限制(原文地址:http://koudai.360.cn/u/23144328/article_206930349.html)
- 【C++】【CPR】浅析远程过程调用 RPC
- 制作VB安装程序问答(Package & Deployment)
- 实时交易系统中参数实时更新解决方案
- 写点什么好呢
- php测试用户网速
- DataGridView(C#使用SqlDataAdapter.Update更新数据库)
- SQL Server 2000
- CO成本核算操作流程
- 如何实现从SD卡更新NK?——(已经实现)
- 12.1有关于Doophp的东东
- 今天老婆生日