免费论文网 首页

研究DSL虚拟化分布式软件日志管理系统

时间:2019-10-12 13:31:50 来源:免费论文网

研究DSL虚拟化分布式软件日志管理系统 本文关键词:管理系统,分布式,虚拟,研究,软件

研究DSL虚拟化分布式软件日志管理系统 本文简介:0、引言  随着云计算规模的不断扩大,灾备系统的发展成为各行各业关注的重点,云计算故障可能产生灾难性的后果,云计算中的系统故障和软件故障则会影响成千上万家企业.与此同时,分布式软件的组成部分也日趋庞大与复杂,这给系统调试以及系统维护带来了很大的不确定性.  如何有效利用分布式软件在运行过程中产生的大

研究DSL虚拟化分布式软件日志管理系统 本文内容:

  0 、引言

  随着云计算规模的不断扩大,灾备系统的发展成为各行各业关注的重点,云计算故障可能产生灾难性的后果,云计算中的系统故障和软件故障则会影响成千上万家企业.与此同时,分布式软件的组成部分也日趋庞大与复杂,这给系统调试以及系统维护带来了很大的不确定性.

  如何有效利用分布式软件在运行过程中产生的大量软件日志文件来分析状态和改善性能,以及满足软件日志服务在效率、健壮性、可扩展性方面的需求,是一个具有研究意义和实用价值的课题.虚拟化技术的不断发展给灾备与容错技术提供了更加广阔的前景.

  针对灾备云平台中所出现的系统运行环境和服务软件的故障,利用虚拟化技术封装各虚拟节点中系统的服务软件故障,可将故障带来的损失大大降低.由于分布式软件系统十分复杂,这使得分布式软件的故障处理和维护得变异常困难.

  庞大且复杂的系统在日常运行中会有各种各样的日志,若不能将这些文件及时妥当的保存,一旦出现问题或性能低下时,很难提出有效的解决方案.针对分布式软件日志管理中存在的诸多问题,为了实现分布式软件调试、监控、故障诊断与恢复功能,以及各结点的高可用性和高可靠性,本文在基于虚拟化的分布式容错备份技术的背景下,提出了VDSL虚拟化分布式软件日志管理系统,主要有以下功能点:第一,虚拟化支撑平台中分布式软件的软件日志记录;第二,虚拟化支撑平台中软件日志同步.

  1、软件日志记录平台

  软件日志记录的工具包括插桩工具,翻译工具以及调试工具.插桩工具获得程序的控制权,翻译工具记录程序指令的执行流,调试工具产生各种可供阅读性的软件日志文件.

  以上3个工具实现了软件日志功能完整的工作流程.

  1.1动态二进制翻译

  动态二进制翻译是在程序运行时动态的执行二进制代码翻译.

  一般以程序的代码块为基本单位,经翻译后生成的目标代码块立即存入缓存代码中执行,直到遇到一个新的且未翻译过的代码块.动态二进制翻译的优势是跟随着动态程序的控制流推进,很好地解决了代码覆盖和自行修改后执行代码的问题.

  同时,由于能够得到程序的动态运行时数据流信息,更有利于进行有效的信息搜集和性能优化.

  1.2用户级翻译框架

  针对虚拟化环境下运行的业务软件,本文提出了一种用户级别的翻译框架:LogOS.LogOS是一个针对全系统翻译的基于动态翻译框架扩展的翻译框架,它可以对内核和用户级二进制文件进行翻译.LogOS允许在包含Intel VT技术的Xen VMM上,对未修改的程序进行插桩和翻译.LogOS总体架构如图1所示.

  LogOS由一个虚拟机(virtual machine,VM),一个代码高速缓存单元code cache和一个Logger调用的检测API构成.VM由一个即时编译器,一个模拟器和一个调度程序器组成.在LogOS取得对程序的控制之后,VM协调它的组成部分并执行程序:调度器启动JIT(just in time)编译器和检测程序代码.被编译的代码存储在目标代码高速缓存单元中.

  从代码缓存进出VM涉及到存储和恢复应用程序寄存器状态emulator翻译不能直接执行的指令.它是给需要VM特殊处理的系统调用使用的.因为LogOS是建立在操作系统之上的,因此它只能获取用户状态下的代码.程序在LogOS中执行完毕后,Logger完成了对程序的插桩,然后与程序分离,将所得到的不同粒度的软件运行日志存放在本地文件中.

  1.3软件日志记录

  日志系统实现的日志记录功能包括:内存检查,函数调用检查,缓存调用检查,多线程程序竞争检查和堆栈使用检查.利用Xen虚拟化技术将LogOS置于GuestOS下面,可以避免修改GuestOS的源码,且可以观测在Domain U每一条指令的执行,提供了良好的隔离性和透明性,同时,Xen Hypervisor为LogOS提供模拟的硬件支持.

  1.3.1内存分析

  Memlog堆栈异常是程序员常见的代码错误,处理堆栈异常最困难的地方在于定位Bug发生的代码段.Memlog会检查内存中一切读写行为,能够检测到程序运行中的所有内存错误情况.Memlog作为动态二进制检测工具,在无需修改程序源代码的情况下动态检测指令访问堆栈的情况,并记录具有实用价值的运行日志信息.

  其检测原理如图2所示.有效值表映射:进程中地址空间的各个字节均存在和它匹配映射的八个位;同样,各寄存器一样存在和它匹配的位.各字节或者寄存器值的有效性和已初始化的值可以有这样的向量标记.有效地址表映射:用一个bit标识地址空间的各个字节的地址,记录程序是否可以读写这个字节.检测原理:当程序读一个字节时会检查与之匹配的位的真假.若为假,则该地址的读操作位是非法操作.

  当程序写一个字节时,会检查与之匹配的位的真假.若为假,则该地址的写操作位是非法操作.

  1.3.2缓存调用分析

  Cachelog指令访问缓存的命中率高低对一个程序的运行速度存在不小的影响.Cachelog通过检测指令对内存的每次读写计算出缓存命中率,找出影响程序性能的瓶颈.为了模拟程序在不同Cache配置下的执行行为,Cachelog必须要探测到程序每条指令的每次缓存读写命中率,进而根据各种Cache配置模拟Cache的行为.为了对不同的Cache配置实现行为模拟,必须理解Cache的特征参数.

  对于普通缓存块,其规格参数包括:缓存与缓存块的大小、缓存的组织方式与替换策略等.对缓存块的读写与替换是Cache行为模拟中十分关键的操作,下面阐述的算法原型可以实现以上功能.

  1)读操作:将Read_Addr与Block_Size匹配并对齐.按照缓冲块的组织结构用对齐后的Read_Addr查找缓存块所在的组.遍历Cache_Block组检测有效值,并查找是否有共同地址的Cache_Block块.若查找成功,则hit_count++,反之,miss_count++.

  同时,更新缓存块的数据.

  2)写操作:按照写分配原则.假设在写缓存时发生不命中的情况,就一定要将缓存的数据置换入缓存进而重写.

  此时,对缓存写的操作和读操作就一致了.因为当前流行的CPU都是遵循的写分配原则,所以Cachelog用统一算法模拟缓存的写操作.

  3)替换操作:以下一步即将访问的地址为索引,查找其所保存的组.依据相应的置换算法在组里选取命中率最低的缓存块.重新计算新缓存块的block_start_addr.

  2 、分布式软件日志同步

  2.1日志格式

  软件日志记录进程在执行时产生各种数据,包括程序在运行时的各个级别数据流信息.为了支持故障审计与性能分析,日志系统很重要的一个部分就是设计日志记录的格式.日志记录的格式必须是可配置的,用户可以自行配置分布式软件在运行过程中所要记录的日志数据信息.为保证日志管理系统的通用性,定义了如下日志记录格式:Id:日志记录中的日志Id是连续递增的,当需要对系统中某个节点中的某个服务软件的状态在某段时间的运行状况进行分析时,只用查找这一段连续的Id.

  IpAddress:标识记录日志的主机IP.由日志系统通过本地函数获得.
  LogTime:记录日志的时间.LogPid:产生日志的进程号.
  ObjName:产生日志的分布式软件对象名称.
  LogType:标识日志类型,表示不同类型软件日志的用途.
  LogLevel:日志级别,根据不同粒度的数据流记录可以产生不同的日志.
  LogText:日志内容.

  为了确保日志文件有相同格式,日志系统将上述的日志数据封装为具有统一格式的日志文件.日志系统的日志记录结构与日志文件结构之间的关系,如图3所示.

 

  相对于传统的文本传输方式,日志系统采用效率更高的纯二进制数据传输方式.此外,在对日志文件写入数据之前,本文通过CORBA Any类型将其封装成8位位组序列,这样可以让日志系统适用保密信息的传输.在外界看来,日志信息在传输过程中是完全透明的,无法使用文本编辑器打开日志文件,这样做可以确保日志传输的安全性.

  当传输完毕时,开始解封装日志信息.从CORBA中提取属于本文日志文件的属性值,然后还原为发送前的原始格式.以上流程实现了软件日志的格式处理.

  2.2日志传输

  假设不止一个进程同时申请访问只能被单独占有系统资源.这种状况肯定就会使各进程之间产生竞争.目前,在大多数分布式软件系统中,每个服务软件的每个进程都在写自己的日志文件.

  假设系统中有k个进程,他们都在单独地写自己的日志文件,则进程间不会产生互斥.但是假设在进程读写日志文件的时候,传输代理却需要读取这些日志文件中的内容,就需要解决读写互斥问题.因此,多个进程如何对同一个进程进行读写互斥操作是一个亟待解决的问题.

  通常的做法是对文件加锁,但是用加锁解决文件读写互斥存在以下两个问题:

  1)对于并发度很高的系统会影响系统的性能;2)可扩展性差,限制了节点的主机性能.于是,本文提出一种适用于以上问题的方法:双缓冲区策略,如图4所示:K个进程相互独立,每个进程各有两个相应的缓冲区.

  当系统运行时,每个节点上的进程将产生的数据流写入缓冲区1.若缓冲区2非空,则缓冲区1继续处理进程的请求.如果出现缓冲区2为空的情况,则将缓冲区1推送到缓冲区2的位置,且停止往缓冲区1中写入日志数据.传输代理只需处理缓冲区2中的日志数据即可.

  同时,系统再分配一个空缓冲区作为新的缓冲区1继续处理进程提出的日志请求.这样传输代理就不需要与各进程之间进行交互,避免了读写互斥,提高了处理日志文件的速度.

  2.3日志同步

  出于各种原因,分布式软件系统中各结点的物理时钟可能无法同步.对一个用于各节点单独记录软件日志的日志管理系统来说,各结点时钟不同步会增加整个日志系统的管理难度,从而对实现故障审计和性能分析造成很大的困难.现有的时钟同步算法主要包括外部同步算法和内部同步算法两种模式.

  外部同步算法指用标准的外部时间源将各节点的时钟同步,这种模式的好处是可以实现时间的绝对精准.相对于外部时钟同步算法,日志系统只要使分布式系统中各节点的时钟保持一致,就能够确定分布式系统中各节点上日志的记录次序.若分布式软件系统不具备UTC(universal timecoordinated),则可以使用内部时钟同步算法.

  本文在日志系统中指定一个虚拟节点作为标准主节点,其他是从节点.这里有两种类型的内部同步方案:

  1)主控方案,主节点为标准时间,从节点严格按照主节点调整时间;2)从控方案,主节点作为参考时钟源,各节点处理独有的同步信息.此方案可以很大程度上减少信息的交换量.但由于只存在单一的主节点,如果发生故障就需要申请系统资源去分配新的主节点.

  同时,分布式软件系统将产生大量同步信息淹没主节点.所以,本文只讨论第一种方案.本文设计了一种内部同步算法:在日志系统中选择一个节点作为主节点.主节点周期性地持续发送时钟信号把自己本地的当前标准时间发送到其他时钟同步的从节点,并记录每个从节点各自的本地时间.

  进而,每个接到从主节点发送的标准时间的从节点计算本地时间与标准时间之间的时差,返回给主节点.主节点估算时钟信号的往返时间,进而修正每个从节点返回的时差值.告诉各从节点怎样修改自己的时间.这样就完成了整个日志系统中各节点的时钟同步,其算法时序图如图5所示.

  

  以下给出算法描述:

  1)主机S向从机Ci发送同步信号Msg1.获取时间差值.同步信号包含主机发送消息的时间Ts(t1).

  2)从机Ci在本地时间TCi(t1)接收到同步信号Msg1.由此得知:本地时间与主机时间之差:Δti=TCi(t1)-TS(t1)-Ttrans(i) (1)其中,Ttrans(i)为消息从主机S到从机Ci的信息传输时间.获取从机向主机发送消息的异常容错时间,即从机接收到信息和发送信息的时间差:Δli=TCi(t2)-TCi(t1) (2)其中,TCi(t2)为从机发送响应消息的本地时间.

  3)主机S在本机时间TS(t2)收到响应消息Msg2,计算Ttrans(i):



  3、性能测试与分析

  3.1测试环境

  基于虚拟化的云容错系统搭建在4台物理服务器和磁盘阵列组成的硬件平台上,配置如表1所示,操作系统为CentOS 6.2,Linux内核版本为2.6.32.2.1,系统虚拟化软件采用支持Remus的Xen 4.2.1,Domain U采用半虚拟化方式,内核为2.6.32.2.1.

  

  支撑日志系统的云容错平台的测试部署中主节点物理资源池由4台物理服务器组成,备份节点物理资源池也由4台物理服务器组成.在物理节点之上,通过虚拟化管理软件OpenNebula管理虚拟集群,通过Packmaker管理容错集群,主、备虚拟节点之间的迁移由Remus实现.


  基于虚拟化的分布软件日志管理系统一共使用了5个虚拟节点,其中软件日志节点使用了4个虚拟机,故障服务器使用了1个虚拟机.

  3.2性能测试验证日志LogOS的记录模块能够记录两种粒度软件运行的数据流,基于不同粒度的数据流可以对软件日志分析提供支持,根据这些软件日志,可以实现故障分析与性能调优.

  下面是测试结果:

  1)Memlog实验案例利用Memlog收集httpd后台Daemon进程运行数据流,并对内存误操作和非法操作进行检测.产生的日志文件如图6所示.

  图6中最上面的方框显示的数字(2 176)表示的是Process ID.中间的方框表示的是程序分配和实用内存的统计数据.下面的方框表示Memlog通过运行被测试程序发现的内存问题.通过阅读这些信息,可以发现:这是内存泄露问题,泄露8 192B;发生错误时的函数堆栈以及源代码行图7中最上面的方框显示的是各级缓存的使用统计,读写信息与格式.

  中间的方框表示的是各级缓存读写命中和丢失的统计.下面的方框表示Cache-log统计每个进程对各级缓存的读写命中与丢失的详细信息.

  4、结论

  本文提出了基于虚拟化的分布式日志管理系统VDSL,使用虚拟化技术为软件容错提供虚拟运行环境,为软件容错提供了良好的隔离性与透明性.本文基于动态二进制翻译技术的日志记录基础平台LogOS,通过其可扩展的功能模块,创建了能够记录程序运行数据流的动态二进制探测工具Logger.本文还提出了基于数据库的日志存储形式和双缓冲区策略的日志传输方式,并设计了响应的日志记录格式和日志记录级别.

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


研究DSL虚拟化分布式软件日志管理系统
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/show/226880.html
转载请保留,谢谢!
相关阅读
最近更新
推荐专题