多可用区部署、生态支持和集群共享,金融核心系统如何实践云数据库OceanBase

本文主要从OceanBase的起源开始讲起,进而和大家分享了OceanBase的历程与架构演进,重点介绍了云数据库OceanBase,最后谈及了OceanBase未来的发展。

直播视频:点此进入

PDF下载:点此进入

以下为演讲内容整理:

 

什么是OceanBase

OceanBase是在2010年6月份开始立项的,OceanBase不是NoSQL系统,它是结合传统关系型数据库功能上的优点和分布式系统在可扩展性、可靠性上的优点打造的一款分布式关系型数据库。OceanBase支持完整的ACID,可扩展、高可用,兼容MySQL协议。

 

OceanBase的发展历程

互联网对传统关系型数据库的挑战

可扩展性

传统关系数据库本质上是单机数据库,当你的性能或容量不足时,需要换一台更大的机器,我们是一直向上扩展。想要水平扩展需通过读写分离 & 分库分表来解决,这也极大的增加了应用层的复杂度。以图中收藏夹业务为例,收藏一个商品称为收藏信息,包括收藏本身和收藏商品的信息,收藏的商品信息是变化的,商品降价需要在用户收藏夹里体现出来,收藏信息只能按用户区分,商品只能按商品ID区分,当一个用户收藏了多个表的商品时,需要在中间件层完成join操作,这样会加大业务的负担,相当于在中间件层或业务层完成了数据库本该完成的工作。

可靠性

传统关系型数据库本质上是一个单机系统,主备间是需要进行数据同步的,数据同步有三种模式:最大可用模式、最大保护模式、最大性能模式。最大保护模式要求主库和备库都写成功后才会应答客户,一旦网络抖动或者备机宕机等,整个服务就中断了,互联网行业中用这种模式比较少。最大可用模式要求主库写成功后就立即应答客户,然后把数据异步同步给备库,一旦主库宕机,极有可能造成数据不一致的情况,为了解决数据不一致的问题,一般会加共享存储等保证可靠性;主备机无法决策出谁是主谁是备,如果主机宕机,备机无法自己切换成主机,需要通过第三方组件切换。

 

OceanBase的目标

在使用普通PC服务器,不使用共享存储、小型机等昂贵硬件,以及服务器、磁盘、网络、机房(IDC)等并非持续可用的情况下,OceanBase的目标是:

首先要保证关系型数据库的功能、支持跨表跨行事务,其次要保证数据可以分布式水平扩展,对应用透明,另外,数据库要高可靠、数据强一致,可抵御单机、机架、机房(IDC)故障,且高性能。

 

OceanBase主要面临的问题

  • 数据库的功能:传统关系型数据库发展时间较长,功能丰富
  • 分布式一致性:分布式系统的多副本如何保持一致性;最终一致性、弱一致性不符合用户需求
  • 分布式事务:理论成熟,工程与性能上的优化

数据库数据总量非常大,但增删改量很少。

我们设计了如图架构,把数据分成两个部分,一部分为基线数据,另一部分为增量数据。每次的修改我们就放到一个单机的内存中,基线数据拆分到多个机器上,这样就避免了分布一致性的问题。

增量数据不可能永远放在内存中,所以内存写到一定程度后会做每日合并,合并会在数据库每天的访问低谷时进行,对业务没有影响。

