2018-11-05 如何在「不可靠」硬件上实现金融级高可用?

序言

就像在“传统关系数据库高可用的缺失”一文中所看到的,高可用在传统关系数据库的理论和实践上都是缺失的,这使得传统数据库无法做到主库备库完全一致,为了减少主库故障对业务的影响不得不使用昂贵的高可靠硬件,缺乏高可用还导致了分布式OLTP数据库缺失、无法水平伸缩从而使得高并发业务不得不采用更加昂贵的大型服务器等。作为分布式关系数据库,OceanBase必须解决这个问题。那么,采用普通PC服务器的OceanBase是如何做到高可用的呢?

解决之道

传统关系数据库假设硬件是相当可靠的,而OceanBase必须假设硬件是不可靠的,为了应对硬件的故障,OceanBase采用了Leslie Lamport在论文“The Part-Time Parliament”中发明的分布式一致性协议Paxos。这个协议是一种多数派协议,即任何修改都需要超过半数的参与者同意才能通过。OceanBase的做法是:

  1. 数据库的每个数据分片都有三个(或以上)的库,其中一个是主库,其余是备库,每台服务器上通常既有主库(一部分数据分片)也有备库(另一部分数据分片),而传统数据库整个库要么是主库要么是备库;
  2. 主库由所有库选举产生,同一时间每个数据分片最多只有一个主库;主库只有相当短的任期(例如若干秒),到期前可以申请连任;如果因为故障等原因主库无法连任,则主库任期到期后活着的其他库(只要超过半数)就会选举出新的主库;
  3. 事务由主库执行:主库执行写事务(含增删改操作的事务)后,把事务日志(red log)同步到备库,只有在包括主库自己在内的超过半数库(比如3个库中的2个,5个库中的3个等)都收到了日志并且持久化了,事务才提交。

Paxos协议带来的一个明显的好处是,即使主库突发故障,只要活着的库超过半数,则已经提交的每一笔事务的日志至少会在一个库上存在。活着的库在选举出新的主库后,新的主库可与每个备库通信以便获得所有已经提交的事务,然后继续提供服务,而不会有任何数据丢失(Recovery Point Object,RPO=0),这是传统数据库的主备镜像无法做到的。

对于只需要部署在本地的业务,OceanBase的做法通常是3个库(3份数据)分布在三个机房,如下图所示:

image

OceanBase同城三机房部署

在三机房部署模式下,单个服务器甚至单个机房故障(不论其中是否有主库),OceanBase都不会停止服务,数据也不会有任何损失,任何网络故障只要不导致三个机房两两之间的网络都断开,OceanBase就可以正常服务,也不会有任何的数据损失。

由于主库粒度小,OceanBase的主库可以均匀分布到两个主机房,因此正常情况下两个主机房的数据库服务器以及其中的应用服务器都处于工作状态,提高了服务器的利用率,并降低了成本。

本地部署难以抵御地震、水灾等自然灾害,因此重要的业务通常采用跨城市部署,OceanBase有两种做法,一种是两地三中心部署:

image

OceanBase两地三机房部署

两地三中心部署下,任何单机或单机房故障(不论其中是否有主库),OceanBase都不会停止服务,数据也不会有任何损失,任何网络故障只要不导致三个机房两两之间的网络都断开,OceanBase都可以正常服务,也不会有任何的数据损失。

由于主库粒度小,OceanBase的主库可以均匀分布到主城市的两个机房,因此正常情况下两个机房的数据库服务器连同其中的应用服务器都处于工作状态,进一步提高了服务器的利用率,并降低了成本。这与银行采用的传统数据库的两地三中心的“主库(主机房)+同城热备库(同城热备机房)+异地灾备库(异地灾备机房)”有所不同,这种方式下通常只有主机房的服务器是处于工作状态的。

两地三中心部署下,如果主城市出现城市级故障,则灾备城市的OceanBase库依然可以工作,但由于没有了多数派,因此灾备库的数据是有损的,即RPO>0。OceanBase另一种部署,三地五中心,则实现了城市级故障的无损容灾,即RPO=0:

image

OceanBase三地五中心部署

三地五中心部署下,任何单机或单机房或单个城市故障(不论其中是否有主库),OceanBase都不会停止服务,数据也不会有任何损失,任何网络故障只要活着的三个机房两两之间能够通信,OceanBase就可以正常服务,也不会有任何的数据损失。

由于主库粒度小,OceanBase的主库可以均匀分布到两个主城市的四个机房,因此正常情况下四个机房的数据库服务器以及其中的应用服务器都处于工作状态,更进一步提高了服务器的利用率,并降低了成本。

尽管跨城市部署和数据同步导致了事务提交时间的增加,但三地五中心部署不仅真正做到了多库多活,而且实现了城市级故障的无损容灾(RPO=0),这对于许多关键业务和系统十分重要。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库新发现

Oracle11g的新特性-11g New Features

随着这几天Oracle OpenWorld大会的召开,Oracle11g的新特性越来越多的被展现出来。

1174
来自专栏存储

分布式架构—基本思想汇总

往期精选 在互联网大行其道的今天,各种分布式系统已经司空见惯。搜索引擎、电商网站、微博、微信、O2O平台。。凡是涉及到大规模用户、高并发访问的,无一不是分布式。...

22710
来自专栏不止思考

架构设计之「服务隔离」

那什么是「服务隔离」呢? 顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块...

1463
来自专栏杨建荣的学习笔记

时间序列数据库InfluxDB初探(r12笔记第74天)

性能监控中的很多数据都是根据时间维度来生成的,就算是很少的几台服务器,如果设置了大量的监控项,每天的数据量也是很客观的,再加上是成千上万的服务器,这个量级就...

3507
来自专栏纯洁的微笑

微服务架构—服务降级

什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或...

1872
来自专栏恰童鞋骚年

谈谈对于企业级系统架构的理解—李平

原文地址:http://www.cnblogs.com/liping13599168/archive/2011/05/11/2043127.html

1214
来自专栏FreeBuf

一款可获取高精度地理和设备信息的工具分析

Seeker是一款可以获取高精度地理和设备信息的工具。其利用HTML5,Javascript,JQuery和PHP来抓取设备信息,以及Geolocation接口...

1212
来自专栏向治洪

android 使用Vysor投影到电脑

有没有好的投影软件可以将android屏幕投影到电脑,当然这种很多,比如360就自带了投影功能,小米盒子也可以(不过貌似只能支持到4.4版本),今天要说的是Vy...

34310
来自专栏PPV课数据科学社区

数据加学堂:大熊学python3爬虫–scrapy浅探(三)

? 在新手上路(三)贴过一段代码,就是爬取问吧里面的question 问题,answer回答,topic话题标签,source问题来自哪个板块。 有一种有一种...

2957
来自专栏Java后端技术栈

推荐一款GitHub超实用的可视化代码树插件:Octotree

大家在GitHub查看代码的时候,是不是会经常跳转搜索代码!过一段时间就不知道自己跑到哪里了!有了这款工具,再也不用担心找不到位置了!

1494

扫码关注云+社区

领取腾讯云代金券