英语原文共 7 页,剩余内容已隐藏,支付完成后下载完整资料
客户端-服务器式应用程序的不停机更新系统的实现
摘要
许多软件系统建立在客户端-服务器模型上,如果一个软件维护而需要更新,那么软件所提供的服务就会被终止。客户端将不能工作直到更新完成。这个更新过程会明显减少商业利润,尤其是电子商务系统。因此一个不停机的系统更新方案具有很高的需求性。本文所描述的NSU系统就是可以在不停机的情况下更新服务器程序。NSU系统可以代替老式那种复杂的更新方式。这个系统可以在软件更新时保持变量共享以及数据不变。当前的实验设计也只是针对Linux系统上的Java程序。实验表明NSU系统正常运行时只用到了不到1%系统开销。
1 Introduction
软件更新时必需终止目标进程。如果在运行时更新程序代码,则会产生不可预料的后果。当前操作系统通常不允许用户修改正在运行的程序[7]。然而,软件在更新时如果不终止程序则会有许多好处。例如,给电子商户系统需要很高的使用性,那样顾客可以随时下订单。如果软件更新时需要终止进程,那么客户在更新期间将不能使用程序。公司将因此失去许多盈利的机会。这个例子说明了不停机更新系统的重要性,尤其是对于电子商务系统。
大多数有需求的进程在不停机更新时会替换原来的进程[1–3, 5, 6, 8]。他们准确地处理目标进程的状态,避免修改正在运行的程序。当目标进程在等待状态时,启动更新。这个方案可以仅用于程序语言,例如C和FORTRAN。因此这种更换进程的方案不能使用于面向对象的软件编程,如C 和Java语言。有一些研究在关注面向对象软件编程的不停机更新方案[4]。动态加载,最受欢迎的计划之一,可以替换正在运行的程序。然而,这个方案并不能处理新类和旧类之间的属性不一致问题。
本文提供了一个可以在服务器程序正在运行时进行版本更新的的不停机软件更新系统(NSU)。在更新过程中,NSU系统使用一个备份程序暂时接管目标服务器程序。NSU系统可以在两个版本之间同步变量的不一致属性。在更新过程中,运行用户的防火墙定向功能不会受到干扰。目前,NSU系统只适用于Linux系统上的Java程序。实验结果表明,NSU系统并没有产生更大的性能开销。在正常执行时,NSU系统平均占用的性能开销是0.88%。
2 NSU系统
NSU系统结构如图1所示。NSU系统组件之间的通信是通过套接字接口。在正常执行时,主服务器微客户端提供服务。在更新期间NSU系统利用一个备份服务器不停机地执行软件更新。NSU协调器涌过协调主服务器和备份服务器以维持数据的一致性。完成更新后,备份服务器、NSU协调器和NSU重定向程序将会被关闭。
图1 NSU系统结构图
P数据表
B数据表
转换器
P同步状态
B同步状态
重定向程序
控制器
程序IO接口
主服务器
网络接口
NSU协调器
主服务器
备份服务器
NSU重定向程序
防火墙
网络接口
客户端数据包
客户端数据包
图2 协调器结构图
2.1系统构成
2.1.1 NSU协调器
在更新期间,协调器负责维持主服务器和备份服务器之间数据的一致性。如果两个版本之间共享变量的数据类型不同,协调器则会转换数据类型。协调器同时还控制着数据流路径的更新
图2展示了协调器的结构。在协调器中,有两个数据表。P数据表存储主服务器的共享变量,B数据表记录备份服务器的共享变量。转换器负责转换两个服务器的共享变量。转换的详细过程在2.4章进行描述。P同步状态和B同步状态配合NSU-BASE同步所有的共享变量来保持数据一致。在服务器被备份服务器接管的时候,转向控制器可以控制NSU转向器控制防火墙来为客户提供透明服务。程序IO接口是一个在主服务器、备份服务器和NSU转向器之间通信的的接口。
图3 NSU服务器程序
数据表
同步状态
程序IO接口
NSU base
服务器程序
2.1.2 NSU-base
NSU-base包括三个部分:数据表,同步状态和程序IO接口(见图3)。服务器程序和NSU-base之间需要经过预处理和整合。预处理的详细过程将在第三章详细描述。数据表中记录了所有共享变量的详细信息。在更新期间,同步状态和协调器会协同工作保持共享变量的一致性。当一个服务器程序指令需要操作一个共享变量时,协调器通过同步状态决定是否同一服务器的请求。程序IO代替了服务器程序的IO接口,负责每个与NSU服务器连接的客户端之间的通信。NSU服务器一般情况下以主要模式启动。当NSU服务器需要进行版本更新时,NSU服务器则会通过备份模式启动。
2.1.3 NSU转向器
在更新期间,客户端的服务需要通过备份服务器进行移交。然而。客户端总是通过一个固定的TCP地址连接到服务器。为了向客户端保持服务器地址的透明性,NSU转向器会适当的控制防火墙软件。将客户端连接到备份服务器。NSU转向器是通过接收协调器的指令来操纵防火墙的。
2.1.4 NSU预处理器
用户利用NSU预处理生成一个NSU base,并且为插入控制代码而修改服务器程序。
2.1.5 更新操作
更新过程分为四个阶段,如图4所示。
2
1
服务器数量
新版本备份服务器 Port!=n
旧版本主服务器 Port=n
T1 T2 T3 T4 T5
新版本主服务器 Port=n
时间
图4 更新顺序
bull; T1~T2期间有一个旧版本主服务器为客户端提供服务。主服务器使用“n”作为一个TCP地址。目前,旧版本主服务器还有一些连接状态的客户端。
- 在T2时刻,系统管理器授权协调器,开始进行服务器程序的更新。协调器通过备份模式调用新版本的服务器程序。NSU转向器要求防火墙重新定向客户端数据包到备份服务器。在T2到T3期间,协调器必需要保持数据的一致性。当旧版本的主服务的客户端连接数为零时,协调器将通知旧版本主服务器终止运行。
同步过程如图5所示。新版本的备份服务器以备份模式启动。步骤1和2:协调器通知旧版本主服务器和新版本的备份服务器执行软件更新。步骤3:为了保持同步,旧版本主服务器将锁住所有共享变量。步骤4:新版本的备份服务器也锁住共享变量。步骤5:将旧版本的数据表传递给协调器。步骤6:备份服务器也将新版本的数据表传递给协调器。步骤7:当协调器完全接收到两个数据表时,它会使用主服务器的数据表的值来生成备份数据表。如果新版本的数据类型和旧版本不同,协调器将会对数据值进行转换处理。步骤8:协调器已成功生成了备份数据表。然后协调器将生成的备份数据表传递给备份服务器。步骤9:新版本的备份服务器接收新生成的备份数据表。然后新版本备份服务器开始生成自身的共享变量数据表。到此,备份服务器就准备好开始接管服务了。步骤10:新版本的备份服务器通知协调器已完成初始化过程。步骤11:当协调器从备份服务器收到通知后,它将通知旧版本主服务器。主服务器然后再继续为客户端服务。步骤12:旧版本的主服务器向协调器回复一个确认包。步骤13:协调器收到确认包后,它会要求NSU转向器重新定向连接的数据包到新版本的备份服务器。如果有新接入的客户端,它们将会连接到新版本的备份服务器。
图5 协调器协同备份服务器初始化数据表
步骤1
步骤3
步骤5
步骤2
步骤6
步骤11
步骤13
步骤10
步骤12
步骤4
步骤7
步骤8
步骤9
- 在T3~T4期间,协调器以主模式调用新版本服务器程序。主服务器和备份服务器一般是完全相同的,所以协调器会直接提供B数据表中的信息来初始化新版本的主服务器。初始化新版本主服务器的过程如图6所示。正在服务器初始化后,NSU装想起将会终止重定向连接。新接入的客户端将会连接到新版本的主服务器。当备份服务器上连接客户端的数量变为零时,新版本的备份服务器将会终止工作。
bull; T4~T5:当备份服务器停止后,NSU系统就成功完成了软件更新过程。协调器和NSU转向器也将停止工作。
2.3 保持数据的一致性
2.3.1 变量标识符
通过预处理程序,每个共享变量会被分配一个整数变量标识符。共享变量和变量标识符之间的映射关系江北记录在NSU-base的数据表中。采用变量标识符有以下两个原因。首先,协调器是通过变量标识符来检索共享变量在主服务器和备份服务器之间的关系。第二,NSU-base在从协调器接收到更新请求后,会使用变量标识符来更新共享变量的值。
2.3.2 数据表
在通常情况下,一个NSU服务器维护数据表来储存共享变量的信息。在更新的时候,数据表的内容会被传递给协调器。当协调器接收到数据表后,数据表的内容会被以NSU服务器的方式存储金P数据表和B数据表。数据表中每个数据项以以下方式呈现。
- ID:变量标识符
- Type:共享变量的数据类型。根据字段,协调器可以正确地转换共享变量的值。
- Name:共享变量的名称。
- Value:共享变量的执行值。
bull; Convert mode(转换模式):转换模式被区分为特殊类型和一般类型。协调器在更新过程开始之前通过系统管理器来设置不同模式。详细过程将会在2.4章进行描述。
2.3.3 处理属性的变化
如果新版本服务器的属性发生了变化,保持数据的一致性时将会遇到一些问题。
旧版本服务器
-int Day
-int Month
-short Time
-int UserID
新版本服务器
-String strDay
-String strMonth
-long NowTime
-Int DEL_VAR_UserID
-String UserName
图7 服务器属性变化
图7展示了一个例子,在新版本服务器中,属性对比旧版发生了变化。赌赢的箭头行表示了旧版本和新版本之间共享变量的映射欢喜,这鞋属性变化分为四种类型。
不一致的数据类型:
NSU系统采用变量标识符来寻找不同版本共享变量之间的映射关系。在更新时,协调器利用数据表的内容来检索旧版本和新版本之间的共享变量的数据类型。实现了两个服务器之间的数据转换。
bull;不一致的变量名称:
NSU系统采用变量标识符代表共享变量,所以变量名称不一致的问题是可以避免的。
bull;删除一个共享变量
如果程序员需要删除新版本中的一个共享变量,预处理器会在共享变量加一个DEL_VAR_的前缀。
bull;添加一个新的贡献变量
当新版本添加一个新的共享变量时,新共享变量会分配到一个变量标识符。因此,协调器可以识别新添加的共享变量。
2.4 转换数据值
为了保持共享变量的数据一致性,协调器会转换两个服务器之间的数据值。转换规则主要分两种,标准类型转换规则和特殊类型转换规则。
标准类型转换规则:
标准类型转换规则的意思是转换可以通过开发语言的类型转换函数完成,例如转换短整型到长整型。
特殊类型转换规则
-int VarType1
-String Record1[]
-int VarType2
-String Revord2[]
-int VarIdentifier
Convert()
Record2[] = {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}
Record1[] = {1,2,3,4,5,6,7}
图8 特殊类型转换规则
特殊类型转换规则:
特殊类型转换规则的意思是只有程序员理解正确的类型转换规则。举例说,如图7所示,一个整型变量名为Day,在就版本中记录今天的星期。整型,1~7代表一周里的每一天。在新版本中,相应的变量类型编程了字符串类型。这个变量strDay使用一个单词“MONDAY”来代表星期一。程序员需要向协调器提供这个转换规则。协调器存储转换规则使用的的对象如图8所示。这个记录特殊转换规则的对象有两个字符串类型的数组。这个对象也包含了两个整型变脸用于记录字符串数组的原始数据类型。当协调器想要使用特殊转换规则时,这个转换方法的对象就会被调用。例如,协调器需要转换一个一个值为4的变量。协调器首先搜索Record1数组并且查找位置4上的值。协调器取回Record2位于相同位置的值,最后获得“THURSDAY”。
3.1 操作预处理程序
下面将会详细解释操作预处理程序的过程。
步骤1:系统管理器向预处理程序提供原始服务器程序相关的必要信息。这些信息包含普通服务器程序的主类名称,服务器程序进入和退出类函数的名称,和共享变量的所有特征如数据类型、数据名、初始值。
步骤2:预处理程序分析原始服务器程序并生成一个日志文件。
步骤3:预处理程序修改原始服务器程序并且插入一些适当的指令。详细内
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[151941],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。