CN1987774A - 大规模并发联机交易中基于版本的c/c++组件热插拔方法 - Google Patents

大规模并发联机交易中基于版本的c/c++组件热插拔方法 Download PDF

Info

Publication number
CN1987774A
CN1987774A CN 200610098059 CN200610098059A CN1987774A CN 1987774 A CN1987774 A CN 1987774A CN 200610098059 CN200610098059 CN 200610098059 CN 200610098059 A CN200610098059 A CN 200610098059A CN 1987774 A CN1987774 A CN 1987774A
Authority
CN
China
Prior art keywords
assembly
version
function
service
dynamic base
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200610098059
Other languages
English (en)
Other versions
CN100428151C (zh
Inventor
陆忠亮
张家荣
束善杭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Asialnfo Technology (Nanjing) Co., Ltd.
Original Assignee
LINKAGE SYSTEM INTEGRATION CO Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by LINKAGE SYSTEM INTEGRATION CO Ltd filed Critical LINKAGE SYSTEM INTEGRATION CO Ltd
Priority to CNB2006100980594A priority Critical patent/CN100428151C/zh
Publication of CN1987774A publication Critical patent/CN1987774A/zh
Application granted granted Critical
Publication of CN100428151C publication Critical patent/CN100428151C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种大规模并发联机交易中基于版本的C/C++组件热插拔方法,其特征是通过代理使客户(client)和服务(server)之间的调用隔离,由代理动态决定使用哪个动态库的哪个函数;在unix环境中通过dlopen和dlsym来实现此功能。本发明解决了大规模并发联机交易系统中的软件版本动态更新问题,尤其是在不间断系统运行的情况下,根据组件注册表自动实现软件的同步更新。

Description

大规模并发联机交易中基于版本的C/C++组件热插拔方法
技术领域
本发明涉及电信联机交易方法,尤其是大规模并发联机交易系统中的软件版本动态更新问题,根据组件注册表自动实现软件的同步更新。
背景技术
电信业务支撑系统是一个大规模的并发联机交易系统,需要为全省数千万电信用户提供各种电信服务,其中用户在营业前台所办理的开户、缴费、查询等业务都属于必须实时完成的联机交易(OLTP),一般情况下每天的交易量可在100万笔以上,而高峰时段每分钟的并发交易量可达4000笔以上,联机交易系统的可用性直接影响电信用户的满意度。随着电信市场的改革开放和市场竞争的日趋白热化,电信业务支撑系统的业务需求不断变更,应用软件的版本不断需要升级换代。如何在不中断或减少中断时间的要求下,快速更新软件、提高大规模并发联机交易服务的可用性成为一个重要课题。实现动态的组件热插拔就是一个很好的解决方案。如CN02111249.5统一访问数据库系统的方法:创建数据库连接池;对各数据库系统的底层调用接口按功能进行分类;根据分类,封装底层调用接口;将封装好的统一数据库接口做成动态库;通过数据库进行读或写访问。所述方法由于所封装的接口均为各数据库系统的最高效的底层调用接口,实测表明,效率比采用ODBC技术高出20%~30%,提高了数据库的访问速度,提高了系统的处理能力;封装了多种数据库系统的底层接口。
在java编程语言中,由于java支持多个类装载器(ClassLoader),也可以自定义类装载器,可以自行决定加载哪个类。不同的类装载器可以加载不同版本的类,也可以在运行时刻动态的加载一个新类,不使用的类也会被虚拟机(JVM)自动回收。利用这些机制,实现动态的组件热插拔就很容易了。
但在目前的电信业务支撑系统中,由于安全、高效等各方面的原因,目前普遍使用传统的交易中间件(如tuxedo、cics等),使用的语言都是C/C++,诸如weblogic、websphere等只用于网上营业厅等接入,而核心的业务层基本都是在C/C++中实现。C/C++是一个相对静态的语言,函数之间的调用,都是在编译时刻决定的,要在语言层实现动态热插拔机制几乎不可能。
所以,目前一般方法是在交易请求不繁忙的深夜中断服务,更新服务软件(组件),然后重启,以减少由于服中断而造成的影响。
另一种方法使用软件和硬件结合的方法,即利用两台互备的机器(A、B),当需要更新的时候,修改路由表,使所有交易自动定向到B机,然后在A机上更新程序,并进行必要的测试,然后修改路由表,使所有的服务全部自动定向到A,更新B机,完毕后,修改路由配置,使A和B机都能接受交易请求。这种方案比较可靠,但成本比较昂贵。
发明内容(本发明要解决的技术问题、所采用的技术方案、效果简介)
发明内容
本发明目的是提出一种大规模并发联机交易中基于版本的C/C++组件热插拔方法,为了解决大规模并发联机交易系统中的软件版本动态更新问题而发明的,尤其是在不间断系统运行的情况下,根据组件注册表自动实现软件的同步更新。
本发明的技术解决方案是:大规模并发联机交易中基于版本的C/C++组件热插拔方法,实现客户(client)和服务(server)的隔离。也是解决同步更新的首要问题。在通常情况下,使用的方法有:
(1)客户直接调用服务函数,即在程序编译时就决定了使用哪个函数,
如果服务逻辑变化,则需要整体重新编译。
(2)把一个个业务服务包做成动态库,然后客户程序只是连接(link)。
业务服务包做成的动态库,这种方法好处是在启动程序的时候决定使用那个动态库,更新时可以只编译服务程序,客户程序可以不做任何动作(当然前提是接口没有作变化)。
很多系统在处理这一问题时,一般采用方法(2),但如果更新则必须重启程序。那么如何在运行时刻动态更换动态库呢?本发明的解决方案描述如下:
(一)定义一个代理实现运行时刻动态切换服务版本
如图1,在客户和服务之间使用代理作隔离,由代理动态决定使用哪个动态库的哪个函数,即可解决在运行时刻动态切换服务版本的问题。在unix环境中可以通过dlopen和dlsym来实现此功能。
(二)定义一个组件注册表用于保存每个动态库所使用的版本
同时需要设计一个组件注册表,登记每个组件的版本,来解决多个组件同步更新问题,因为一个业务往往依赖许多组件时,组件与组件之间由于依赖关系,为了保证逻辑的一致性,必须保证版本的一致,代理根据组件注册表统一管理动态库,其查询服务句柄流程如下:
客户端调用代理查询某服务句柄,代理首先检查组件注册表是否修改;如果修改则重新读取整个注册表;然后查询是否有该组件的动态库处于打开状态,如果该组件的动态库没有处于打开状态,则根据注册表中登记的版本打开该组件动态库,如果该组件动态库处于打开状态,则需要判断该库的版本是否和注册表中登记的版本是否一致,如果不一致则需要关闭该动态库,重新打开新的动态库;最后在库中查找函数句柄并返回。
动态切换可以通过代理解决,但一个业务往往使用很多组件,如何控制切换,以及如何保证在切换过程中的版本的一致,如图2,A组件依赖B、C、D,B依赖E,假设A、B、C、D、E都作了修改,更新时必须保证同时更新,否则会造成版本不一致,业务逻辑错误。所以在此设计一个组件注册表,用于登记每个动态库所使用的版本,代理根据组件注册表统一管理动态库。
查询服务句柄流程如下(见图3):客户端调用代理查询某服务句柄,代理首先检查组件注册表是否修改;如果修改则重新读取整个注册表;然后查询是否有该组件的动态库处于打开状态,如果该组件的动态库没有处于打开状态,则根据注册表中登记的版本打开该组件动态库,如果该组件动态库处于打开状态,则需要判断该库的版本是否和注册表中登记的版本是否一致,如果不一致则需要关闭该动态库,重新打开新的动态库;最后在库中查找函数句柄并返回。
编写(静态)代理的方法如下:首先使用typedef定义服务接口函数的类型,然后定义接口函数代理实现,该函数实现与客户端程序静态联编。客户端真正调用到的是代理函数,而非服务函数。代理函数根据组件名和函数名,通过上述的“查询服务句柄流程”获得服务句柄,然后强制类型转换为服务接口函数的类型,最后才真正执行服务函数的调用。
编写组件注册表的方法是:在正式环境中,定义一个文件,文件的每一行由“组件名=版本号”构成,登记所有组件的当前版本。系统作更新时,只需要把更新的组件以添加的方式,登记在文件的顶部,这样可以保留系统的变更历史,程序在读取注册表时,以最先匹配到的版本为准。修改注册表时,必须在副本上进行,修改完毕后,覆盖正式版本,必须一次提交,否则会造成组件之间版本混乱问题。
(三)注册表更新机制
在运行环境中,所有的服务进程共享一个注册表,所以注册表更新必须考虑互斥,即在更新注册表时进程不能读取。因此,需要为注册表准备两份,一份是在线注册表,另一份是注册表副本,在更新版本时,首先修改副本,修改完毕后,锁定在线注册表,防止进程读取不完整的信息,最后提交。注册表更新流程如图4。
本发明中热插拔组件的适用范围:
a)服务组件必须是无状态的,因为切换时不会自动把状态复制到新的实例中。
b)接口不能变化,否则需要全部重编译,并且修改代理部分的代码。
c)要求接口的代码必须是C形式,因为C++支持函数的重载,所以函数名都被改名,如果组件是C++的,可以编写一段C程序封装成C接口形式。
附图说明
图1是本发明客户和软件服务之间由代理动态的结构示意图
图2是本发明组件依赖下层组件的示意图
图3是代理根据组件注册表统一更新动态库的流程示意图
图4是更新注册表流程
图5是客户程序通过静态代理库调用组件的函数示意图
具体实施方式
下面以一个例子说明实施步骤,组件echo只是简单返回传入的字符串,客户程序通过静态代理库,调用组件echo的函数。
1、编写组件echo
#ifndef ECHO_H#define ECHO_H#include<string>using namespace std;extern″C″{string echo(const string & str);}
echo.h文件
#include″echo.h″extern″C″{string echo(const string & str){return″echo:″+str;}}
echo.c文件
2、编译echo.c,并连接生成libecho-1.0.so echo.h文件echo.c文件
3、编写组件注册表
4、编写静态代理(可以使用工具生成)
首先使用typedef定义服务接口函数的类型,然后定义接口函数代理实现,该函数实现与客户端程序静态联编。代理函数根据组件名和函数名,通过查询服务句柄的函数获得服务句柄,然后强制类型转换为服务接口函数的类型,最后执行服务函数的调用。实现如下:
#include″echo.h″extern″C″{typedef string(*echo_f)(const string &);string echo(const string & str){//通过服务句柄查询函数获得句柄void*handle=findhandle(“echo”,//组件名echo“echo”);//函数名echostring result=((echo_f)handle)(str);return result;}}
5、编译echo_proxy.c,并打包生成libecho.a
6、编写客户端
7、编译echo_client.c并连接libecho.a,生成echoclient
8、执行echoclient
9、更新组件,修改输出格式
10、编译echo.c,并连接生成libecho-2.0.so
编写组件注册表,在正式环境中,一般需要修改多个动态库,以保证版本一致组件注册表
#动态库名和版本号
#以第一个指定的版本为准
#patch 2.0修改转换方式
echo=2.0
#初始版本
echo=1.0
11、编写组件注册表,在正式环境中,一般需要修改多个动态库,以保证版本一致
#组件注册表#动态库名和版本号#以第一个指定的版本为准#patch 2.0修改转换方式echo=2.0#初始版本
12、查看测试程序的输出
#include″echo.h″extern″C″{string echo(const string & str){return″echo(ver 2.0):″+str;}}

