从另外一个方面讲,没有不宕机的数据库,数据库系统从底层基础设施到数据库产品本身都无法确保100%的可用性。因此在国产数据库替代工作中,高可用机制是十分必要的保障措施。而在数据库国产化替代的特殊条件下,双轨制运行又是数据库国产化替代迁移工作中的重点。
如果从Oracle等国外商用数据库直接迁移到国产数据库,切换后Oracle数据库直接下线,生产系统只使用国产数据库,我们称之为单轨制切换。而如果系统切换后,国产数据库作为主系统,Oracle作为备系统,主系统的数据自动全量复制到备系统。当主系统故障时,可以快速切换到备系统,这种运行模式称之为双轨制运行模式。双轨制运行机制是指主备系统非对称的模式,主备分别由老系统和新系统承担。
双轨制运行模式可以首先由老系统作为主系统,新系统作为备系统,等新系统运行较为稳定后择机将新系统切换为主系统,由老系统承担备系统运行,数据复制流向也做反向切换。如果新系统运行过程中发现有严重问题,可以随时快速切换回老系统,数据复制留下再次反转。等新系统故障排除后,再进行回切工作。
当新系统运行已经十分稳定后,备系统由与新系统相同的数据库替代,老系统的数据库下线,由双轨制运行切换到单轨制运行。新数据库的备用系统可以在双轨制运行之前完成建设,采用一老二新三套数据库运行的架构,也可以在双轨制转单轨制的时候开始搭建新数据库备库,具体方案可以根据企业自己的IT规划和技术要求来确定。一般情况下,双轨制运行采用逻辑复制的方式,而单轨制运行的高可用机制采用物理复制的方式。
银行、证券、能源等关键部门的关键业务系统的重要性极高,一旦出问题会产生极其严重的社会与 经济影响,因此这些企业的核心系统升级与切换一般来说都十分小心。普通的单轨制运行机制下,在系统切换的前期发现一些严重问题还可以回退到老系统,一旦系统运行一段时间后,因为数据与应用的变化产生了一些不可逆的因素,很难比较顺利地切换回老系统了。因此我们一般把单轨制运行的系统切换称为“单程票”,是没有回头路可走的。
有些朋友可能质疑双轨制机制的实施成本很高,是否有必要。其实哪怕测试再完整,复杂的核心业务系统中都可能存在一些一旦发生就不容易快速解决的BUG,如果你的业务无法承担BUG引发的系统停运、性能不足等问题,那么你就必须考虑双轨制模式作为过渡期的保障措施。双轨制运行因为在运行初期阶段不下线老系统,因此容错能力较高,不容易出现因为新系统的数据库存在一些前期未能测试出来的问题而导致系统故障无法修复,这对于保障核心业务系统的稳定过渡十分有着十分难关键的作用。
双轨制运行机制在国产化替代中不仅仅可以解决数据库的替代问题,还可以用在国产化硬件替代中发挥作用。一些关键业务系统可能不采用一步到位的模式,先替换数据库,再替换服务器。比如先用X86环境的国产数据库替换Oracle,双轨制变单轨制时,主系统数据库服务器继续使用X86,备系统的数据库和服务器都改为国产产品。等稳定运行一段时间后,将全国产生产环境切换为主系统,最后再去除X86服务器。
为了适应国内的核心业务系统迁移,目前的主流国产数据库都对双轨制运行机制提供了较好的支持。从数据双向复制,SQL语法与数据库对象的兼容性等方面都做了大量的适配,在国内也已经有了十分成功的应用。在设计双轨制运行方案的时候,仍然需要根据应用系统的特点去做精心设计,因为采用逻辑复制,复制延时与应用特点,比如长事务等都有十分密切的关系,因此绝大多数系统在实现双向复制的时候,都需要针对应用做一些改造,避免双向复制的故障。测试的时候,也需要对双向复制都做充分的测试。这是实施双轨制运行时容易忽略的地方。
2016年,某电力企业在迁移人资系统的时候,就采用了双轨制运行模式,在双轨制运行1年后,彻底改为单轨制运行。作为一个系统的双轨制运行,比起单一的数据库而言,要复杂得多。因为除了数据库要切换,操作系统、中间件等也要做切换,应用系统基于操作系统、中间件等的双轨制改造也是改造工作中不可或缺的。当时的环境是从小型机+WEBLOGIC+Oracle切换到X86服务器+国产中间件+达梦数据库。为适应双轨制运行的应用改造花了大约三个月时间。