深入浅出ODP(一):功能模块及特性详解?

深入浅出ODP(一):功能模块及特性详解?_58汽车

ODP,即OceanBase Database Proxy,是OceanBase数据库的专用服务代理。它在分布式架构和高级特性中扮演着重要角色。本文将从全链路视角,深入解析ODP的功能模块和关键特性,帮助读者全面了解ODP的工作原理和应用场景。ODP的主要功能包括:1. 连接管理:ODP负责管理与OceanBase数据库的连接,提高连接复用率,降低连接开销。2. 数据路由:ODP根据数据分布信息,智能地将SQL请求路由到数据所在的节点,提高执行效率。3. 高可用容灾:ODP具备故障检测和自动切换能力,确保数据库服务的高可用性。4. 地理位置感知:ODP会考虑机器的地理位置,避免跨机房、跨城的请求,优化网络性能。ODP的发展历程:- 2014年开始设计研发,至今已有七年多的历史。- 在蚂蚁集团、专有云、公有云等场景广泛应用。- 未来将提供SDK形态,满足不同开发需求。ODP的关键特性:- 透明性:对用户完全透明,无需修改现有代码即可使用。- 产品化:ODP将一些基础能力产品化,如分库分表能力。- 持续迭代:ODP不断优化,满足客户需求,提升产品体验。通过本文的介绍,相信大家对ODP有了更深入的了解。未来,ODP将与OceanBase数据库内核共同进步,为大家提供更优质的产品、文档和服务。让我们一起期待ODP带来的更多精彩内容,深入了解分布式数据库的奥秘,实现个人成长和技能提升。

作者简介:致新,OceanBase高级研发工程师。

ODP,全称为OceanBaseDatabaseProxy,它是OceanBase数据库专用的服务代理。可能暂时你对它还没有感知,但当你涉及到一些高级特性和OceanBase数据库的分布式架构问题时,ODP的原理就是一个避不开的话题。如果你想了解OceanBase的整体架构,如果你想进阶成为高级DBA,那么ODP专题就非常适合你。

ODP专题主要有九篇内容:

现在,我们将开启ODP的专题系列,深入浅出,一起学习ODP,从全链路视角看分布式系统问题,掌握连接管理、数据路由、高可能容灾等重要知识点,了解SQL从executeQUery接口调用到返回结果的冒险经历,让你更好地驾驭分布式数据库!

今天我们将分享的是第一篇内容,ODP功能模块及特性详解。

OceanBaseDatabaseProxy(简称ODP)是OceanBase数据库专用的服务代理。用户的SQL会先发送给ODP节点,由ODP选择合适的ObServer(OceanBase数据库进程名)进行转发,并将结果返回给用户。首先,我们从整体架构看一下ODP的作用。

图中APP是业务程序,APP前面有三台ObProxy(ODP的进程名叫做Obproxy)。在实际部署中,APP和ObProxy之间一般会有负载均衡器,如F5将请求分散到多台ObProxy上面,ObProxy的后面就是ObServer,图中有6台ObServer。ODP知道ObServer中的数据分布信息,可以将用户SQL高效转发到数据所在机器,这样执行效率比转发到没数据的节点执行效率更高。如表t1数据在图中P1内,表t2数据在P2内,表t3数据在P3内,红色表示主副本,蓝色表示备副本,对于insertintot1语句,ODP可以将SQL转发到IDC2中含有P1主副本的ObServer机器上。

为什么需要发送到数据所在的节点?主要原因是性能影响比较大,原理类似于计算机系统的多级缓存机制,如CPU从寄存器拿数据的执行效率要远远高于从内存拿数据的执行效率。实际生产环境中,除了考虑数据分布,ODP还会考虑机器的地理位置分布,避免请求跨机房、跨城等情况出现。路由策略很多,后续有专门章节介绍。

在部署好OceanBase数据库集群(包含部署ODP)后,就可以使用数据库服务了。我们以JDBC访问数据库举例:

在建立连接时,需要先初始化相关的连接信息,上面URL包含了数据库的IP、PORT、访问的库名test、连接属性等信息。使用ODP访问和直接连接ObServer访问区别就是IP和PORT不同,其它信息不需要任何改动。后续使用时,ODP对用户来说是完全透明的。

ODP让用户像使用单机一样使用OceanBase数据库:

从发展历史去看,我们可以更好的理解为什么ODP是现在的样子,可能是方案设计,可能是业务需求,还有可能是历史兼容性包袱等。因此和大家一起聊聊ODP的过去和现在。

ODP产品从2014年开始设计研发,至今已经有七年多的历史,在蚂蚁内部、专有云场景、公有云场景都有广泛的使用,在访问链路上承担了重要的作用。发展历史如下:

总结一下:

对于中间件组件,一般有SDK形态和代理两种形态,ODP也是一样的,它们各有优缺点,总结如下:

目前ODP产品是以代理形态提供,后续会提供SDK形态。对于ODP开发人员来说,支持SDK和代理模式的主要挑战是如何将代码复用,解决方案是将基础能力包装成库接口,并通过进程通信技术让业务代码和ODP代码相互调用。

对一些术语做些解释,方便后面阅读

介绍ODP功能模块,让大家整体了解ODP的实现和能做的事情。以下图为例,将ODP的功能分成了三层。

基础层实现网络通信、线程管理等基础框架和基础工具库,对上层提供支持。

网络通信库支持tcp协议、SSL协议和RDMA通信,并封装易用接口供上层使用;异步事件框架完成线程创建、管理和任务的分发调度;基础库对一些基本能力做封装,为写代码提供好用的接口。

业务层是最复杂的,提供数据库业务相关一些基础能力:

产品化在不断发展中,ODP将一些能力产品化对外提供服务。产品形态主要是代理模式和SDK模式。sharding是ODP在蚂蚁的单元化架构下支持的分库分表能力。我们也在挖掘更多有用功能,满足业务需求。

对功能模块有了认识后,我们从SQL请求的整个流程去看,ODP都做了哪些事情。

请求流程如下:

上面流程没有介绍异常情况下的容灾管理,可以参考上图。除了请求主流程以外,ODP还有很多后台任务,这些任务也非常的重要,本系列后续章节会介绍。

从5.1部分我们了解到了ODP的功能模块,从5.2部分我们了解到执行一条SQL时ODP的主要工作,总结一下,ODP的主要关键特性如下:

通过前面的介绍,相信大家对ODP有了一定的理解。ODP未来是怎么规划的?出发点还是满足客户的诉求,打造好的产品。

ODP从蚂蚁走出来,服务更多客户,某些场景下也出现了“水土不服”的现象。在一次次的版本迭代中,我们也一直让产品变得更加好用。从一个个需求和问题中去提炼总结,我们认为未来主要方向包括:

未来充满了机遇和挑战,ODP会和OceanBase数据库内核一起不断进步,为大家提供好的产品、文档和服务。

因为ODP大部分时间对用户来说,存在感不强,所以大家不太了解。但涉及到一些高级特性和OceanBase数据库的分布式问题时,ODP的原理就是一个避不开的话题。后续,我们会提供更多有趣的内容,比如数据路由、全链路问题排查、连接稳定性、分布式系统高可用等。这些内容也会帮助大家更好理解OceanBase数据库,希望通过系列文章,大家能学到知识,深入浅出了解ODP,获得成长!

以上内容由58汽车提供。如有任何买车、用车、养车、玩车相关问题,欢迎在下方表单填写您的信息,我们将第一时间与您联系,为您提供快捷、实用、全面的解决方案。

原创文章,作者:58汽车,如若转载,请注明出处:https://car.58.com/7070950/

发表评论

登录后才能评论