Claims (3)

1、大规模并发联机交易中基于版本的C/C++组件热插拔方法,其特征是首先通过代理使客户(client)和服务(server)之间的调用隔离,由代理动态决定使用哪个动态库的哪个函数;在unix环境中通过dlopen和dlsym来实现此功能;
同时设计一个组件注册表,登记每个组件的版本,来解决多个组件同步更新问题;当一个业务依赖许多组件时,组件与组件之间由于依赖关系,必须保证版本的一致,代理根据组件注册表统一管理动态库,其查询服务句柄流程如下:
客户端调用代理查询某服务句柄,代理首先检查组件注册表是否修改;如果修改则重新读取整个注册表;然后查询是否有该组件的动态库处于打开状态,如果该组件的动态库没有处于打开状态,则根据注册表中登记的版本打开该组件动态库,如果该组件动态库处于打开状态,则需要判断该库的版本是否和注册表中登记的版本是否一致,如果不一致则需要关闭该动态库,重新打开新的动态库;最后在库中查找函数句柄并返回。
2、根据权利要求1所述的大规模并发联机交易中基于版本的C/C++组件热插拔方法,其特征是编写代理的方法如下:首先使用typedef定义服务接口函数的类型,然后定义接口函数代理实现,该函数实现与客户端程序静态联编;客户端真正调用到的是代理函数,而非服务函数;代理函数根据组件名和函数名,通过上述的“查询服务句柄流程”获得服务句柄,然后强制类型转换为服务接口函数的类型,最后才真正执行服务函数的调用。
3、根据权利要求1所述的大规模并发联机交易中基于版本的C/C++组件热插拔方法,其特征是编写组件注册表的方法是,在正式环境中,定义一个文件,文件的每一行由“组件名=版本号”构成,登记所有组件的当前版本;系统作更新时,只需要把更新的组件以添加的方式,登记在文件的顶部,这样可以保留系统的变更历史,程序在读取注册表时,以最先匹配到的版本为准;修改注册表时,必须在副本上进行,修改完毕后,覆盖正式版本,必须一次提交。
CNB2006100980594A 2006-11-29 2006-11-29 大规模并发联机交易中基于版本的c/c++组件热插拔方法 Expired - Fee Related CN100428151C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006100980594A CN100428151C (zh) 2006-11-29 2006-11-29 大规模并发联机交易中基于版本的c/c++组件热插拔方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006100980594A CN100428151C (zh) 2006-11-29 2006-11-29 大规模并发联机交易中基于版本的c/c++组件热插拔方法

