免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 35312 | 回复: 52

[金融] 关于综合前置系统的想法和实现^_^ [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-05-15 00:41 |显示全部楼层
以前写过几个前置,觉得很多代码和模式都可以重用,突然想自己开发一套综合前置系统,再配上论文作为自己的工程师职称投稿 ^_^

总结一下前置功能(技术需求):
        各类外联平台的通讯接入和转发
        各类外联系统的报文格式转换
        前置内部本地交易平台
        前置管理和监控
        中间业务小核心系统(拥有基础的帐务处理能力)
        本地或跨机日志落地
        其它(继续想...)

基于以上功能需求的概念设计:
        前置内有若干服务,主要有通讯服务、报文转换服务、应用服务等
        不同的服务主进程提供挂接槽挂接不同组件(动态链接库)成为服务实例,动态挂接行为实现了组件重用和可配置性,组件表达了通用处理模式,外部参数文件表达了组件内部具体处理控制参数
        外部参数文件有方案文件和配置文件,方案文件表达了某一服务挂接了哪些组件,配置文件表达了某个组件具体内部行为(控制参数)
        前置内部各个服务实例通讯由UNIX消息队列连接实现报文流转,考虑大报文情况(1MB以上的报文size)
        本地交易平台其实是一个应用服务器,创建应用处理单元池,由报文交易码配置组合处理单元序列实现业务处理
        外部参数文件内提供文件包含、宏替换等扩展功能,便于同类资源的统一管理,类似于/etc/hosts和/etc/services
        其它(继续想...)
       
前置服务设计概要:
        通讯服务提供 通讯引擎组件槽、数据预处理组件槽
                通讯引擎组件 提供了数据输入输出方式,实例处理流程:挂接定位调用通讯引擎组件输入函数、挂接定位调用数据预处理组件预处理函数、定位调用通讯引擎组件输出函数
                比如银联两进两出通讯接入需求,创建四个通讯服务实例,两个服务实例的通讯引擎组件槽挂接 长连接TCP数据转发消息队列通用通讯引擎,其配置文件控制通讯头为4个字节,本地绑定ip和port,数据预处理组件槽挂接 提取8583交易码和流水号到前置内部通用消息队列消息包;两个服务实例的通讯引擎组件槽挂接 消息队列数据转发长连接TCP通用通讯引擎,其配置文件控制通讯头为4个字节,对方主机ip和port,数据预处理组件槽挂接 空。
        报文转换服务提供 通讯引擎组件槽、报文映射表组件槽、报文转换引擎组件槽
                还是以金卡为例,创建两个报文转换服务实例,一个服务实例的报文转换引擎组件槽挂接 8583格式-后台固定格式报文转换引擎,报文映射表组件槽挂接 金卡交易报文8583格式-后台固定格式报文域映射表组件,一个服务实例的报文转换引擎组件槽挂接 后台固定格式-8583格式报文转换引擎,报文映射表组件槽挂接 金卡交易后台固定格式报文-8583格式报文域映射表组件。简而言之,报文转换引擎 提供了源格式报文转换为目标格式报文的通用转换机制,报文映射表 提供了具体业务报文域映射规则。
        应用服务提供 通讯引擎组件槽、应用序列组件槽
                以借记卡取款为例,应用服务实例挂接了借记卡业务应用序列组件,接收一笔交易报文,由交易码查询到取款业务处理单元序列(所有业务处理被拆分封装成子交易,分散在一个或若干动态链接库中),按序列挂接相应动态链接库,动态定位函数逐一处理之,比如卡登记簿查询、卡状态检查、客户帐查询、卡余额检查,记客户帐、柜员尾箱查询、尾箱余额检查、记现金帐等等,挂接过动态链接库和定位过的函数放入应用处理单元池中以备下次直接使用,以提高交易处理速度。在日常更新程序时,向该服务实例发送应用处理单元池重置信号,实例卸载所有挂接缓冲,然后维护人员更新应用序列组件文件和应用处理单元组件文件,新的交易上来,实例就会挂接新的交易处理逻辑。
        前置管理和监控放在异地管理机上,采用字符终端窗口或者图形窗口,之间设计通用控制协议
        日志分为前置事件日志和服务实例日志,可考虑异地落地
        其它(继续想...)

目前进度:
        开发完成通讯服务主进程,并开发了一些比较通用的通讯引擎,比如 长连接TCP-消息队列通讯引擎、消息队列-长连接TCP通讯引擎、消息队列-消息队列通讯引擎、MQ-消息队列通讯引擎、消息队列-MQ通讯引擎 等
        开发完成报文转换服务主进程,并以目前正在的项目在用的报文转换引擎,比如 固定格式-固定格式报文转换引擎、分隔符格式-固定格式报文转换引擎、ISO8583-固定格式报文转换引擎、固定格式-ISO8583报文转换引擎 等
        开发完成应用服务主进程,目前还没有项目依托
        本人以前开发有基于字符终端窗口系统的前台环境,可作为之
        本人以前开发日志系统(支持跨机落地),可作为之
        开发完成30所加密机通讯守护及应用调用库

大家有什么想法欢迎和我讨论,期待您的回复 ^_^

[ 本帖最后由 BetonArmEE 于 2009-5-15 00:50 编辑 ]

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
发表于 2009-05-15 13:32 |显示全部楼层
对账 自动冲正 分段日终 可能还有柜员管理。这些都是前置产品的关键

论坛徽章:
0
发表于 2009-05-15 14:11 |显示全部楼层

回复 #1 BetonArmEE 的帖子

报文转换可以考虑只采用一个转换适配器,通过报文定义配置实现报文转换;还有最好报文都通过内部各式报文作为参照进行转换,不要做成每加一种报文就要增加报文转换适配器。
此外,综合前置应该考虑有数据总线,交易流程控制处理

论坛徽章:
0
发表于 2009-05-15 14:11 |显示全部楼层
有没考虑支持跨平台(Windows、Unix)

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-05-16 00:17 |显示全部楼层
原帖由 dlms 于 2009-5-15 13:32 发表
对账 自动冲正 分段日终 可能还有柜员管理。这些都是前置产品的关键


对帐可考虑放入应用服务,其实应用服务是个与业务分离的技术体,应用服务与具体业务无关,只是分析大多数交易本地处理模型抽象成一类接口标准,特定逻辑由特定的应用处理单元来实现

添加 冲正服务,提供 通讯引擎组件槽、冲正定时器组件槽
        冲正定时器组件 接收前置内部消息队列报文,开始定时,如果一定时间内收到 交易处理完成报文 则放弃冲正,否则超时,发送冲正触发报文 到 应用服务,创建一应用服务组装冲正报文法向 某一模块或某一通讯服务
       
需要引发冲正的业务 在其 报文转换服务 中到通讯引擎组件 采用 输入消息队列-冲正定时器消息队列、输出消息队列组件,报文转换输出前 复制一份报文同时发往冲正服务,触发冲正定时

前置不需要日终设计,还有核心系统柜员管理 都应该放在后台

新增 报表服务(还没具体想)

[ 本帖最后由 BetonArmEE 于 2009-5-16 00:59 编辑 ]

论坛徽章:
0
发表于 2009-05-16 00:32 |显示全部楼层
学习路过

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-05-16 00:45 |显示全部楼层
原帖由 propsyche 于 2009-5-15 14:11 发表
报文转换可以考虑只采用一个转换适配器,通过报文定义配置实现报文转换;还有最好报文都通过内部各式报文作为参照进行转换,不要做成每加一种报文就要增加报文转换适配器。
此外,综合前置应该考虑有数据总线, ...


当初也想过把 报文转换服务 中的 报文转换引擎 分为 报文输入引擎 和 报文输出引擎,这样便于各类报文自由组合,但后来难以设计中间存储格式 以及 报文输入和输出接口设计,所以才合并一起
如果大哥已经有好的解决方案,希望能和我们一起分享 ^_^

我对数据总线还不是很有概念,我的设计是这样,先在visio里画出某一业务各个服务实例关系总图,再具体创建服务实例,挑选合适的组件挂接上去(配置方案文件),创建一组消息队列key(定义在~/etc/ipckey.conf中),各服务实例通讯引擎配置文件包含引用,构建起消息队列总线 和 每个服务实例 输入、输出、错误消息队列定义 构建报文交易流
目前只是通过编写方案文件和配置文件构建每个服务实例 以此来完成整个系统的交易流转,将来可考虑图形化界面软件统一设计和部署
总线模式让人联想到 星型结构的报文流设计,即存在交易调度模块,所有报文每次处理后都流转回 交易调度模块 通过查询路由以确定下一模块,这样的设计虽然比较统一化,但是存在一个致命的缺点,可能会存在交易流逆路造成报文转递死锁,解决方法是使用即时派生子进程或者进程池线程池来避免堵赛,但前者在交易特别繁忙的情况下会加重系统资源负担,后者则会增加前置复杂性和不稳定性

[ 本帖最后由 BetonArmEE 于 2009-5-16 00:58 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-05-16 00:56 |显示全部楼层
原帖由 enigma1983 于 2009-5-15 14:11 发表
有没考虑支持跨平台(Windows、Unix)


目前所采用的IPC库、动态链接接口库、SOCKET通讯库等等都采用跨平台函数库,所以基于这些库的前置系统具有非常优良的移植性,甚至不需要改动应用层代码,直接在目标环境全部编译一遍即可无功能歧视的运行。比如 线程库 设计了统一的创建、调度、销毁等函数接口,内部基于目标操作系统实现,源代码中使用条件编译,编译时识别为windows则链接win32api实现线程功能,如果识别为unix则链接pthread来实现线程功能。
目前支持的环境有Window各版本、unix绝大多数变种、linux大多数发行版本。

[ 本帖最后由 BetonArmEE 于 2009-5-16 00:59 编辑 ]

论坛徽章:
0
发表于 2009-05-17 19:35 |显示全部楼层
能不能讲一下你的IPC库怎么做到跨平台的?我对WINDOWS的IPC不熟悉,也想做一个这样的库。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-05-19 00:25 |显示全部楼层
原帖由 enigma1983 于 2009-5-17 19:35 发表
能不能讲一下你的IPC库怎么做到跨平台的?我对WINDOWS的IPC不熟悉,也想做一个这样的库。


unix部分就不说了
说说windows下的实现

信号量使用"semaphore objects"实现
    创建信号量 CreateSemaphore
    打开信号量 OpenSemaphore
    关闭信号量 CloseHandle
    P操作 WaitForSingleObject
    V操作 ReleaseSemaphore
    具体函数原型和用法请查阅MSDN,路径为"平台SDK"->"Windows Base Services"->"Interprocess Communications"->"Synchronization"->"About Synchronization"->"Synchronization Objects"->"Semaphore Objects"
    (不要告诉我你没装MSDN,囧~)

共享内存使用"File Mapping"实现
    创建共享内存 CreateFileMapping
    打开共享内存 OpenFileMapping
    关闭共享内存 CloseHandle
    连接共享内存 MapViewOfFile
    断开共享内存 UnmapViewOfFile
    具体函数原型和用法请查阅MSDN,路径为"平台SDK"->"Windows Base Services"->"Interprocess Communications"->"File Mapping"->"About File Mapping"

消息队列实现有点复杂,因为在windows下没有提供类似于unix消息队列的进程间通信的方式(不考虑MSMQ),所以只能用共享内存和互斥量(Mutex Objects)模拟实现,共享内存前面说过了,下面是互斥量对象
    创建互斥量 CreateMutex
    打开互斥量 OpenMutex
    关闭信号量 CloseHandle
    进入临界区操作 WaitForSingleObject
    弹出临界区操作 ReleaseMutex
    共享内存内读写消息包使用自己写的函数库iSSM
(为什么不用临界区对象?因为windows下的临界区对象只能在一个进程内使用。)

需要注意的是:
    ·windows下的Synchronization对象使用名字(字符串)作为IPC键值(对应unix下的ipckey),使用HANDLE数据类型作为IPC标识符(对应unix下的ipcid)
    ·windows下的共享内存、信号量等都是引用计数作为生命周期,当最后一个进程解除引用后,IPC对象被自动删除,所以如果要持久化需要写一个服务专门用来保存这些对象(该服务作为最后一个引用它的进程)。而unix下的ipc则是系统级的,即只有显式的删除或者机器重启才能销毁IPC对象。

如果您找到更好的windows实现,欢迎和我交流 ^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP