写点什么

开源实践 | 六棱镜基于 OceanBase 选型探索与实践

  • 2022 年 1 月 04 日
  • 本文字数:3862 字

    阅读完需:约 13 分钟

开源实践 | 六棱镜基于 OceanBase 选型探索与实践

本文将介绍六棱镜关于企业分布式数据库的选型实践,希望帮助有相似应用场景的企业用户高效的进行数据库选型。

作者:白云龙

六棱镜运维负责人,负责业务平台、政务云及项目环境部署维护相关技术支撑工作、多年系统运维架构及数据库维护经验、专注开源领域。

六棱镜(杭州)科技有限公司是一家聚焦大科创领域多维数据融合应用与 AI 算法研发的数字科技公司,公司关联融合了产业、企业、知识产权、投资并购、科技文献、人才等多维数据资源,打造了大科创数字底座 TIbse,自主开发了全球产业科技情报分析系统(PatNavi)、AI 知识产权官(AIPO)及智树(DITree),面向产业分析、企业研发、政府招商、投资尽调及知识产权资产经营管理等场景需求提供 saas 与定制开发服务。

遇到了哪些问题及挑战

随着当前数据量的不断增长,数据在经过大数据集群清洗处理后写入在 MySQL 环境时,写入时间随着数据量增大,并发增多,耗时越来越长,频繁出现超时、任务中断等性能瓶颈,同时数据出仓入仓转存也变得缓慢、效率低下等问题。

1)数据量增长快,单机 MySQL 性能低下的同时 DDL 异常缓慢

对于知识产权型公司的六棱镜来说,数据是至关重要的核心资产且具有一定的特殊性,目前业务数据总量已接近 30T,数据处理还要经过大数据集群,单机 MySQL 性能低下,无法很好地支持业务发展

2)业务特殊性,数据不适合拆分提升性能

六棱镜的业务及数据特殊性决定了很多数据不适合拆分,主要表现在:业务数据在大数据平台不方便进行分库分表处理,测试发现在经过业务改造和适配之后,尝试通过分库分表模式通过 MyCAT 在后端提供多个数据存储节点,但测试结果并不理想,速度虽然稍有提升,但效果并不明显,且需要维护多个节点,极大增加运维复杂度,同时分表后项目不能使用表空间还原的方式。基于以上考虑,放弃使用分库分表方案

3)资源弹性伸缩能力差

正常情况下各项目需要很小的资源即可运行,但项目数据的周更新及月更新需要大量写入,导致默认资源不足,需临时扩容 CPU 和内存容量提供合适的计算资源。同时在数据批量更新结束后为避免资源浪费,需通过降配操作把资源提供给其他需要的服务进行动态扩容。但降配需关机调整实例(CPU、内存、空间),这将会大大增加运维工作复杂度,服务器频繁重启的同时也导致了服务可用性的降低。

4)多项目多 MySQL 实例,规模与日俱增,运维复杂度和故障处理风险增加

此外,特殊业务对应的特殊数据库需要单独维护,每个实例单独维护成本也偏高。基于上述问题,需要探索新的技术方案来解决业务遇到的痛点问题,经过多次数据库产品调研和测试,最终选择原生分布式数据库 OceanBase 社区版解决方案。

为什么选择 OceanBase

在进行产品选型时,我们认为一个好的解决方案需满足五点:可扩展、高性能、高可用、多租户以及兼容性。

高性能及高可用是我们选择数据库产品的关键因素,可扩展对我们来说也至关重要,要求数据库资源不足时,通过扩展节点把资源池强化。另外,可拓展还意味着资源的可扩展, CPU 及内存资源可按需动态升降配且无需开机关机操作。兼容性对六棱镜来说,也是重要的考虑因素,要求不同类型数据库之间的传输、数据的出入仓都保持兼容 OceanBase 社区版完全满足我们的要求,体现在:

01 高性能

在实际测试过程中,同等条件下,相比 MySQL 环境,OceanBase 数据删除速度比 MySQL 快了 3 倍,同时在业务进行 DDL 建表时,OceanBase 速度提升将近 300 倍

02 高可用

OceanBase 三副本部署方式,在删掉或者人为干预下一个节点异常时,数据可以正常访问,单服务器故障能够自愈,整个过程不需要人工干预,这确实是一个亮点。

03 MySQL 高度兼容

OceanBase 与 MySQL 高度兼容,那么在进行 MySQL 业务和数据迁移时,可以平滑迁移至 OceanBase,对应用和业务的侵入性降至最低。六棱镜内部有 MySQL 5.6、MySQL 5.7、MySQL 8 等版本,经测试所有业务数据可直接用到 OceanBase 上,降低了迁移成本

04 高压缩比

根据公司的实际情况做了测试及对比分析,MySQL 数据迁移至 OceanBase 后,磁盘空间利用率可节省 70%左右

05 多租户

多租户能力是我们迫切需要的功能。六棱镜现有业务涉及到众多政务云项目,在使用 OceanBase 前,每一个业务的每一个项目都需要有 MySQL 实例单独维护,资源单独分配,操作和维护都比较麻烦。OceanBase 多租户的概念,类似于我们的容器可以部署在同一台服务器,但资源是完全相互隔离且互不影响彼此业务,集群租户之间完全隔离,运维非常方便

06 实例隔离及扩容集群

这些也很方便去调配,OceanBase 可以基于资源池为租户按需分配资源。在使用过程中资源可随时动态调配,单节点维护、数据迁移、故障重建不影响 OceanBase 持续提供服务,真正实现全程高可用

经过大量综合测试,我们惊喜地发现,OceanBase 完全满足公司现有业务的全部需求。

OceanBase 部署及平滑迁移