Publications (2)

Publication Number Publication Date
CN1987774A true CN1987774A (zh) 2007-06-27
CN100428151C CN100428151C (zh) 2008-10-22

Family

ID=38184586

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006100980594A Expired - Fee Related CN100428151C (zh) 2006-11-29 2006-11-29 大规模并发联机交易中基于版本的c/c++组件热插拔方法

Country Status (1)

Country Link
CN (1) CN100428151C (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106218A (zh) * 2011-11-15 2013-05-15 中国银联股份有限公司 插件式联机交易处理系统以及插件式联机交易处理方法
CN104915214A (zh) * 2015-06-25 2015-09-16 走遍世界(北京)信息技术有限公司 系统的发布方法及装置
CN110442392A (zh) * 2019-07-16 2019-11-12 新华三大数据技术有限公司 一种包隔离方法、装置、电子设备和存储介质
CN110471690A (zh) * 2019-06-25 2019-11-19 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6032201A (en) * 1997-06-19 2000-02-29 Cirrus Logic, Inc. Plug and play system using proxy for retrieving correct information about current device from system registry when current device is not the newly installed device
US7673090B2 (en) * 2001-12-19 2010-03-02 Intel Corporation Hot plug interface control method and apparatus
US6925466B2 (en) * 2002-03-22 2005-08-02 Sun Microsystems, Inc. Asynchronous protocol framework

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106218A (zh) * 2011-11-15 2013-05-15 中国银联股份有限公司 插件式联机交易处理系统以及插件式联机交易处理方法
CN103106218B (zh) * 2011-11-15 2016-05-18 中国银联股份有限公司 插件式联机交易处理系统以及插件式联机交易处理方法
CN104915214A (zh) * 2015-06-25 2015-09-16 走遍世界(北京)信息技术有限公司 系统的发布方法及装置
CN110471690A (zh) * 2019-06-25 2019-11-19 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质
CN110471690B (zh) * 2019-06-25 2021-09-14 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质
CN110442392A (zh) * 2019-07-16 2019-11-12 新华三大数据技术有限公司 一种包隔离方法、装置、电子设备和存储介质
CN110442392B (zh) * 2019-07-16 2022-08-09 新华三大数据技术有限公司 一种包隔离方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN100428151C (zh) 2008-10-22

Similar Documents

Publication Publication Date Title
CN100489778C (zh) Java程序可动态更新化实现方法
CN1318956C (zh) 软件构件插件程序结构的系统和方法
CN1989489B (zh) 数据处理方法和装置
CN100498699C (zh) 在运行时系统中共享对象
CN101218565B (zh) 用于将主机环境迁移至新系统平台的方法和交易控制组件以及相关的分散客户端系统
CN1989488B (zh) 运行时系统的鲁棒共享
US9015659B2 (en) Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software
US7072913B2 (en) Method, system and computer program for executing hot migrate operation using migration plug-ins
CN102073520A (zh) 一种c++应用程序版本动态管理系统和方法
CN100487649C (zh) 一种组件间调用方法
JP4351636B2 (ja) 同期方法
CN110275722A (zh) 用于升级应用的方法、装置、设备和存储介质
CN101276271A (zh) 一种面向切面编程的拦截器系统及方法
CN101196926A (zh) 一种数据库访问平台及其访问方法
KR20000026296A (ko) 망 관리 시스템 및 클래스 동적 추가 방법
US20060230402A1 (en) Managing transactions for Enterprise JavaBeans
CN102073525A (zh) 基于Java平台的Web业务系统的动态升级方法及装置
CN107239313A (zh) Spring应用服务的升级方法和存储介质
CN100428151C (zh) 大规模并发联机交易中基于版本的c/c++组件热插拔方法
Segal et al. Dynamically updating distributed software: supporting change in uncertain and mistrustful environments
CN114925084A (zh) 分布式事务处理方法、系统、设备及可读存储介质
US6842905B2 (en) Method and system for implementing collection program interface for accessing a collection of data associated with a legacy enumeration application interface
CN101944028B (zh) 一种构件化软件系统运行状态的按需动态持久化方法
CN101236510B (zh) 一种ejb集群的失败恢复处理方法及系统
US7707565B2 (en) Method for consistent and efficient management of program configuration and customizing data

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Assignee: LIAN Technology (Nanjing) Co., Ltd.

Assignor: Linkage System Integration Co., Ltd.

Contract fulfillment period: 2008.11.4 to 2026.11.29 contract change

Contract record no.: 2008320001106

Denomination of invention: Hot plug method of version based C/C++ component in large scale concurrent online transaction

Granted publication date: 20081022

License type: exclusive license

Record date: 20081124

LIC Patent licence contract for exploitation submitted for record

Free format text: EXCLUSIVE LICENSE; TIME LIMIT OF IMPLEMENTING CONTACT: 2008.11.4 TO 2026.11.29; CHANGE OF CONTRACT

Name of requester: LIANCHUANG SCIENCE ( NANJING ) CO., LTD.

Effective date: 20081124

ASS Succession or assignment of patent right

Owner name: LIANCHUANG SCIENCE AND TECHNOLOGY (NANJING) CO., L

Free format text: FORMER OWNER: NANJING LIANCHUANG SCIENCE AND TECHNOLOGY CO., LTD.

Effective date: 20100419

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20100419

Address after: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee after: Linkage System Integration Co., Ltd.

Address before: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee before: Linkage System Integration Co., Ltd.

C56 Change in the name or address of the patentee

Owner name: LINKAGE ASIAINFO TECHNOLOGY (NANJING) CO., LTD.

Free format text: FORMER NAME: LINKAGE TECHNOLOGY (NANJING) CO., LTD.

CP01 Change in the name or title of a patent holder

Address after: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee after: LINKAGE-ASIAINFO TECHNOLOGIES (NANJING), INC.

Address before: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee before: Linkage System Integration Co., Ltd.

C56 Change in the name or address of the patentee

Owner name: ASIALNFO TECHNOLOGY (NANJING) CO., LTD.

Free format text: FORMER NAME: LINKAGE-ASIAINFO TECHNOLOGY (NANJING) CO., LTD.

CP01 Change in the name or title of a patent holder

Address after: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee after: Asialnfo Technology (Nanjing) Co., Ltd.

Address before: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee before: LINKAGE-ASIAINFO TECHNOLOGIES (NANJING), INC.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20081022

Termination date: 20151129

EXPY Termination of patent right or utility model