内存数据库在提升系统可用性上的应用
2018-11-09蔡侠
蔡侠
(中电福富信息科技有限公司,福建 福州 350003)
1 引言
传统的IT系统为了在能够提供高速数据访问性能的要求下还兼顾数据持久化的保障,经常采用的“物理数据库+共享内存”的部署模式来存放需要高频访问的数据。这种部署模式的做法是将需要高频访问的数据从物理数据库上载至共享内存中,并对共享内存数据区建立索引来提高读的性能,对于写的操作通过先更新内存而后更新数据库的方式,在数据库提交失败的情况下对内存进行回滚。显而易见,这种实现方式存在着代码实现逻辑复杂、开发量大、新需求响应慢、系统建设周期长等多种弊端。而最大的问题则是系统在可用性上的不足,当系统的主应用服务器出现故障时,备用应用服务器需要耗费一定的时间才能成将数据从物理数据库加载到共享内存中,这段时间内系统的业务处理只能中断。
2 内存数据库介绍及分析
内存数据库(MMDB:Main Memory Database)则为以上问题带来一种新的解决方案,引入内存数据库协同传统关系型物理数据库的系统能够在一定程度上兼顾数据高效访问性能与高可用性。
内存数据库技术对查询处理和数据结构进行了重新设计,全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,能够更加有效地使用主机CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而内存数据库能够确保数据访问的高性能,其数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。
成熟的内存数据库产品一般都具备以下重要功能特征:
(1)符合RDBMS标准;
(2)支持SQL访问,支持ODBC&JDBC;
(3)高可靠性;
(4)支持完整日志;
(5)支持镜像复制功能;(6)支持索引,具有较高的读取扩展性和很好的并发性。在与传统物理数据库(如oracle等)的互操作方面,不同内存数据库的支持有所区别,有的需要应用去实现。
以TimesTen内存数据库为例,其满足了上文所述的各种特征之外还具备以下几个重要特点:
(1)可与oracle数据库无缝集成:支持数据在TimesTen和oracle之间双向实时自动同步;
(2)系统具备高可靠性与高可扩展性:支持多个节点并行提供服务,数据能自动在多个节点间同步或异步传输;
(3)数据持久化有保障:通过物理磁盘上的DataStore文件和Log文件保障数据持久化;
(4)数据安全性高:通过复制服务(Replication),实现数据在多个内存数据库节点间的自动高效同步。多个TimesTen节点之间可以采用多种部署模式(Active-Standby Pair,Active-Active,Active-Standby-Disaster Recovery等)。
3 应用TimesTen的典型数据部署架构
图1是一个应用了TimesTen内存数据库搭建的系统数据部署架构。
图1 应用TimesTen的典型数据部署架构
在图1中,应用与TimesTen部署在不同应用主机上,应用通过C/S连接方式访问TimesTen,确保应用与内存数据库互不干扰。应用更改生产中心的主用TimesTen数据时,数据将自动完全同步复制到备用TimesTen节点,并由其异步复制到灾备中心。由于数据在主备节点间是完全同步复制的,所以主备节点的数据完全一致。这样,当主用TimesTen发生故障时,备用TimesTen节点监控到主用节点故障,就能够立刻变更为主用TimesTen节点并接管对外的数据访问服务。当应用对节点中的数据进行更新时,仍然由该节点继续同步到灾备中心(因为原主用TimesTen节点已经发生故障)。当原主用TimesTen节点恢复后,其将自动更改角色为备用节点。
4 应用范例:某省级IT系统
以某省级IT系统为例,其部署和管理了用户的资料、余额、积量及公用配置等4大类数据,并为多个外围业务系统提供接口统一的数据访问服务。系统在对外提供性能高效的业务数据访问服务的同时,还必须具备高可用性。同时,由于用户资料、余额、积量为系统核心关键业务数据,还必须建设异地容灾备份中心以确保数据的安全性。为此,系统可引入TimesTen内存数据库来搭建数据管理单元。系统部署架构如图2所示。
在图2中,应用通过C/S方式连接访问主用TimesTen节点上的数据,当应用更新用户的余额、积量数据时,更新内容通过完全同步的方式同步到备用TimesTen节点上,并由其将更新内容异步更新到物理数据库中。更新内容通过异步模式同步到灾备TimesTen节点以及灾备物理数据库中。当主用TimesTen节点发生故障时,由于备用TimesTen节点上的数据与主用TimesTen节点完全一致,所以备用TimesTen节点能立刻接管数据服务,由此与应用节点集群一同保证了系统整体的高可用性。
图2 某IT系统架构
5 结束语
由于内存数据库系统提供了内存数据的管理,并支持包括SQL、JDBC和ODBC等在内的开放业界标准,其兼容性好,应用开发的复杂度低,系统的稳定性高。同时,成熟的内存数据库产品一般提供了标准的应用开发接口,能够大大缩短开发周期,原先在传统数据库下开发的代码也能够很容易地进行移植,系统也更易维护。但因受制于内存数据库主机的内存大小,内存数据库可部署管理的数据容量远比物理数据库要小。从快速恢复的角度来看,内存数据库的单库容量也不适宜过大。此外,由于TimesTen的数据文件和日志文件均存储在物理磁盘上并需要与内存保持同步以确保数据的完整性,如果物理磁盘I/O性能不佳也一样会限制其性能的发挥。所以,内存数据库在一段时期内更适合看作是传统物理数据库的一种强有力的补充。在实际应用中,我们应当针对系统面临的各种业务场景进行具体分析,可以考虑采取内存数据库与物理数据库配合共用的方式进行数据部署架构的设计。