none
向大牛们请教基于WCF来构建金融类交易系统的技术思路 RRS feed

  • 问题

  •      文字较多,还请耐心看完,望不吝赐教,多多指点。

     

    我们的业务应用场景:

    业务规划是这样的,在全国有一个总部,总部做为数据中心(含备份中心),各主要城市设有交易中心/营业部,开展类似产权交易类的业务,各交易中心均有柜台系统和交易系统,投资者可以从网站下载交易行情客户端。(业务模式有点类似证券的集中交易系统,当然我们的业务量和交易量没有证券业务那么大,我们针对的基本都是企业)

             属于金融类创新业务,目前处于筹备期,软件系统方面是考虑分期实施,先做资料申报、办理、登记挂牌等方面的基本业务功能,然后再上交易、结算等相关功能。

             业务数据方面,各交易中心的业务办理过程中,会存在大量的电子文档和影印扫描件的传输,要求全部传输到总部;交易方面,开始可能考虑采用挂牌登记、竞价的方式,逐步再开展实时委托买卖/交易撮合的实时模式(类似证券)。

     

    技术选型方案:

    方案1采用成熟的第三方中间件的方案:购买成熟的消息中间件来解决文件和消息的可靠传输,后续联机交易处理也可以考虑购买成熟的交易中间件。服务端用C++做开发,客户端可以用winform

    此方案的优点是类似解决方案比较成熟,目前证券、金融以及电信行业应用比较广泛,性能和容量方面足够支撑业务的发展;弊端是依赖第三方的中间件,购买的成本也比较高(如消息中间件按点收取许可费用、交易中间件按CPU/并发数收取费用)。

    方案2基于WCF技术来实现通讯和消息的可靠传输,全部基于Windows/.NET平台做开发。

             此方案的优点我就不说了,大家都懂的。目前唯一顾虑点是担心以后业务量大时的性能和效率问题,之前也没接触过有基于WCF构件的联机交易处理系统的解决方案。

            

          目前比较倾向用方案2(基于WCF的方案),团队现有成员基本也都是.NET的程序员,虽然没有应用过WCF,但学习起来应该不难。目前有几个方面的问题正在探讨和学习:

     

    1、 如何解决大量的文件传输问题

    我们的柜台系统在提交一笔业务申请的时候,同时可能会提交比较多的电子文档和影印件(office文档/PDF/JPG文件),文件大小可能从几M甚至上百兆不等,因为文件量比较大,业务上可以接受文件比业务数据延迟到达总部,但文件必须可靠传输到总部的数据中心来。

    对于这样的应用,是用MSMQ绑定合适还是用TCP绑定合适。可能MSMQ离线支持更好一点,是不是用MSMQ方式更好,MSMQ断点续传好处理吗?

     

    2、并发处理/性能的问题

             对于这种同时存在大量文件传输、业务请求以及联机交易(项目分期实现)的业务场景,系统并发处理这一块该考虑哪些方面(服务器硬件配置、基于windows server的负载均衡NLB或数据库SQL Server的负载均衡不在这里讨论)。

             目前考虑到的几个地方:

    1)客户端

    客户端有文件传输需求时,客户端程序自动开启一个独立的进程来专门负责文件的可靠传输,和业务处理分开(不在同一个事务中),业务先提交,文件可以延迟传输(包括断网重传/续传)。

    对于Winform客户端与服务端的连接问题,是不是每次业务请求都创建新的连接,完成后立即释放连接?有无必要使用连接池之类的东西?

    2)服务端

    分成3个独立的WCF服务:业务处理WCF服务、文件传输WCF服务、联机交易WCF服务,将文件传输WCF服务部署独立的服务器。

             服务宿主全部采用Windows服务的方式(可以再写一个监控客户端,用于监控各WCF服务运行情况)。

    WCF有并发模式,我们的服务端是不是就不用考虑多线程的支持了,通过设置WCF的行为属性配置就可以了吧?

    3)是否有必要使用消息路由服务器

             利用WCF的消息路由功能,部署消息路由服务器,投资者使用的交易行情客户端,全部通过消息路由服务器转发消息。

    同时,随着业务开展,交易中心的业务量较大时,是否也可以考虑增设消息路由服务器,例如根据业务分部部署区域消息路由服务器,区域下面的客户端由区域服务器进行消息(尤其是文件)转发。这样是否能增加系统整体的处理性能,或是反而降低了性能,因为实际瓶颈可能在服务端?

              

             正在研读WCF方面的资料,理解比较肤浅,还请各位多多指导,感谢!
    • 已编辑 pipzeng 2011年5月20日 2:38 补充
    2011年5月20日 2:35

