第一周:ISON整体结构及源码分析(李哲希&曾士轩) - TDB-program/TDB-program GitHub Wiki

ISON整体框架:
系统登录 登录配置 网络配置 level2交易面板 level2方向键及颜色设置 前端(TWD) 大单设置 配置功能 交易记录快捷键设置 密码设置 获取行情 level2界面 下单 交易记录 撤单 改单 交易功能 当前仓位
个人信息 仓位 各股票盈亏 预约券剩余数量 可融券剩余数量 篮子交易 辅助功能 短线精灵 买一卖一(该功能待完善后添加) 后台: addActors(actors:Object)
Stage getDatabase(id:String) getMemdb(id:String) onEvent(event:Event) onStart() onStop() request(connector_id:String, reciever:String, msg:String) request(connector_id:String, reciever:String, msg:String,
Actor callback:Function) publish(pub_id:String, topic:String, msg:String) 类·接口(ISON-BASE) subscribe(sub_id:String, topic:String) unSubscribe(sub_id:String[, topic:String]) unSubscribe(sub_id:Array, topics:Array) addTimer(delay_ms:Int32[, times:Int32]) endTimer(timer_id:Int32)

                       msg:String
                       type:String
               Event   topic:String
                       reply(msg:String)
                      forward(connector_id:String, reciever:String[, msg:String])
                  replyTo(hops:Object, reciever:String[, msg:String])
                     query(stmt:String)
                     createStatement()
               Database  prepare(stmt:String)
                          commit()
                          rollback()
                           Execute(stmt:String)
               	   ExecuteQuery(stmt:String)
               Statement  getRpc()
                           getResultSet()
                       more()
                    rowsCount()
          ResultSet  next()
                  fetchRow()
                    get(key:String)
                 set(key:String, value:String)
                          check(key:String)
                          add(key:String, value:String)
                          replace(key:String, value:String)
                          append(key:String, value:String)
                          seize(key:String)
                      remove(key:String)
             clear()
                      count()
            Memdb  inc(key:String, value:Integer[, orig:Interger])
                      incDouble(key:String, value:Number[, orig:Number])
                      cas(key:String, ovalue:String, nvalue:String)
                      setBulk(values:Object[, atomic:Boolean])
                      getBulk(keys:Array[, atomic:Boolean])
                      removeBulk(keys:Array[, atomic:Boolean])
                      matchPrefix(prefix:String[, max:Integer])
                      getByPrefix(prefix:String[, max:Integer])


                             setString(value:String)
                             setInt(value:Integer)
                             setDouble(value:Number)
            PreparedStatement  Execute()
               	           ExecuteQuery(stmt:String)
                                   getRpc()
                                   getResultSet()
                              more()
               info(msg:String)
                       info(v:Int, msg:String)
          Log  error(msg:String)
                warning(msg:String)
                Version @1
          Init @2
          Status @3
          Connect @4

接口(ISON-TGWAPI) Disconnect @5 同步接口 Send @6 异步接口 Exit @7 同步接口 tgwSleep @8 tgwLogin @9 tgwSub @10 tgwTime@11 Seqno Head GetMarketData(行情请求) DataType BeginDate BeginTime EndDate EndTime ErrNo
ErrInfo IsLast Data:[Code,Count,HQ:[{}]] 接口(SDS) Seqno Head Market ErrNo GetCodeTable(请求股票代码表) ErrInfo IsLast Codes SelectRFASC SelectRFDES SlectOpenFloatASC SlectOpenFloatDES SlectHighFloatASC 请求股票排序指标 SlectHighFloatDES SlectLowFloatASC SlectLowFloatDES SlectRangeASC SlectRangeDES

体系结构 一、ISON-BASE 1.层次结构: ISON-BASE体系大致分为4层,从上往下依次是 业务逻辑层,以JavaScript业务脚本的形式存在 脚本引擎层,为业务逻辑层提供执行环境 IB-Engine中间层,为业务逻辑层提供所有的功能和系统资源 IB-Kernel底层,支撑整个系统的运行

2.逻辑结构

每个IB实例是一个独立的程序,支持在Linux及Windows上运行。 在IB内部,都是以工作单元(Stage)的方式存在,每个Stage是一个独立的线程,每个Stage上有多个Actor执行任务,每个Actor都是由事件驱动的. 每个Stage有一个Listener端点和若干个Connector端点。Listener用于接收客户端的请求,并根据请求的Actor名把请求分派到内部的Stage上。每个Stage可以通过Connector连接到其他Stage上,Actor可以通过Connector请求其他Stage上的Actor。 每个Stage有若干个Publisher和Subscriber端点,Actor可以通过Publisher发布消息,也可以通过Subscriber订阅其他Stage的消息。 Stage按功能可分为业务Stage和系统Stage。系统Stage主要向业务Stage提供系统服务,如数据库访问、内存数据库访问、日志记录等系统功能。 IB系统启动的时候读取YAML格式的配置文件,根据配置文件创建Stage和Actor,并建立数据库连接和网络连接等。

3.分布式结构 IB除了支持单机模式之外,还能使用开源的分布式协调服务程序ZooKeeper来实现分布式部署和高可用性部署。IB的高可用性支持Active-Active, Active-Standby模式。 单机模式: IB作为独立的进程运行,所有的配置文件和业务程序包都在本地。 集群模式: 集群中多个IB作为一个整体协同工作,配置文件和业务程序包通过配置管理服务器发布,配置管理器把配置文件上传到ZooKeeper,IB启动以后从ZooKeeper读取配置文件获取业务程序包的信息,并从配置服务器下载业务程序包。配置文件的修改从配置管理服务器发起,然后由ZooKeeper通知IB更新配置。 Active-Active模式: 多个IB同时服务客户端的请求 Active-Standby模式: 同时只能有一个IB服务客户端的请求,其他IB待机。如果当前正在服务的IB突然宕机,则其中一个待机IB自动激活来服务客户端的请求。

4.拓扑结构

每个Stage都绑定一个Listener,用于接受客户端或者其他Actor的请求调用 每个Stage可以有若干个Connector用于连接其他Stage调用其他Actor 每个Stage可以有若干Publisher用于Actor对外发布消息 每个Stage可以有若干个Subscriber用于订阅其他Actor发布的消息 Stage可以直接对外提供服务,如ClientA可以直接访问StageA。 Stage也可以运行在代理之后,这样可以实现Stage的横向扩展,如同时运行多个处理相同业务的Stage,Shared Queue代理会自动把客户端请求按照公平队列方式分发到多个Stage上处理。如ClientC或ClientD直接把请求发送到Shared Queue代理,然后StageB和StageB’其中之一得到请求,处理完以后再回复给客户端。 同样也可以通过Forwarder代理来实现客户端通过一个队列订阅多个Stage发布的消息。 如ClientA,ClientB,ClientC可以通过订阅一个Forward代理来实现订阅StageA和StageB发布的消息。

二、ISON-TGWAPI 1.逻辑结构

如上图所示: 交易前端通过TGWAPI.DLL,访问TGW服务器。 TGW协议采用的是ISONPACK协议,具体说明参见:ISON-OMS的相关文档。

功能模块总结:

登录模块:实现系统登录。