实时交易系统中参数实时更新解决方案

来源:互联网 发布:mac ps破解版安装教程 编辑:程序博客网 时间:2024/05/07 00:56

好久没有写技术方面的东西了,今天有时间写点实时交易系统方面的东东!

 

一. 问题提出

    在实时交易系统中,参数的更新管理是整个系统稳定与高效的基础。当然,如果你的系统中的参数不需要实时的更新,那么就没必要看下去了,你可以随便从文件中、从数据库中读取参数,甚至于把参数写在程序代码中。

     实时更新参数可分为两类需求:

  • 多进程的参数没有依赖关系:这种情况下,这些参数都是独立的,一个参数的变化的影响范围只局限在一个进程中;
  • 多进程的参数相互依赖:这种情况下,某个参数的变化,可能影响多个进程,并且改变的先后顺序要对结果产生影响,那么就必须实现进程的同步。

二. 解决方案

    我这里假设的实时交易系统的模式如下:

  1. 初始化环境;
  2. 进入主循环;
  3. 阻塞在某处(比如等待端口的数据),或者轮询的处理业务(一般不用此方式,太消耗系统资源);
  4. 处理业务;
  5. 回到第3步。

 

    对于第一种情况,可以按以下思路来实现,在进入主循环后,根据一个标志来读取参数(直接从文件或者数据库中读取),这个标志可以用共享内存来实现,再简单一点,甚至可以通过读取一个文件中的值来实现。

    这是最简便的实现方式。

 

    对于第二种(这也是常见的情况),可以采用 “共享内存 + 信号 + 版本策略” 的方式来实现:

  1. 把所有参数读取到共享内存中,为了实现进程同步,每个参数信息中要带上版本信息;
  2. 当外部管理程序更新参数后,触发一个主机中一个参数更新服务,把参数更新到一个新的版本,同时,保留旧版本的参数信息;
  3. 参数更新服务给所有注册的进程发送更新信号;
  4. 进程在收到更新信号时,应该处于两种状态中:一是阻塞在某处,一是正在处理业务。那么,如果是第一种情况,则先进入信号函数,进行参数的更新;如果是第二种情况,则应该设置一个标志位(表示下一次需要更新参数),然后继续进行业务处理;
  5. 版本策略用来同步进程的行为:
  • 当一个进程的参数已经更新,这时它把处理结果转发到下一个进程,而下一个进程的参数有可能并没有来的及更新,那么根据策略,有两种行为:一是该进程等待参数的更新,二是报错,或者直接丢弃该笔业务;
  • 当上一个进程的参数没有更新,而转发到的下一个进程已经更新了,那么根据策略,有两种行为:一是报错,或者直接丢弃该笔业务;二是下个进程也使用同上个进程同版本的参数来进行业务处理。

    在这种机制下,可以做到参数的实时更新,把对实时业务的影响降到最低,整个实时业务都不会有任何中断和阻塞。

    当然,这种机制也要求必须管理好共享内存和各种信号,不然,反而会带来程序的黑洞!^_^

 

 

 

 

 

原创粉丝点击