最初版本V0.2

  • 存在两个单点RootServer和UpdateServer,通过HA(http://linux-ha.org/)来实现高可用
  • 基线数据节点可任意扩展
  • 写节点半同步,不能区分insert / update

V0.2相对较原始,我们的客户端代码由业务同学来写,我们的更新直接会到UpdateServer端,不能区分insert / update,这样解决了收藏夹的一个业务痛点(通过数据冗余+Join更新信息消灭随机读/写)。

V0.3 IDC & OLAP                 

  • 相比于V0.2不同的是,V0.3去除UpdateServer的HA,改由RootServer来决定谁是Master
  • 支持多IDC部署、但IDC切换需要人工介入
  • 在查询层面对并发作了优化,可满足轻量级的OLAP

V0.3绑定的业务是广告报表,主要是把数据在离线的平台计算好后导到关系数据库中,实现数据分块、并发查询,旁路导入数据。V0.3达到了千亿条记录和百T规模数据,但客户端的表现力差。

V0.4 支持SQL

V0.4支持SQL,并不是单纯改一个接口那么简单,我们在数据库功能方面迈出了一步。V0.4兼容MySQL协议,区分update/insert,支持并发更新。

V0.4去除自定义协议的客户端,没有特别多的核心业务,主要是历史库、结构化Key/Value类型的非核心业务,我们也对外开源,并开始核心业务的尝试。

V0.5 多机房同步

  • RootServer分布式选主,不再依赖HA
  • 多机房部署,少数派机房故障自动容灾,数据不丢失
  • 覆盖蚂蚁多个核心系统

在迁入核心业务系统时,我们也积累了经验,形成一套模板。比如最开始上线的蚂蚁交易核心系统;当年双11承担20%的流量;2015完成支付在内的多个核心系统迁移;第一个支撑的银行的非商业数据库。我们积累了一整套迁移方法,比如用蚂蚁中间层向应用屏蔽掉了SQL的差异,中间层通过访问数据的类型去调用不同的模板,灰度引流,随时回滚,我们称蚂蚁为流水型的系统。

回过头考虑0.5之前的架构,得出单UpdateServer的意义手至关重大的,极大简化实现,避免分布式事务,具有较简单的数据模型。当然在集群规模、数据导入上也有诸多限制。

V1.0

V1.0变更了数据模型,我们把数据分布引入了传统观念数据库的分区表,交给用户来定义,根据业务特点可能把数据分成一片一片,这时,我们把四种角色都合并到一个角色中,称为ObServer。每个ObServer是对等的,它可以负责一个分区或者多个分区的数据,每个分区会部署在3个机房,这三个副本之间会自行通过分布式选举,选举出一个组来提供服务,此时我们具备很高的灵活性,用户可以根据业务逻辑来分区。

同步机制

主库执行写事务并同步到备库,超过半数成功则事务成功。

错峰合并

  • 逐IDC合并,灰度引流,缓存预热,对用户没有影响
  • 同样的用在升级流程上,往往是在备库升级好,再切到主库中

OceanBase有着天然的优势,无论是在版本升级还是维护,都可以应用到这套机制,整个维护或者故障都可以做到对用户透明,用户感知不到变化。

降低每日合并耗时

最开始数据分布采用范围分布,一条记录修改,整个数据重写。我们在每日合并上也做了优化,采用了更细粒度的分片,把数据分块,如果某块数据发生更改,只对这条数据进行重写即可。

 

云数据库OceanBase

云数据库OceanBase是一款阿里巴巴自主研发的高性能、分布式的关系型数据库,支持完整的ACID特性。它高度兼容MySQL协议与语法,让用户能够以最小的迁移成本使用高性能、可扩展、持续可用的分布式数据库服务,同时对用户数据提供金融级可靠性的保障。云数据库OceanBase相对于传统数据库的特点如下:

  • 基于OceanBase的DBaaS:提供自助化服务,一键即可拥有OceanBase实例;免管理;提供使用建议
  • 在蚂蚁和集团长期使用,原生态输出
  • 具备输出到专有云的能力:网商银行

总的来说,云数据库OceanBase具备多可用区部署,与内部最新版本保持同步,以及生态支持和集群共享模式、无缝动态伸缩、即时生效。

 

未来发展

  • OceanBase目前仍然在快速迭代
  • 灰度升级对应用透明
  • 让数据库的归数据库,一切以简化用户使用为目标

未来OceanBase主要应考虑以下几个方面:

完善功能:以业务需求驱动,业务不符合什么功能我们就做什么功能;满足内部业务的平滑迁移,完善数据库兼容性问题;OceanBase重点完善支持FlashBack。

历史库:历史库是关系型数据库的一些瓶颈造成的,OLTP系统有典型的冷热数据;为了降低成本等,冷数据需要迁移,OceanBase正在做冷热数据自动识别、异构机型等。

OLTP & OLAP混合负载:OceanBase比较适合OLAP的,OceanBaseK可以做在线数据和离线数据同时进行分析,可以做ObServer内的资源隔离、大查询限流、利用备副本等。

成本:保持高可用的情况下,降低副本数。

 

时间: 2024-12-03 16:49:29

多可用区部署、生态支持和集群共享,金融核心系统如何实践云数据库OceanBase的相关文章

在阿里云上部署生产级别Kubernetes集群

阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群.本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级别Kubernetes集群的方法.文中所采取的技术方案具有一定的主观性,供各位读者参考.在实践中可以根据具体使用场景进行优化. 目标 当我们刚接触Kubernetes进行测试集群的搭建时,往往会选择一篇已有的教程,照着教程完成集群搭建.我们很少去质疑教程作者每一步操作的合理性,只想快点把集群搭建起来,

weblogic12C 部署了一套集群,单独访问受管理服务,会跳转到代理服务。

问题描述 weblogic12C 部署了一套集群,单独访问受管理服务,会跳转到代理服务. 开始的时候我们部署了一套集群,通过代理Server分发请求. 现在我们部署了负载均衡设备,替代软件Proxy服务,向所有节点分发请求. 问题是受管理服务在访问中,有一部分情况会把地址重定向到集群的Proxy代理地址.导致无法打开. 请问如何配置可以取消受管理服务向代理服务的跳转?

CentOS 7部署Kafka和Kafka集群

CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止. 准备工作: 安装java并设置java环境变量,在`/etc/profile`中加入 export JAVA_HOME=/usr/java/jdk1.8.0_65 export PATH=$PATH:$JAVA_HOME/bin 安装kafka 下载:wget http://mirrors.cnnic.cn/apache/kafka/0.10.0.1/kafka_2.

1-memcahe集群问题,windows系统

问题描述 memcahe集群问题,windows系统 windows环境下,如何进行memcahe的集群.找了很多文档,都是linux的.迫切需要知道window下如何集群. 解决方案 建议windows搭配虚拟机,然后再在上面跑,这些移植过来的东西性能损失一大截,得不偿失了.而且windows下连部署的文档你都找不到,出了问题更是没处解决.不要给自己挖坑.

10分钟自动部署Kubernetes1.6.1集群

Kubernetes是非常流行的容器管控平台,阿里云的容器服务团队为Kubernetes提供的基于阿里云服务的CloudProvider,让Kubernetes可以更好的和阿里云的计算资源深度集成,提供更好的性能和网络特性.本文主要目的是为大家提供一种非常简单的方法,在阿里云上部署Kubernetes集群. 本文所描述的部署过程基于阿里云资源编排服务(ROS),部署过程中会自动创建Kubernetes运行所需的VPC网络.安全组.子用户.ECS等资源,无需关注资源创建和安装细节.使大家能够非常简

Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态

1.Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1.Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower (Observer) zk集群最好配成奇数个节点 只要集群中有半数以上节点存活,集群就能提供服务   7.2 Zookeeper部署 7.2.1 机器准备 1/ 安装到3台虚拟机上,准备的三台服务器地址是: C:\Windows\System32\drivers\etc\hosts中配置的内容如下:   192.16

在ubuntu上部署Kubernetes管理docker集群示例

本文通过实际操作来演示Kubernetes的使用,因为环境有限,集群部署在本地3个ubuntu上,主要包括如下内容: 部署环境介绍,以及Kubernetes集群逻辑架构 安装部署Open vSwitch跨机器容器通信工具 安装部署Etcd和Kubernetes的各大组件 演示Kubernetes管理容器和服务 关于 Kubernetes 系统架构及组件介绍见这里. 1. 部署环境及架构 vSphere: 5.1 操作系统: ubuntu 14.04 x86_64 Open vSwith版本: 2

高可用失灵:交换机导致Oracle集群故障致机场停运

最近日本的一则数据库故障引发了全日航空(ANA)航班停运,被广泛关注. 据日本<产经新闻>3月22日报道,日本全日空航空公司(ANA)的国内航班系统22日8时20分开始发生故障,导致旅客无法办理登机手续,目前正在逐步恢复.但截至22日下午2时,已有超过120架航班停航. 今年2月24日,ANA国内航班系统就曾经发生故障,但30分种后修复,导致一部分航班晚点起飞.在2007年5月27日和2008年9月14日,也出现超过400架航班晚点或停航的故障.报道称,此次故障导致在羽田机场.大阪机场.那霸机

波兰石油公司部署Panasas并行存储集群的成功案例

  概要     行业:石油和天然气 挑战:提供一种存储解决方案,即要能够满足不断增长的计算工作量对存储的需求又要不增加管理的复杂程度 方案:Panasas ActiveStor AS 3000系统,配有ActiveScale工作环境包括采用DirectFLOW协议的Panasas PanFS并行文件系统. 结果:地震资料处理工作的速度提高了6倍,提高了地球物理学家的生产效率,增加了工作的迭代次数且改善了成像结果和服务质量,提高了定位新能源储备和/或使现有油井产能最大化的成功概率.     挑战