王晓东
摘要:该文通过分析虚拟化的分布式软件日志管理系统VDSL的特征,研究利用动态二进制翻译技术,将分布式系统平台中,各虚拟结点的软件日志记录,实现同步聚合,形成具有协同一致性的软件日志,为软件日志的安全审计与故障恢复提供支持。为软件故障分析与审计提供有效的管理方法。
关键词:虚拟化;分布式;LogOS;软件日志管理
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)10-0090-03
1 基于虚拟化的二进制动态翻译平台
LogOS是一个的动态二进制翻译基础平台。它是一个进程级虚拟机。LogOS 是一个基于动态翻译框架扩展,针对全系统翻译的的翻译框架,LogOS 借助于中间指令实现重定向功能,且可以独立于底层硬件执行程序。同时,LogOS 实现了模块划分和接口定义,通过中间指令过滤功能完成对执行代码进行翻译和优化。它可以对内核和用户级二进制文件进行翻译。LogOS 总体架构图如图1所示。
LogOS 由一个虚拟机(VM),一个代码高速缓存单元(code cache)和一个Logger 调用的检测AP 构成。VM由一个即时编译器,一个仿真器和一个调度程序器组成。在 LogOS 取得对程序的控制之后,VM 协调它的组成部分并执行程序:调度器启动JIT 编译器和检测程序代码。在目标代码高速缓存单元中存储被编译的代码。emulator是用来进行需要 VM 特殊处理的系统调用的。因此它只能获取用户状态下的代码。当程序在LogOS 中执行结束后,Logger完成了对程序的插桩后与程序分离,并将所得到的不同粒度的软件运行日志存放在本地文件中。
2 基于虚拟化的分布式软件日志管理系统VDSL设计
2.1 软件日志管理系统VDSL总体架构
在动态二进制翻译平台LogOS基础上,提出了一种虚拟计算环境中的分布式软件日志管理系统VDSL,以实现对整个分布式虚拟集群的软件日志管理。VDSL定了日志记录的数据结构,这种数据结构可以保存每个节点的所产生的软件日志。进而在传输前被VDSL同一封装为相同的文件格式,以保证各节点日志交互与服务器的日志汇总。VDSL总体架构如图2所示。
构建三个层次(表示层、功能层和数据层)日志系统模型,表示层指的是服务软件的用户API部分。它的功能只负责实现用户、应用程序间的通信,不负责业务的实施。在功能层,具体实现业务处理功能。表示层像功能层发送数据请求,同时访问数据层获取信息以完成功能层的请求。完成请求后结果返回给发送请求的表示层。数据层就是MySQL数据库管理系统。管理员负责管理对MySQL中数据的读写。数据库中的数据文件存储着来自每个虚拟节点日志信息。数据库必须要实现能对海量数据的快速查找,检索和更新。所以,用户使用SQL语句,从功能层将数据插入到数据层中的MySQL数据库。整个三层服务请求层次如图3所示:
2.2 VDSL系统功能应实现以下功能:
1)在线调试。对于大部分处理海量数据的分布式软件系统。若想在其出现故障时进行调试或数据收集,必须停止系统的运行,在线下进行操作,给业务服务带来很大的损失。VDSL系统可以实现分布式软件系统的不中断在线调试。将动态二进制翻译平台LogOS部署在虚拟化平台上分布式软件系统中的每个虚拟节点上,使用日志服务实现服务软件的在线调试。
2)实现软件日志的可配置特性。支持用户自己配置的软件日志记录粒度级别。将LogOS设计的依据调试检测要求的可定制的的平台。Logger将按照事先定制好的要求自动来记录分布式服务平台中服务软件运行时产生的数据流。具体不同粒度的定制,则完全由容错系统的管理员设定。而不是由日志记录平台记录所有的数据流,这样会占用过多的硬件资源。当配有VDSL的分布式系统投入使用之后,我们可以在运行时根据业务要求来随时改变Logger的日志记录粒度
3)通过VDSL分析整个分布式系统运行状况。不同于单主机节点上的日志分析,在大规模分布式系统中各个节点之间都紧密关联,互相影响。整个VDSL系统不能仅仅局限于一个单节点之上的日志功能,利用时钟同步功能对整个分布式系统中各个节点上的软件日志进行精确排序。
4)良好的扩展性且易于管理。在基于虚拟化的分布式系统中,VDSL系统实现了统一管理各节点的软件日志文件。为用户和管理员提供良好的前台操作界面,实现日志选择功能,包括日志的查询、日志的删除等统计功能。
2.3 日志管理模式
随着海量数据的分布式软件系统运行会产生庞大的日志文件,在VDSL系统中,日志存储方式采用数据库表,在数据库服务器的库表中,存储日志信息,用户和管理员可以对此统计和查询。VDSL系统日志的管理方式采用故障服务器统一管理日志,收集所有虚拟节点上的软件日志。将各虚拟结点的软件日志通过时钟同步功能排序整合存储到数据库中,以供后续用途。在日志文件传输中,大部分的分布式软件系统平台中,对每个服务软件的每个进程,一般是写在各自的日志文件中。如系统中有K个进程,K个进程的日志文件都是单独写,则各个进程之间就不会产生互斥。但是,在进程读写日志文件的时候,就会产生读写互斥。日志文件中的内容被传输代理读取进,就需要来解决进程中读写互斥。在分布式软件系统运行时,每个节点上都运行着多种服务对象。如果用对文件加锁的方法来应对服务对象和传输代理之间的读写互斥问题,则会阻塞各应用进程的日志记录过程,对系统的运行效率造成很大的影响。为了解决这个问题,以提高系统中应用服务软件的日志记录速度和并发度,因此,在设计中考虑了一种“双缓冲区”的策略。设计如图4所示。
对图中K个进程,当系统运行时,分别对应两个相互独立缓冲区,对每个节点上的每个进程产生的数据流将写入缓冲区1,若缓冲区2非空,则缓冲区1继续处理进程的请求。如果出现缓冲区2为空的情况,则将缓冲区1推送到缓冲区2的位置,且停止往缓冲区1中写入日志数据。传输代理只需处理缓冲区2中的日志数据即可。同时,系统再分配一个空缓冲区作为新的缓冲区1继续处理进程提出的日志请求。这样传输代理就不需要与各进程之间进行交互,避免了读写互斥,加快了处理日志文件的速度。
2.4 日志格式的设计
在VDSL日志系统中,进程在执行时产生的各种数据通过软件日志来记录。为了更好地通过日志信息来完成故障审计与性能分析,在VDSL日志系统中,需要进行日志记录的格式设计。为方便用户,对日志记录的格式设计,必须满足用户可配置,分布式软件在运行过程中用户可以自行配置所要记录的日志数据信息。为了保证VDSL日志管理系统的通用性,日志记录格式定义如表1所示。
对日志文件数据在写入之前,要通过CORBAAny类型进行封装,封装后是八位位组序列,VDSL采用纯二进制数据传输方式。在整个传输过程中,日志信息是完全透明的,但日志文件无法使用文本编辑器打开,确保了日志文件在传输过程中的安全性。当日志文件传输结束,开始日志信息的解封装。把本日志文件的属性值通过CORBA中提取,最后把日志格式还原为发送前,完成了软件日志的格式处理。保证了日志文件的安全,不被篡改。
2.5 时钟同步设计
在VDSL日志系统的管理平台中,如果无法实现同步各个结点的物理时钟。将会给整个VDSL日志系统的管理增加难度。因此,在设计中,采用了一种内部同步算法。即在VDSL日志系统中,设置一个节点作为主节点,从节点的时钟信号由主节点根据自己本地的当前标准时间来周期性的持续发送,并对每个从节点的本地时间进行记录。各个从节点计算主节点发送的标准时间与从节点本地时间之间的时差,计算时差返给主节点。主节点通过估算各时钟信号的往返时间,进而对每个从节点返回的时差值进行修正。 然后告诉各从节点,如何修正各自的时间。最后实现整个VDSL日志系统中各节点的时钟同步。
3 VDSL日志系统性能的测试
通过日志服务将服务有效的分解,充分利用双缓冲区、多线程技术,实现各虚拟结点服务软件的日志在分布式系统中的传输速度。通过测试VDSL系统运行和不运行时的性能对比,来检验 VDSL 对云容错平台的性能影响大小。
对VDSL日志系统的性能测试:为了验证VDSL对系统性能影响很小,通过比较对云容错平台中虚拟节点开启和不开启 VDSL 系统时的性能指标,对 VDSL 作出性能测试。在云容错集群中的所有节点上关闭 VDSL,然后运行各业务软件,并用 System Monitor 和 Top 工具从 CPU,内存和网络通信三个方面记录系统开销。(2)在各个虚拟节点开启软件日志服务功能的情况下运行各业务软件,并用System Monitor 和 Top 工具从 CPU,内存和网络通信三个方面记录系统开销。对虚拟节点上的 Apache 服务器申请总数为 100000 次持续连接请求,并发数为10,利用Top工具对系统性能数据进行监控与记录。比较以上两者的测试数据,得出VDSL系统对整个容错系统的的影响很小。VDSL日志系统利用动态二进制翻译平台,为软件容错提供虚拟运行环境、良好的隔离性、透明性,为分布式系统中各虚拟结点软件日志的记录提供了三种级别的记录粒度,可以满足不同的日志分析要求。统一的日志格式使日志管理系统满足高可用性和高扩展性。另外,在系统内采用内部时钟同步算法保证了整个系统的同步一致性。在虚拟化环境下实现了分布式系统中各虚拟结点软件日志的记录、同步聚合,为系统用户提供了有效的管理方法。
参考文献:
[1] 肖达, 刘建毅. 云灾备关键技术[J]. 中兴通讯技术, 2010, 15(5).
[2] 项国富, 金海, 邹德清. 基于虚拟化的安全监控. 软件学报, 2012, 23(8).
[3] 吴建胜. 路由交换技术[M]. 北京: 清华大学出版社, 2010.
[4] 张中莶. 接入网技术[M]. 2版.北京: 人民邮电出版社, 2009.