论文部分内容阅读
在业务数据和业务处理逐步集中,信息化日益普及的大背景下,软件系统的大型化和复杂化是必然趋势,这就对软件系统的可用性提出了更高的要求。一般而言,软件系统的高可用性是由软件的各项技术指标综合决定的,如软件系统的稳定性、安全性、可维护性、系统性能等。系统实现了高稳定性、高可维护性、高安全性、高性能,即可以取得高的系统可用性。从应用角度来说,提高这些技术指标的方法可以分为两大类,一是在问题出现前预警,二是在问题出现后有高效的解决手段,通俗地说就是及早发现和快速解决。
如何为运维人员提供充足、及时的预警,如何为运维人员跟踪解决问题提供有力的支持呢?孙子说“知彼知己者,百战不殆”,现代军事领域也有一个论断是:“发现即被消灭”,说的都是侦察手段的重要性,如果战争一方的行动完全被对方掌握,那他被消灭就是很容易的事情。同样在应用程序运行维护过程中,如果应用软件系统的各种运行状态、各个模块、各个函数、甚至每个数据的变化都是可知的、可跟踪、甚至可预测的,也就是说这些信息完全被运维人员所掌握,那么系统正常运行就易于得到保障,即使出现问题解决起来也将不是很难的事情。
本文将应用软件在运行过程中以多种方式、多层次、多角度将自身运行情况呈现给用户的能力称为应用软件系统的可视性(application visibility);相应地,具有良好可视性的应用系统称为可视化应用系统(visual application)。
应用软件的管理难题
全面掌握应用系统的运行状况对应用软件管理员而言非常重要,因为这可以提前发现隐患,一旦出现故障也能及时找到问题之所在。然而,做到这一点并不容易,其中面临着应用程序监控和系统运维过程的不确定性等诸多难题。
1.应用系统监控之难
与操作系统、中间件等基础性软件相比,应用程序的监控要困难得多。比如,中国人寿目前已经建立起来比较完善的基础平台监控机制,通过整合利用基础平台提供的各种监控接口,统一到监控平台上,形成一个完整的基础平台运行视图,并增加各种管理功能,取得了很好的效果。其之所以成功,一个很重要的因素是各种基础平台,包括硬件、操作系统、数据库、中间件等都是成熟的通用平台产品,这些产品自身都包含了丰富的运行监控接口(可称之为具有良好的可视性),管理者或使用者所做的就是利用和挖掘这些功能,并根据自己的应用特点进行针对性的整合,以统一友好的界面展现给管理人员。
而应用监控虽然也取得了一些非常好的效果,但相比系统监控效果还是有不小的差距,最根本的原因在于应用系统自身没有提供足够的、有效的关于自身运行的详细信息,也就说应用软件自身不具有很好的软件可视性。仅从应用程序消耗的公共资源来判断应用运行情况具有很大的局限性,如跟踪Tuxedo服务队列可以判断某个应用功能的排队情况,但不能很好地给出进一步的信息。就好像一台高档中央空调,仅仅能够监控它的电压、电流、温度这些通用指标是没法很好满足监控需要的,要想知道空调运行情况还需要很多指标以反映其内部部件的运行情况。应用程序监控的另一思路是对应用日志的监控,但很多情况下应用程序日志也不能满足监控要求,需要反过来在源程序中增加针对性的日志输出。另外,不同应用系统源程序的结构差异使得增加理想日志信息的工作量和风险都具有不确定性,而且这种打补丁的方式缺乏规划和统一管理。这种状况其实是反映了程序原有的可视性不能很好满足应用监控的要求。
2. 系统运维过程的不确定性
目前由于主要应用系统运行文档、运维文档不够完善,系统运维过程中查看源程序仍是最重要的问题定位、问题分析手段。系统运行中出现问题时,界面上和日志文件中的报错信息是问题定位的切入点,如果报错信息、日志记录比较明确、比较完整,运维人员就比较容易跟踪到出错前程序的运行轨迹,继而根据程序上下文逻辑判断出现问题的根本原因;反之如果日志记录不明确、不完整。例如,在程序流程跟踪过程中某个关键变量的值变化没有记录下来,运维人员判断和解决起来就困难得多,虽然看得见却摸不着,这时候问题的解决就需要依靠运维人员的经验想办法进行问题重现,有时甚至要修改源程序加入调试信息并模拟运行。这种情况下运维的效率很大程度上依赖程序日志的详细程度,依赖运维人员经验的积累,这就导致整体上应用软件的问题定位效率具有不确定性,直接后果是系统高可用性无法得到保证。
分析其原因,一是目前主要应用系统提供的日志很多是软件在开发过程中加入的调试信息,并不能称为软件系统的运行日志;二是日志侧重于记录出错现场的异常信息,不注重正常运行信息,而在实际生产环境中,那些在测试环境中从来不出现异常的地方还是会出现异常。
如果解决了目前应用软件系统的日志不全面的问题是不是就可以适应将来的需要,尤其是大集中系统的需要呢?笔者认为仍然不能满足。按目前的模式,在源程序中加入全覆盖的日志,将对系统运行效率、运行日志空间消耗、日志跟踪效率带来新的问题,因为对于特大型软件系统,系统逻辑复杂,程序调用层次多,并发操作量巨大,而且规范的应用软件维护模式不是以源程序为基础的,源程序对运维人员是不开放的。
软件可视性的
两个特征
要解决应用软件管理中存在的上述难题,需要从多方面着手,其中之一就是提高应用软件的可视性。理想的应用软件可视性应具有以下特性:
1.多角度
可视性良好的应用软件是一个“白盒”系统。不同类型的用户可以从各自的角度对其内部进行观察。用户可以是前台操作者、后台操作者、应用管理者或者系统审计者等。前台操作者和后台操作者可以非常直观地看到自己已经完成、正在进行、将要进行的操作,也可以看到操作对象的全面信息,包括历史信息、相关信息;应用管理者可以看到权限范围内系统中正在进行的所有操作员和操作对象的活动信息和历史信息;系统审计者可以看到权限范围内所有操作和对象的历史信息。
2. 结构化
可视性良好的应用软件可以实现结构化、系统化的观察(或监控)。如果软件的监控平台是软件的仪表板,应用软件可视性功能则是仪表板和各运行单元之间以及运行单元内部的传感器。软件系统的整体运行状况、各部件的运行状况信息可以通过传感器获取,并传递给仪表板,以方便及时地展现在用户的面前,给出一个软件系统运行情况的全貌。这是软件系统可视性的最基本要求。
在仪表板的基础上,可以对各个部件的运行情况进行进一步深入的展现,逐层展现部件内部的运行情况,类似于数据仓库中的下钻分析。相对于传统机械设备和模拟电子设备,应用软件系统作为纯数字信息系统,在数据采集、数据管理上具有更大的优势,应该比空调、汽车更易于实现。
关注可视性
对运行效率的影响
目前,大型应用系统所消耗资源主要分为主机资源和存储资源两大方面。要实现应用系统完全的可视性,在主机资源和存储资源上的开销都将是十分巨大的,可能会影响系统的运行效率和存储效率。在运行效率方面,类似的情况如Informix的存储过程trace模式和非trace模式在效率上的不同,其运行效率有一倍以上的差异;在存储效率方面,保证良好的可视性特征所需的存储开销将随着业务处理集中程度的提高、业务规模不断发展而快速增长,如不进行有效管理,数据量可能超过业务数据量甚至存在数量级上的差异。
运行效率方面的问题解决可以采用类似于数据库的优化策略。这并行操作是关键,即将系统可视性方面的资源开销同程序主业务逻辑处理所占资源独立分配,如采用物理独立的数据库和文件系统以及独立的内存空间,主程序通过特定方式将可视化信息填写到这些专用的空间,再由专用的进程或工具进行整理、加工和展示。类似于Oracle 10g的自动负载仓库 (Automatic Workload Repository)机制。
存储效率方面问题的解决关键是分级管理,根据可视化数据的性质、时效、历史价值、用户等属性不同而采用不同的存储、转存、销毁策略。
笔者认为在主机资源上占用主业务逻辑处理程序的15%
如何为运维人员提供充足、及时的预警,如何为运维人员跟踪解决问题提供有力的支持呢?孙子说“知彼知己者,百战不殆”,现代军事领域也有一个论断是:“发现即被消灭”,说的都是侦察手段的重要性,如果战争一方的行动完全被对方掌握,那他被消灭就是很容易的事情。同样在应用程序运行维护过程中,如果应用软件系统的各种运行状态、各个模块、各个函数、甚至每个数据的变化都是可知的、可跟踪、甚至可预测的,也就是说这些信息完全被运维人员所掌握,那么系统正常运行就易于得到保障,即使出现问题解决起来也将不是很难的事情。
本文将应用软件在运行过程中以多种方式、多层次、多角度将自身运行情况呈现给用户的能力称为应用软件系统的可视性(application visibility);相应地,具有良好可视性的应用系统称为可视化应用系统(visual application)。
应用软件的管理难题
全面掌握应用系统的运行状况对应用软件管理员而言非常重要,因为这可以提前发现隐患,一旦出现故障也能及时找到问题之所在。然而,做到这一点并不容易,其中面临着应用程序监控和系统运维过程的不确定性等诸多难题。
1.应用系统监控之难
与操作系统、中间件等基础性软件相比,应用程序的监控要困难得多。比如,中国人寿目前已经建立起来比较完善的基础平台监控机制,通过整合利用基础平台提供的各种监控接口,统一到监控平台上,形成一个完整的基础平台运行视图,并增加各种管理功能,取得了很好的效果。其之所以成功,一个很重要的因素是各种基础平台,包括硬件、操作系统、数据库、中间件等都是成熟的通用平台产品,这些产品自身都包含了丰富的运行监控接口(可称之为具有良好的可视性),管理者或使用者所做的就是利用和挖掘这些功能,并根据自己的应用特点进行针对性的整合,以统一友好的界面展现给管理人员。
而应用监控虽然也取得了一些非常好的效果,但相比系统监控效果还是有不小的差距,最根本的原因在于应用系统自身没有提供足够的、有效的关于自身运行的详细信息,也就说应用软件自身不具有很好的软件可视性。仅从应用程序消耗的公共资源来判断应用运行情况具有很大的局限性,如跟踪Tuxedo服务队列可以判断某个应用功能的排队情况,但不能很好地给出进一步的信息。就好像一台高档中央空调,仅仅能够监控它的电压、电流、温度这些通用指标是没法很好满足监控需要的,要想知道空调运行情况还需要很多指标以反映其内部部件的运行情况。应用程序监控的另一思路是对应用日志的监控,但很多情况下应用程序日志也不能满足监控要求,需要反过来在源程序中增加针对性的日志输出。另外,不同应用系统源程序的结构差异使得增加理想日志信息的工作量和风险都具有不确定性,而且这种打补丁的方式缺乏规划和统一管理。这种状况其实是反映了程序原有的可视性不能很好满足应用监控的要求。
2. 系统运维过程的不确定性
目前由于主要应用系统运行文档、运维文档不够完善,系统运维过程中查看源程序仍是最重要的问题定位、问题分析手段。系统运行中出现问题时,界面上和日志文件中的报错信息是问题定位的切入点,如果报错信息、日志记录比较明确、比较完整,运维人员就比较容易跟踪到出错前程序的运行轨迹,继而根据程序上下文逻辑判断出现问题的根本原因;反之如果日志记录不明确、不完整。例如,在程序流程跟踪过程中某个关键变量的值变化没有记录下来,运维人员判断和解决起来就困难得多,虽然看得见却摸不着,这时候问题的解决就需要依靠运维人员的经验想办法进行问题重现,有时甚至要修改源程序加入调试信息并模拟运行。这种情况下运维的效率很大程度上依赖程序日志的详细程度,依赖运维人员经验的积累,这就导致整体上应用软件的问题定位效率具有不确定性,直接后果是系统高可用性无法得到保证。
分析其原因,一是目前主要应用系统提供的日志很多是软件在开发过程中加入的调试信息,并不能称为软件系统的运行日志;二是日志侧重于记录出错现场的异常信息,不注重正常运行信息,而在实际生产环境中,那些在测试环境中从来不出现异常的地方还是会出现异常。
如果解决了目前应用软件系统的日志不全面的问题是不是就可以适应将来的需要,尤其是大集中系统的需要呢?笔者认为仍然不能满足。按目前的模式,在源程序中加入全覆盖的日志,将对系统运行效率、运行日志空间消耗、日志跟踪效率带来新的问题,因为对于特大型软件系统,系统逻辑复杂,程序调用层次多,并发操作量巨大,而且规范的应用软件维护模式不是以源程序为基础的,源程序对运维人员是不开放的。
软件可视性的
两个特征
要解决应用软件管理中存在的上述难题,需要从多方面着手,其中之一就是提高应用软件的可视性。理想的应用软件可视性应具有以下特性:
1.多角度
可视性良好的应用软件是一个“白盒”系统。不同类型的用户可以从各自的角度对其内部进行观察。用户可以是前台操作者、后台操作者、应用管理者或者系统审计者等。前台操作者和后台操作者可以非常直观地看到自己已经完成、正在进行、将要进行的操作,也可以看到操作对象的全面信息,包括历史信息、相关信息;应用管理者可以看到权限范围内系统中正在进行的所有操作员和操作对象的活动信息和历史信息;系统审计者可以看到权限范围内所有操作和对象的历史信息。
2. 结构化
可视性良好的应用软件可以实现结构化、系统化的观察(或监控)。如果软件的监控平台是软件的仪表板,应用软件可视性功能则是仪表板和各运行单元之间以及运行单元内部的传感器。软件系统的整体运行状况、各部件的运行状况信息可以通过传感器获取,并传递给仪表板,以方便及时地展现在用户的面前,给出一个软件系统运行情况的全貌。这是软件系统可视性的最基本要求。
在仪表板的基础上,可以对各个部件的运行情况进行进一步深入的展现,逐层展现部件内部的运行情况,类似于数据仓库中的下钻分析。相对于传统机械设备和模拟电子设备,应用软件系统作为纯数字信息系统,在数据采集、数据管理上具有更大的优势,应该比空调、汽车更易于实现。
关注可视性
对运行效率的影响
目前,大型应用系统所消耗资源主要分为主机资源和存储资源两大方面。要实现应用系统完全的可视性,在主机资源和存储资源上的开销都将是十分巨大的,可能会影响系统的运行效率和存储效率。在运行效率方面,类似的情况如Informix的存储过程trace模式和非trace模式在效率上的不同,其运行效率有一倍以上的差异;在存储效率方面,保证良好的可视性特征所需的存储开销将随着业务处理集中程度的提高、业务规模不断发展而快速增长,如不进行有效管理,数据量可能超过业务数据量甚至存在数量级上的差异。
运行效率方面的问题解决可以采用类似于数据库的优化策略。这并行操作是关键,即将系统可视性方面的资源开销同程序主业务逻辑处理所占资源独立分配,如采用物理独立的数据库和文件系统以及独立的内存空间,主程序通过特定方式将可视化信息填写到这些专用的空间,再由专用的进程或工具进行整理、加工和展示。类似于Oracle 10g的自动负载仓库 (Automatic Workload Repository)机制。
存储效率方面问题的解决关键是分级管理,根据可视化数据的性质、时效、历史价值、用户等属性不同而采用不同的存储、转存、销毁策略。
笔者认为在主机资源上占用主业务逻辑处理程序的15%