热门文章> oceanbase是什么?oceanbase基于什么开发的? >

oceanbase是什么?oceanbase基于什么开发的?

36氪企服点评小编
2021-06-03 16:38
1684次阅读

     OceanBase是一种通用的分布式关系型数据库,具有许多独特的特点。比如多租户,高可用性,极具弹性的扩展能力等等。如果把OceanBase作为一个单独的库使用,那么它的分布式优势还没有得到充分利用。本文着重介绍了一个基于分布式架构的应用程序,它充分利用了OceanBase数据库的分布式优势,并提供给我们一个OceanBase基础,帮助我们更好地了解蚂蚁金服建立在OceanBase之上的三地五中心异地多活架构。下面就有小编为您带来oceanbase基于什么开发的的相关介绍。

一、分布式数据库开发相关问题

    好的性能首先是设计出来的,应用如果追求极致的性能,就需要关注OceanBase里数据的相关事情。如:

  • 数据如何分布?
  • 数据如何读写?
  • 存储容量瓶颈怎么办?
  • 访问性能瓶颈怎么办?
  • 数据库出故障时数据可用性和可靠性具体怎样?应用需要做什么特殊处理么?
  • 数据库扩展时应用需要迁移数据么?数据迁移的时候对应用有什么影响?

   这些问题对理解OceanBase的分布式特点很有帮助。后面我们逐步看看OceanBase是如何应对。

二、OceanBase集群外观

   首先简介一下OceanBase集群的外观。

    OceanBase是以集群形式运行的,由一堆服务器组成。上图是「三副本」部署,机器会分为三组,每组一个区域(称为Zone),各个机器通过网络互相访问。没有光纤交换机、共享存储以及直连网线等。

    服务器通常建议CPU、内存和磁盘尽可能的大,磁盘建议用普通SSD盘。普通服务器的好处是便宜,劣势是可靠性和性能可能不如小型机那么高。也就是说OceanBase可以部署在一组可靠性和性能不是特别高的普通服务器上,却提供了高性能、高可用和高可靠、弹性伸缩等多项能力。

    以上是一个OceanBase集群的外观和能力,但是提供给业务的并不是这个集群的全部资源和能力,而是其子集,即租户(Tenant)。

oceanbase是什么?oceanbase基于什么开发的?oceanbase

三、OceanBase多租户特性

    OceanBase定义了一些基本的资源规格(Resource unit config,如4CPU8Gmem500Gdisk等),然后选取某类资源规格创建一组资源池(Resource Pool),此时集群资源就有一部分被分配出去了。最后将这个资源池关联到一个新建租户,则租户就可以使用这个资源池的能力。

   OceanBase默认有个sys租户,管理整个集群。用户租户必须在sys租户内部创建。

    如下示例就是创建租户的过程。

    OceanBase兼容了大部分MySQL连接协议和语法,租户的使用体验跟MySQL实例很像。研 发可以在租户里创建数据库(Database)、表(Table)。还包括分区表等。

    OceanBase里描述数据的最小粒度是分区。普通的表(非分区表)就是一个分区,分区表则包含多个分区。

    租户的示意图如下。租户之间数据是绝对隔离,资源有一定程度隔离。研发可以将业务先垂直拆分为多个独立的子业务,分别使用不同的租户或者集群。

四、OceanBase资源单元

    租户里并不知道数据具体在哪个机器上,也可以说没必要知道。只是租户的性能还取决于运维为租户规划的资源池分布情况,所以了解一下资源单元的分布特点对性能规划也是有意义的。

    资源池(Resource Pool)是由一组资源单元(Resource Unit)组成。资源单元数量默认跟Zone的数量一致或者是它的倍数(可以配置具体分布在哪些Zone以及每个Zone里的Unit数量)。

    资源单元具备一定的资源能力,是数据的容器。租户拥有的资源单元规格和数量决定了这个租户最大性能。资源单元可以在同一个Zone的不同节点之间自由迁移,OceanBase借此来维持各个节点的资源利用率尽可能维持一个均衡状态。

oceanbase是什么?oceanbase基于什么开发的?oceanbase

五、OceanBase拆分设计

数据库拆分

     数据库拆分有两种。

    一是垂直拆分。即按业务模块拆分到不同的实例或库里。为了模块之间互不影响,拆分到不同的实例比较好。在OceanBase里实现时可以是拆分到同一个集群里不同租户或者不同集群里的租户都可以,取决于业务规模和数据库集群规模。垂直拆分很好理解,后面不再赘述。

    一是水平拆分。即按某个业务维度将数据拆分到多个分片。这些分片可以是在一个库或者不同库或者不同实例的不同库下。水平拆分实现又有两类常用的选择。如下:

  • 分库分表。将一个业务表拆分到N个相同结构的物理表中。中间件做业务表(逻辑表)到分表(物理表)的映射路由以及其他相关操作(如结果聚合计算)等。这个N个物理表可以在不同实例的不同分库中。分库的维度和分表的维度可以不一样,比较灵活。
  • 分区表。将一个物理表设计为分区表,拆分到N个分区。分区表的各个分区结构是数据库内部保证一致。OceanBase选择的是分区表的水平拆分方式,并且支持二级分区表(即有2个不同的拆分维度叠加使用)。

     租户分组的意义依然是为了在分布式架构下尽可能将一个业务流程内多次数据库请求都约束在同一个Zone或者Region(注:OceanBase将地域相邻的Zone定义为一个Region)里。

     能使用这个解决方案的业务都是能按用户维度做水平拆分。有些业务的拆分维度跟用户维度是冲突的,或者有些业务的数据只支持集中写入等,不能做到上面这种多活,但也可以使用OceanBase,实现单点写入,多点读取的功能。

      OceanBase在异地容灾体系结构和多活体系结构中的价值在于,它支持水平分割规则的定义,解决了多个机房之间的数据同步和一致性问题,并始终提供高可用性和弹性扩展等功能。 以上就是小编为您介绍的oceanbase基于什么开发的,希望对您有所帮助。

[免责声明]

文章标题: oceanbase是什么?oceanbase基于什么开发的?

文章内容为网站编辑整理发布,仅供学习与参考,不代表本网站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时沟通。发送邮件至36dianping@36kr.com,我们会在3个工作日内处理。

相关文章
最新文章
查看更多
关注 36氪企服点评 公众号
打开微信扫一扫
为您推送企服点评最新内容
消息通知
咨询入驻
商务合作