答案

  • 购买中间件平台其实很多时候也需要二次开发。

    如果考虑技术成本,团队都是.NET程序员,使用WCF的话,应该相对容易,不存在转型的风险。

    1.WCF支持大文件传输,考虑到是交易系统,数据安全性比较重要,这一点WCf支持的也比较好,其次大文件传输WCF也提供了很好想选项,比如流处理机制,还有绑定的优化机制。MSMQ适用于企业局域网。这个又限制。

    2.

    (1)客户端可以每次都实例化一个新的代理实例,也可以使用同一个,这和服务端实例模式有关系。连接池在需要的时候可以实现。

    (2)并发WCF支持的很好了,但是多线程需要考虑,比如你系统有访问同一个文件资源的情况。这个设计的时候可以再做分析。

    (3)WCF有消息路由功能,但是又限制,毕竟不是消息中间件这么强大。交易量大,首先是考虑服务端的负载问题,是否能满足需求。

    消息中间件如果只用来做消息缓存或者消息转发,对于性能并不能带来什么好处。相反应该考虑如何提高服务端的并发处理能力。也就是伸缩性的问题。

     

    太客气,欢迎交流~

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年5月22日 14:09
    版主
  • 核心是联机交易系统,联机交易系统的核心又是并发控制和性能提升。

    并发控制的目的是保证交易的正确执行,因此不管是否用中间件,处理交易的核心系统都必须串行处理交易请求(当然,我们不排除可以在某些场景下使用并行撮合交易的可能)。

    由于是串行,那么单台机器的性能就是有限的,随着客户负载的提升,核心机器的性能就是整个系统的瓶颈,因此证券和电信行业会选择中间件+小型机的模式来实现联机交易的核心部分,而且这部分程序也通过C来实现,

     

    WCF可用于查询系统和联机交易系统的辅助设施建设,可以用WCF构建多个负载均衡的买入/卖出服务器,通过这些WCF服务器访问中间件,此模式可以节约中间件的连接数,同时又实现了性能的扩展。

     

    处理大文件上传,优先选用HTTP,MSMQ不适合体积庞大的消息。要实现断点续传,请考虑Socket编程。同时,你还必须考虑占用的网络带宽,以及你们的中心服务器是否和柜台在不同地域。

    交易通道和查询通道分离,竞价完后的最新价格通过核心交易系统向各WCF服务器广播或写入数据库,

     

    同时请考虑安全性问题。

     

     

    2011年5月23日 9:17
  • Hi,

    WCF主要用于分布式环境,可以实现通讯和消息的可靠传输,而且可以跨平台交互。提供事务处理等。

    1,WCF支持大批量文件传输,只要绑定的协议配置合理,大小限制合理,就可以向服务器传输大文件,而且WCF支持Stream传输文件。对于可靠性及安全性,我认为Http绑定相对于MSMQ与TCP更好些,它提供更好的事务处理功能,MSMQ一般用在局域网中,不太适合传送大文件。

    2,WCF自身就支持并发模式,可以通过设置WCF的行为属性配置,但是针对该系统,存在大量的并发访问,在服务端还是应该考虑多线程以提高系统响应速度。

    3,WCF消息本身也支持路由功能,如果使用消息路由服务器,会对系统的整体性能有影响.

     


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年5月26日 3:00
    版主

全部回复

  • 购买中间件平台其实很多时候也需要二次开发。

    如果考虑技术成本,团队都是.NET程序员,使用WCF的话,应该相对容易,不存在转型的风险。

    1.WCF支持大文件传输,考虑到是交易系统,数据安全性比较重要,这一点WCf支持的也比较好,其次大文件传输WCF也提供了很好想选项,比如流处理机制,还有绑定的优化机制。MSMQ适用于企业局域网。这个又限制。

    2.

    (1)客户端可以每次都实例化一个新的代理实例,也可以使用同一个,这和服务端实例模式有关系。连接池在需要的时候可以实现。

    (2)并发WCF支持的很好了,但是多线程需要考虑,比如你系统有访问同一个文件资源的情况。这个设计的时候可以再做分析。

    (3)WCF有消息路由功能,但是又限制,毕竟不是消息中间件这么强大。交易量大,首先是考虑服务端的负载问题,是否能满足需求。

    消息中间件如果只用来做消息缓存或者消息转发,对于性能并不能带来什么好处。相反应该考虑如何提高服务端的并发处理能力。也就是伸缩性的问题。

     

    太客气,欢迎交流~

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年5月22日 14:09
    版主
  • 核心是联机交易系统,联机交易系统的核心又是并发控制和性能提升。

    并发控制的目的是保证交易的正确执行,因此不管是否用中间件,处理交易的核心系统都必须串行处理交易请求(当然,我们不排除可以在某些场景下使用并行撮合交易的可能)。

    由于是串行,那么单台机器的性能就是有限的,随着客户负载的提升,核心机器的性能就是整个系统的瓶颈,因此证券和电信行业会选择中间件+小型机的模式来实现联机交易的核心部分,而且这部分程序也通过C来实现,

     

    WCF可用于查询系统和联机交易系统的辅助设施建设,可以用WCF构建多个负载均衡的买入/卖出服务器,通过这些WCF服务器访问中间件,此模式可以节约中间件的连接数,同时又实现了性能的扩展。

     

    处理大文件上传,优先选用HTTP,MSMQ不适合体积庞大的消息。要实现断点续传,请考虑Socket编程。同时,你还必须考虑占用的网络带宽,以及你们的中心服务器是否和柜台在不同地域。

    交易通道和查询通道分离,竞价完后的最新价格通过核心交易系统向各WCF服务器广播或写入数据库,

     

    同时请考虑安全性问题。

     

     

    2011年5月23日 9:17
  • 感谢两位大侠的指点!
    2011年5月23日 23:44
  • Hi,

    WCF主要用于分布式环境,可以实现通讯和消息的可靠传输,而且可以跨平台交互。提供事务处理等。

    1,WCF支持大批量文件传输,只要绑定的协议配置合理,大小限制合理,就可以向服务器传输大文件,而且WCF支持Stream传输文件。对于可靠性及安全性,我认为Http绑定相对于MSMQ与TCP更好些,它提供更好的事务处理功能,MSMQ一般用在局域网中,不太适合传送大文件。

    2,WCF自身就支持并发模式,可以通过设置WCF的行为属性配置,但是针对该系统,存在大量的并发访问,在服务端还是应该考虑多线程以提高系统响应速度。

    3,WCF消息本身也支持路由功能,如果使用消息路由服务器,会对系统的整体性能有影响.

     


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年5月26日 3:00
    版主