OceanBase 兼容 MySQL 周边生态,因此 MySQL 周边的很多工具可以访问 OceanBase 环境,包括 Navicat、DBeaver 以及 MySQL 客户端,OceanBase 自带的 OBClient。部署也十分便捷,OceanBase 集群支持一键部署,下图为集群部署完毕后的状态查看:


图 1:OceanBase 集群拓扑

当前六棱镜部署 OceanBase 架构为三个 observer 节点+一个代理节点。每个节点配置为 22C/256G,官方推荐使用 SSD 作为存储设备。官方建议生产环境至少部署两个代理节点。

众所周知,数据库的平滑迁移一直以来都是非常大的挑战。当前线上环境以 MySQL 为主,因此需要一套数据迁移方案实现数据从 MySQL 到 OceanBase 的平滑迁移。经过技术团队盘点,MySQL 数据库的备份迁移目前业内主要有三种方式:

  • 整库复制,适合全量迁移的数据。

  • 表空间还原,推荐使用还原方式,备份还原等同于复制粘贴。

  • Myload,速度次于表空间还原,推荐用于本地数据还原云端 RDS 数据库。

我们使用 DataX 完成全量数据迁移至 OceanBase 集群,相关参考链接如下:

 📌 DataX 参考链接:

https://github.com/alibaba/DataX/blob/master/introduction.md

📌 DataX WEB 参考链接:

https://github.com/WeiYe-Jing/datax-web

我们现有数据约 2T,涉及 1700 多张表,目前已经全部迁移,迁移速度超出预期。

图 2:DATAX JSON 示例配制

上图展示的是 DATAX JSON 示例配制,该文件也很简单,只要将数据源、目标数据源,改一些配制即可使用。

图 3:迁移效果展示

从本地到云上的迁移展示详见上图,该数据总共为 8 亿逾条,采用的带宽为 200M,迁移时间从 13:43 开始到 15:21 结束,即迁移时间仅花费了 1 小时 40 分左右,速度相当可观。

图 4:Tsar 采集工具

上图是 Tsar 淘宝自己开发的一个采集工具,主要用来收集服务器的系统信息(如 CPU,IO,Mem,TCP 等),以及应用数据(如 squid haproxy nginx 等),非常好用,分享给大家。该工具主要功能在于实时数据呈现,如果服务器当前有任何性能上的问题需要排查可使用此工具。 

上线后带来了什么价值和收益

经过一系列测试验证,OceanBase 在线上稳定运行两个月,相比 MySQL 方案,OceanBase 带来收益巨大,有以下 5 点:

1)性能非常可观

在处理各种数据的时间上,MySQL 比 OceanBase 时间长很多,详见下图“任务运行时长对比分析”。

图 5:任务运行时长对比分析

当删除 1 万条时,OceanBase 的速度非常可观,但 MySQL 处理速度业务无法接受,即使处理起来速度也非常慢,耗时很长。由上图可知,从总用时来看,提升也很明显,原先 MySQL 需要花费 3184.813 秒,现在只用了 1003.633 秒,效率是原来的近三倍。

尤其值得称赞的是,我们在处理创建表操作时,发现速度非常惊人,原先我们用 MySQL 耗时长达 2206.197 秒,而用了 OceanBase 缩小到了 7.112 秒,速度提升将近 300 倍。处理包含从创建到筛选的过程,详见代码:

create table 专利外观设计 3333   select    /*+ parallel(16) */  * from ipi_patent where publish_type='S' limit 50000

如果有和我们一样正在用 MySQL,也遇到了各种问题的公司可以来试试。

2)存储空间使用率大幅度下降

OceanBase 官方结论为节省 70%的磁盘空间(仅作参考),我们实际测试发现,原先使用 MySQL 需要 3.8T 的空间,使用 OceanBase 只需 822G,节省空间超过 70%,使用成本大大降低。

图 6:磁盘空间使用

3)运维更加便捷

多个项目数据放在一套 OceanBase 环境运维,通过不同租户管理不同的业务数据,保证了业务的资源隔离和数据安全,同时一套环境承担多套业务访问,方便管理。目前两套 MySQL 环境已经迁移至 OceanBase 环境,持续迁移中。

4)资源利用率提高

OceanBase 高扩展性使得集群随时可以进行扩缩容,同时通过租实例规格随时调整资源配置,资源分配灵活,使得资源利用率得到了很大的提升。

5)高可用性得到保障

OceanBase 的物理备份+逻辑备份,可以确保数据安全万无一失。同时多副本模式保障在满足多数节点可用时 down 机数据不丢失、不影响使用,在线修或替换即可。

六棱镜在数据库选型时调研了许多产品,耗费了大量人力和物力,也踩了不少坑,遇到很多操作类问题,在此期间,OceanBase 社区工程师第一时间响应并帮助我们解决遇到的各种技术问题。

经过多方对比,我们最终选择了最匹配我们业务需求的 OceanBase 社区版,在此我们也非常感谢 OceanBase 社区和工程师提供的专业技术支持!未来六棱镜也会深度参与社区建设,输出更多优秀的实践案例,帮助社区用户探索更多的业务场景。

往期推荐:

【新年互动搞起!】元旦快乐!这里是2022年的 OceanBase

首次!中西方数据库大咖“时空对话”,为中国分布式数据库开发者大会打call

获奖公布!OceanBase 第一届技术征文大赛圆满收官!

全国首个!OceanBase 助力江西省养老保险全国统筹信息系统上线

参与更多技术交流,请至 OceanBase 社区版【问答区】

发布于: 3 小时前
用户头像

企业级原生分布式数据库 2020.05.06 加入

github:https://github.com/oceanbase/oceanbase 欢迎大家

评论

发布
暂无评论
开源实践 | 六棱镜基于 OceanBase 选型探索与实践