谁能讲清楚OBProxy、ODP、OBSharding这几个概念的相同点和差异?

初学者很容易弄混,谢谢。

ODP是OBPorxy缩写,OBSharding是企业版中的产品,已经联系企业版同学

sharding为ODP中的逻辑库。
sharding优势包括:

  • 线性扩展:因为每个shard是一个独立的数据库,通过增加新的Shard节点,来线性扩展性能
  • 失败隔离: 由于Shard是一种shared-nothing技术,每个shard都是独立的,因此一个shard节点出现故障,只会影响到这个shard存放的数据,而不会影响到其他shard
  • 按照地理位置分布数据:可以选择根据地理位置不同,将数据存储在不同的shard
  • 滚动升级:选择不同时间升级不同的shard。比如同一时间只升级一个或一部分shard,那么只有这些升级的shard中存储的数据受到影响,其他的shard不受到影响,可以继续提供服务

odp是obproxy缩写,做的是数据库代理,只是单纯转发sql到ob。
odp-sharding是支持分库分表的数据库代理,可以创建逻辑库,进行分库分表代理。目前使用场景是单元化架构支持

我的疑问是:为什么要有 OBSharding 呢?它提供的独特价值是什么?用第三方的工具不行吗?为啥 OB 要自己出一个这样的工具呢?

OBSharding 是从 SOFA 的分布式数据库代理 演变过来的。OB 的拆分技术是分区技术,OBSharding 是基于 OB 做分库分表,物理实例对应 OB中的租户(mysql租户),物理分库对应 OB中的数据库。

其他应用开发商基于 OB 做分库分表也是有的。比如说 神码 金融核心应用就有自己的分布式数据库组件,可以对接 OB 企业版 ORACLE 租户。

用分库分表技术会引入新的挑战,跨实例或跨库的表连接、事务、聚合查询等。对厂商的技术能力要求比较高。 OBSharding 估计就是解决这类问题。即使如此,OBSharding 在 SQL 涉及到跨实例跨库方面限制也很多,也不支持分布式事务。其他同类数据库产品(TDSQL、PolarDB-X)这块做的比较好,因为那是他们分布式数据库能力的一部分。OBSharding 主要就用来做基于OB的单元化,业务层面规避掉一个 SQL里跨库连接或 分布式事务等。