一、概述 在网络交易的应用中,虽然B/S模式获得广泛应用。但是在专业操作员使用的交易终端和自动数据收集终端(传感器,物联网)场合,需要支持高速的数据录入和数据交换,C/S/S模式有着独特的优势。尤其是在要求大量的并发用户(连接数)、高吞吐量和快速响应的交易系统,C/S/S模式有着无可比拟的优势。C/S/S模式的软件可以自行开发,但是想达到上述要求,并使整个应用系统达到稳定可靠安全的运行,需要精良的设计和优异的开发队伍,并经过长时间的运行考验。因此采用成熟的,通用的交易中间件是解决C/S/S开发的捷径。 二、SDBC的特点: SDBC 是Secure DataBase Connect(安全数据库连接)的缩写,它就是这样一个成熟的,通用的交易中间件。它在大量客户端的并发连接和大量服务器并行处理的场合下,提供高性能的,高可伸缩性的,高可靠性和高安全性的,快速响应的OLTP应用系统。SDBC是一套基于C/C++和UNIX/LINUX平台(并以此为基础跨越各种硬件平台)的交易中间件框架,结合各种数据库(ORACLE、DB2、SYBASE…..还有其他),提供高效,高安全性的开发库。目前客户端支持C/C++,JAVA。由于它强调高效率,高安全性,所以首推上述平台,当然也可以移植到其他操作系统(如WINDOWS、Mac等)和不同的开发语言和不同的数据库。 SDBC的通信协议基于TLV(Type,Length,Vector)模式并有一定的扩展,基于Byte流数据,因此支持各种应用数据包格式和音、视频流数据的传输。在SDBC框架环境下,用户可以轻松构建自己的OLTP系统,以自定义远过程的方式,方便的开发在线交易服务系统、物联网数据系统。也非常适宜作为web services的后台处理引擎。 三、SDBC的安全: 在开放的网络环境下,人们获得的最经济的最广泛的信息通道,但是,互联网是双刃剑,其上充斥着各种不安全因素。各企业不得不使用昂贵的专用网络来处理自己的核心业务。这对广大的中小企业是难以承受的负担。SDBC提供了一系列的解决方案,支持企业在不安全的开放网络上进行安全的交易。这将大大节约企业核心在线业务系统的构建成本和运营成本。企业的核心系统被保护在核心域,如果其防火墙仅对互联网开放SDBC协议端口,就能够保证核心系统不受侵犯。SDBC协议能够让符合规则的用户正常的进行交易,而把其他任何访问拒之门外。在高密度攻击下SDBC系统不会崩溃,已经成功登录的用户会继续他们的业务,在攻击停止后系统自动恢复正常。 SDBC有完整的信息传输加密、可选的基于设备的认证、授权机制和分级的审计日志机制。当然也支持用户自己的加密、认证、授权、审计机制。SDBC的安全理念是“让该来的人做该做的事”,围绕这个理念,解决:你是谁,你该做什么,你何时做了什么……这些问题。 SDBC的传输压缩功能可以节约昂贵的网络带宽,在一定的网络带宽下,SDBC可以支撑更大的交易吞吐量(一般在一个数量级以上)。 四、SDBC的交易并行性: SDBC提供交易服务器框架和交易管理器。交易服务器框架使得应用开发人员方便的开发交易业务逻辑处理过程而不必关注网络操作(安全性,可靠性,稳定性问题交由框架处理),把业务逻辑处理过程插入到SDBC服务器框架,作为远过程供客户端调用。 SDBC交易服务器框架提供各种交易并行的处理机制,包括PPC(每个连接一个进程),TPC(每个连接一个线程),TPOOL(线程池)模型。PPC模型具有最好的可靠性,可直接用于客户端并发连接数不大(<256)的场合,如果需要大并发连接,可以配合交易管理器使用。TPC模型具有最好的可移植性,容易移植到各种平台。可以配合SDBC提供的自愈式数据库连接池工作,比PPC更有效的使用数据库资源。适宜处理客户端并发连接数<1000的场合,如果需要更大的并发连接数,可以配合交易管理器使用。TPOOL模型具有最好的系统资源利用率,适于大量客户端的并发接入场合,必要时也可以配合交易管理器,可以使用数据库连接池和其他连接池。由于使用了高性能的epoll机制,其可移植性受限,仅用于LINUX系统。 SDBC的各种服务模型均能够高效率的驱动服务器的各种资源,以ORACLE数据库为例,压力测试表明,它可以让数据库引擎的CPU利用率接近100%,交易吞吐量随CPU数接近线性扩展。 五、SDBC的交易管理器: SDBC交易管理器,它是一个独立的部件。负责客户端的接入,并转发到多组服务器。它在整个中间件系统所起的作用: 1.安全隔离,把外部攻击隔离在此,仅允许合法的交易到达相应的服务器。 2.扩展服务器的接入能力,每个交易管理器能够承接上万的客户端接入。系统中可以布局多个交易管理器,用于分担负载和容错。 3.管理多组服务器连接池,对后端的服务器(尤其是PPC,TPC)进行有限的连接,并实现客户连接决定的路由。 4.连接池的健康自动管理,实现了服务器故障自愈,即服务器损坏和恢复,交易管理器无需重新启动,故障自行恢复。 SDBC交易管理器仅能在LINUX系统下运行。在某一个测试环境中,每个交易管理器处理能力达60000交易/秒(超过此吞吐量将受到网络带宽的限制),并在此范围内提供接近线性的可伸缩性。 SDBC的多服务器和多交易管理器的管理由LVS或其他负载均衡器完成。 六、支持有状态服务 在上述体制下,虽然尽可能无状态(即客户端的一个调用与其他调用无关)是解决负载均衡性的基本要求,但实际的OLTP会出现上下文相关(某些调用与其前后的调用相关)的需求(如在客户端操作数据库的prepare-fetch-close组合)。SDBC支持在一定范围的有状态服务,在一定时限内,可以定义一组状态,在这个状态期间内,中间件为客户端保持在其涉及的各级连接池里对某个资源的独占。设计良好的状态过程,并未显著影响负载均衡性能和交易吞吐量。 七、提供常用的数据处理例程库 除上述功能外,由于C的服务器,内存的使用是由程序员自行管理的,一个经验不足的程序员,常常造成内存违例或内存泄露。SDBC提供了一系列的常用例程,使用这些例程有助于写出内存可靠的程序。对于建立可靠的应用服务器非常有帮助。其中的‘准儒略历’日期时间处理函数包,帮助你处理时间敏感的应用。字符串处理函数包帮助你处理中文的词法分析、查找替换,大数计算和加密认证包,平衡二叉树包等等。 八、泛型和模板: SDBC在网络传输和数据库存取中,需要把用户数据(struct,结构体)转换成字符串、JSON等格式(序列化)或反之,也需要把它们或它们中的部分数据存入数据库(insert,update),或从数据库中的一个表、一组关联的表中的全部或部分数据取出到结构。SDBC提供各种通用的函数处理这些问题。应用的数据结构,是根据用户需求定义的,SDBC的那些通用函数并不知道被处理的数据是怎样定义的,这就涉及一个问题:泛型处理。这里的‘泛’就是指广泛的,通用的。与之相对的就是‘特’,特殊的,特定的,专用的。说到泛型处理,人们自然想到C++的STL。STL提供一些通用的对象来处理通用的问题,它通过模板对通用对象进行定义和声明,你可以把自定义的数据类型提交给它处理。非常可惜,STL只处理‘泛’数据,对‘特’数据只处理它的指针,对其内容一无所知而无法处理。如果你一定要他处理‘特’数据,你就要提供一组‘特’函数给它,这个‘特’数据最终还是你自己处理的。因此,STL的模板我们称之为‘泛模板’。SDBC遇到的问题是,每一个‘泛’函数要处理‘特’数据,如果对每个‘特’数据编写一组‘特’函数,显然繁琐而无意义。它采用的方法是,为每一个‘特’数据编写一个‘特’模板,由‘泛’函数根据‘特’模板来处理‘特’数据。由于C语言的结构(struct)在运行时是无法解析的,所以需要采用模板来说明结构里的内容。与STL的‘泛模板’相对,SDBC的模板也可以称为‘特模板’。为每个数据结构写模板,是个繁琐而易错的工作,SDBC提供了一组工具帮助应用开发人员,可以从数据库表结构自动生成结构和模板的定义,还可以写一个简单的元数据文件来生成结构和模板的定义。将来也可能将‘泛模板’和‘特模板’结合起来使用,使泛型编程更加方便实用。 常用的泛型系统还有google的protobuf系统,它实际上是一个可反射的对象Message,它可以认为是个‘泛’结构,你必须在应用中使用Message对象进行数据处理和数据存储,它负责将Messge进行序列化和反序列化,可用在网络传输数据处理中,但目前还不能与关系数据库互相映象。而SDBC模板系统在任何系统和任何编译环境下,使用普通的,原生态的(不得进行pack指定,不得由编译器优化结构布局)结构,这使得应用程序最方便、快捷的处理自己的数据(经过pack的结构在很多CPU架构下不能正常使用)。 在此基础上,SDBC提供了数据库包装器,支持多种主流关系数据库的映象(其他各种数据库的映象机制也不难编写)。使应用程序能够更方便可靠高效率的使用数据库。目前支持ORACLE、DB2,其高级包装器DAU(Data Access Unit)功能极大的简化了数据库操作,并使运行效率接近系统极限。对SYBASE部分支持(采用CT-LIB,也具有简化开发的能力,支持自愈式连接池,支持程序柔性化,但暂时没有DAU功能)。这个包装器有助于应用程序的适应性,就是在用户需求不断变化,甚至数据结构不断变化时,你的应用程序只需极少的变化或不变化,我们称之为程序柔性化。当然如果你不使用包装器,SDBC支持你原生态的使用任何数据库。 在SDBC库中,pack目录下提供了基本数据映象的泛型方法,dau目录下提供高级数据映象的泛型方法(SRM和DAU)。
总之,SDBC向你提供了一套开发C/S/S系统的框架,有了它,你可以方便的构建安全、高效(高的开发效率和高的运行效率)、高可维护性(柔软性和可移植性)的应用系统,SDBC不仅适用于开发C/S/S系统,也适于开发各种独立的应用程序。