广州哪里做网站/宁波seo公司哪家好
数字化时代,各行各业的数据量呈现爆发式增长,对于海量数据价值的挖掘和应用,正成为推动创新的主要力量,与此同时,数据计算复杂度正在提升。在此背景下,对于数据处理的基石数据库而言,正面临市场变局。集中式数据库、分库分表等传统解决方案难以面对海量数据带来的挑战,性能瓶颈、分析能力不足、成本高昂等问题逐渐凸显。分布式数据库凭借数据自动分布在多个节点,连接任何一个节点均可以对集群数据进行读写的天然优势及事务强一致等特性,将成为新一代数据管理解决方案。
本文根据 GIAC 全球互联网架构大会数据库论坛《OceanBase 社区版 4.x 核心技术解密》整理,分享嘉宾为 OceanBase 技术部技术专家郑晓锋,现负责 OceanBase 华南区技术开源布道工作。本次分享以原生分布式数据库 OceanBase 为例,从架构及技术特性到社区版及生态工具,再到版本规划及未来展望,与大家探讨数据管理解决方案。
提到分布式数据库,大家自然会想到规模化场景应用。OceanBase 也是在这样的场景下诞生的:2010 年,淘宝收藏夹业务量庞大到传统关系型数据库难以支撑,进而开始做分布式存储方案, OceanBase 0.1 版本就此诞生,大家可以理解为就是一个分布式存储的架构。当时 NoSQL 比较火,很多人因此觉得数据库是不是应该把存储层做分离,我们做了之后,发现存在一些问题, 比如在 TP 场景下对时延有要求的话,关系数据库用松耦合的设计在效率上有很大的开销。
为了解决这个问题,当迭代到 OceanBase 1.0 版本的时候,我们就改造成目前的一体化架构。从 1.0 到 2.0、3.0 包括现在 4.0 版本,其实都遵循了这个架构。OceanBase 整体架构很简单,只有一个 OBServer 节点,存储引擎、SQL 引擎、事务引擎都集成在里面。在 OceanBase 有更多的外部用户之后,我们发现用户使用的数据库通常不止一种 ,比如用户在使用 MySQL 的同时也在使用 Oracle 数据库。所以在 2.0 的版本,商业化时在多租户基础上,增加了 Oracle 兼容能力。在 3.0 版本里,我们进一步增强了兼容性和产品性能。
2021 年 6 月,OceanBase 开源了 3.1 版本,而企业版最新是 3.2 版本,所以在 3.x 版本下,如果去对比社区版和企业版,性能会有差别。到了 4.0 版本,我们现在称之为单机分布式一体化架构,社区版 MySQL 模式的内核能力跟企业版是完全一样的。
为什么我们称 4.x 的版本为单机分布式一体化架构呢?有两层含义:第一层含义是指单机分布式一体化架构既能做单机部署,又能做分布式部署;第二层含义是指在 OceanBase 集群里,即使部署分布式集群,如果租户只用了单机的资源,我们也认为该租户是单机形态。在这个过程中,单机和分布式的形态可以随意转化。
OceanBase 的灵活部署,除了单机形态与分布式形态外,还支持主备库部署。在 4.1 版本里面,OceanBase 主备库是基于 OSS 或者 NFS 归档日志传输做同步,类似 MySQL 主备库。相较于分布式数据库来说,主备库的形态还是会有 RPO≠0 的数据丢失,三副本部署可以更好地满足用户高可用和高扩展的需求。在更大规模的业务场景下,OceanBase 多租户能力帮助集群管理更轻松。举个例子,一个公司如果有上万台服务器,而 DBA 可能只有十几个,一个人如何管理上千个数据库实例,规模化运维场景下人力终有限。OceanBase 通过集群的多租户能力,可以将很多 MySQL 实例,集成到 OceanBase 集群里面,大大降低管理实例的数量。
在整个过程当中,我们看到 OceanBase 部署形态,都是适应企业业务发展的,不用为不需要的特性买单。
OceanBase 自研一体化架构兼容经典模式,实现了单机和分布式,TP 和 AP 的融合。得益于单机分布式一体化架构与原生分布式的特性,OceanBase 兼容经典模式,实现了 TP 和 AP 的融合,并通过全量数据校验真正实现了数据强一致、数据不丢失,高可用,平滑扩展无感知。
从架构层面来讲,OceanBase 使用普通服务器和数据中心网络组成的 Shared-Nothing 集群部署, 无需基于专用网络环境的 SAN 存储设备。集群原生自动管理计算资源和存储资源的分配和动态资源均衡。支持弹性水平或垂直扩缩容,读写性能可线性扩展。所有服务节点都支持 SQL 计算和数据存储,每个节点自主管理所服务的分区数据。整个集群只有一种数据库服务进程,无外部服务依赖,运维管理简单。对外提供统一的数据库服务,支持 ACID 事务和全局索引,对应用开发来说与单机无异。OceanBase 可以灵活的基于用户基础设施,支持同城三中心、两地三中心、三地五中心等多种架构。
从特性层面而言,下面分别从原生分布式、扩缩容、单机性能、HTAP、低成本、多租户介绍技术原理。
-
原生分布式。众所周知,分布式数据库最基本的能力包括高扩展性、高可用性。对于高扩展性,OceanBase 分布式协议采用 Paxos,利用 OceanBase 集群原生的能力可以很方便地做横向、纵向扩容,提升资源利用率,节省成本;高可用方面,除了我们常说的多副本强一致,OceanBase 集群内部还会做数据副本之间的一致性校验、事务提交的一致性校验、数据落盘的校验等来保证数据的高可靠。
-
扩缩容无感知。在增加 OBServer 机器后,集群会自动把旧节点的数据自动迁移到新的 OBServer 中,整个过程对应用是透明的。在蚂蚁内部,最大的归档库已经达到 PB 级别,利用多机拷贝,500M/S 的速度去迁移 TB 级别的节点只需几个小时。或许大家对此没什么感觉,那么以双十一为例,历年双十一,蚂蚁都会提前半个月在云上申请一批新的服务器,把不同用户的数据打散到更多可用区的机房里,承担双十一流量高峰。迁移过程中,先拷贝只读副本,最后再做 leader 秒级切换,等双十一高峰过后再回收资源,这就是 OceanBase 极致弹性的扩缩容能力。
-
单机性能相当于单机数据库。一般来说,分布式数据库在保证水平扩展能力时,往往会牺牲单机性能。然而,在 OLTP 业务中,单个事务的处理时延增加往往是不可接受的。这导致在许多场景下,单机数据库替换为某些分布式数据库后,即使业务性能指标不增加,也需要许多台分布式数据库节点才能支撑原有业务规模,导致成本不降反升。
OceanBase 的单机分布式一体化架构,在单机部署时,性能与单机数据库相当,甚至比某些流行的开源单机数据库的性能更好。
-
当三机三副本部署时,相同的性能同时提供比传统主备库更好的高可用能力。
-
当节点机器规格提升时,提供了线性的垂直扩展性。
-
当每个 Zone 部署多节点时,提供了线性的水平扩展性。
特别在以下三种情况,OceanBase 的查询和事务处理没有多机访问的开销:
-
当 SQL 语句只涉及单机内的分区时,数据读写无需通过网络。
-
当事务只涉及单机内的分区时,事务提交没有分布式提交协议的开销。
-
当事务只涉及单机内的分区时,基于多版本并发控制的一致性快照读取无需远程访问全局时间戳服务。
单机分布式一体化架构,让 OceanBase 数据库能够适应从个人小站点到银行核心系统和巨型电商网站等各种规模的业务,用一个数据库产品伴随客户业务的成长。
具体而言,在分布式数据库 OLTP 应用场景下,单机读写能占到 80%,跨机读写约占到 20%。我们做单机分布式一体化的目标是把原来 80% 单机事务的性能支撑好,再针对另外 20% 跨机事务做性能优化。OceanBase 3.x 版本会对数据做预分区,每个分区一个日志流,日志流个数越多,消耗的 CPU 和内存也会更多。在分布式场景下,事务的原子性、持久性会靠多条日志流来共同保障,比如分布式事务的两阶段提交、Paxos 一致性协议等,系统开销相对单机的单条日志流会增多。
而在 OceanBase 4.x 版本,我们把多条日志流合并为一条日志流,极大降低了系统负载。虽然我们做了日志流的合并,但扩缩容的时候,集群会自动把数据迁移到另一个日志流里面,做数据的负载均衡,整个迁移动作都由底层自动完成,对应用透明。
除了我刚刚提到的合并日志流以外,也有一些其他方式来优化 OceanBase 的单机性能,比如说减少系统租户的开销,提供单机内并行的能力,内存中按需来加载元数据等等。我们对比了 OceanBase 和 MySQL 的单机性能,可以看到在 32C 的规格下,OceanBase 表现明显优于 MySQL。
另一个测试体现 OceanBase 良好的垂直扩展性,可以看到在 CPU 资源翻倍的情况下,OceanBase 单机性能 Sysbench 压测 的 QPS 基本上也是成倍增长的,能充分利用上添加的硬件资源。
-
HTAP,TP 与 AP 融合。企业级应用的业务场景通常可以分为两个类别:联机交易和实时分析,我们通常称为 OLTP 和 OLAP 的业务应用。大型企业往往会选择多款数据库产品分别支持 OLTP 和 OLAP 类的应用场景。这种组合式的解决方案需要数据在不同系统间进行流转,数据同步过程带来时间延迟和数据不一致的风险,多个不同的系统产生冗余数据,推高成本开销,往往会限制企业在激烈的市场竞争中快速调整业务。
针对轻量级实时分析的场景,我们希望 OceanBase 能同时支撑 TP 和 AP 业务需求。OceanBase 集群通常有三个副本,默认读写强一致性在主副本中操作,TP、AP 的需求实际上都在一份数据里完成。另外,在单机分布式一体化架构下,用户也可以做些灵活的设置以应对实际业务场景,比如读写分离配置。有个用户的实际案例,从 MySQL 分库分表的方案迁移到 OceanBase 集群,在 TCO(数据库总拥有成本)降低 35% 的情况下,AP 能力反而提升了 30%,这足以证明目前 OceanBase HTAP 的能力还是可以的。
-
低成本,高压缩率。数据压缩是降低海量数据存储空间占用的关键手段。OceanBase 高压缩比的分布式存储引擎, 摒弃了传统数据库的定长数据块存储, 采用基于 LSM-Tree 的存储架构和自适应压缩技术,创造性地解决了传统数据库无法平衡“性能”和“压缩比”的难题,并基于数据日志分离方法的分布式存储技术,进一步降低存储成本,实现了高性能和低存储成本。基于 LSM-Tree 的存储引擎,利用编码压缩极大降低存储成本。
OceanBase 如何做到低成本?从节省机器资源与存储资源开始。基于以往的用户实践经验来看,在规模化场景下,比如从 MySQL 迁移到 OceanBase 中,同等规格的机器数据能减少;另外,基于 OceanBase 的存储引擎架构,底层使用行列混存方式组织数据,从 MySQL 迁移到 OceanBase 4.x 版本单副本的存储数据量对比一般在 1 : 5,当然,根据实际用户数据的特征,这个存储的比例会有所增减。
-
多租户,资源隔离。数据库池化管理是云时代实现资源精细化管理的重要手段。OceanBase天然是多租户架构,在一个集群中同时运行多个数据库租户,每个租户可以视为一个独立的数据库服务,租户间数据和资源互相隔离,并且在集群内统一调度。支持在创建租户时选择不同的兼容模式,每个租户可单独配置数据副本数量、副本类型、存储位置及计算资源等。数据库集群整合平台化,多租户整合应用数据库,可在线扩展,在线调整配置,更好地帮助业务实现运维工作自动化。
两个月前,我们发布了OceanBase 4.1 的版本,这个版本提供了很多新的能力。
-
第一个是功能性的需求,新增旁路导入功能,提升我们大数据批量的导入速度;开放了 OBKV,多模数据类型,如 GIS,以及 MySQL 8.0 兼容的强化。
-
第二个是稳定性,主要是主备库的功能。4.1 的主备库是基于 OSS、NFS 来做的,未来我们也会做基于网络传输的主备库模式。
-
第三个是易用性,4.1 我们集成了白屏化安装的工具,可以去部署轻量级的 OCP express,包括一键安装 OceanBase 集群。
-
第四个是性能提升,4.1 版本相对于 4.0 版本,TP 性能在4C场景下提升 40%,AP 性能提升 15%。
此外,OceanBase 会与更多生态上下游伙伴合作,为用户从数据库替换前、迁移中和使用后的不同阶段提供全方位产品化提供便捷服务。在 OceanBase 社区生态工具中,大家使用最多的主要是 ODC(开发者工具)、OMS(数据迁移工具)、OCP(运维管理工具)。我们还做了轻量级的社区版 OCP express,在今年年初已经开源,开放了 API 接口。部署服务后,可以通过开放的 API 接口对接已经在使用的数据管理平台,提高运维效率,助力业务稳定增长。
OceanBase 社区版开源以后,4.x 版本 MySQL 模式社区版跟企业版能力完全拉齐。虽然 4.x 版本相对于 3.x 版本性能提升非常明显,但是在内核方面我们还是希望持续去优化。TP 场景下,我们会继续向小规格发力,希望给用户的体感就是,用单机的 OceanBase 实例比 MySQL 单机明显跑得更快,希望 OceanBase 能够为用户从小规格到大集群保驾护航。AP 的场景下,我们也会持续去补足功能性的需求,比如冷热分离、只读外表的能力,适应用户更多业务场景。
希望 OceanBase 数据库能够助力更多企业突破业务瓶颈,也希望越来越多的用户可以参与到OceanBase 社区共建中来,与 OceanBase 一起成长。
相关文章:

OceanBase社区版4.x核心技术解密
数字化时代,各行各业的数据量呈现爆发式增长,对于海量数据价值的挖掘和应用,正成为推动创新的主要力量,与此同时,数据计算复杂度正在提升。在此背景下,对于数据处理的基石数据库而言,正面临市场…...

快速安装k8s
RKE安装方式 官方文章资源地址 https://rke.docs.rancher.com/installation rke工具下载地址(arm,amd,windows都有) https://github.com/rancher/rke/releases x86的用amd64下载rke工具 https://github.com/rancher/rke/releases/download/v1.4.8/rke_li…...

[FFmpeg] 常用ffmpeg命令
去水印 ffmpeg -i water.jpeg -strict -2 -vf delogox300:y250:w56:h18:show0 no_water.jpeg 打时间戳 ffmpeg -i perf_60Hz_Raw.mp4 -vf "drawtextfontsize160:fontcolorred:text%{pts\:hms}" -c:v libx264 -an -f mp4 perf_output.mp4 -y ffmpeg -i perf_8k.mp4 -v…...

代码随想录训练营第五十七天|647. 回文子串、516.最长回文子序列
647. 回文子串 题目链接/文章讲解/视频讲解:代码随想录 1.代码展示 //647.回文子串 int countSubstrings(string s) {//step1 构建dp数组,明确dp数组的含义,dp[i][j]的含义是在下标为i和j区间内的字串是否为回文串vector<vector<bool&…...

对线程池设置做压测
线程池代码 Configuration public class ThreadPoolConfig {// 核心线程池大小private int corePoolSize 24;// 最大可创建的线程数private int maxPoolSize 25;// 队列最大长度private int queueCapacity 100;// 线程池维护线程所允许的空闲时间private int keepAliveSeco…...

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94
【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94 【1】下载并配置 depot_tools 下载 depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git编辑 ~/.bashrc 将 depot_tools 添加到路径中 vim ~/.bashrc export…...

【力扣周赛】第 357 场周赛(⭐反悔贪心)
文章目录 竞赛链接Q1:6925. 故障键盘解法1——直接模拟解法2——双端队列 Q2:6953. 判断是否能拆分数组(贪心)Q3:2812. 找出最安全路径⭐解法1——多源BFS瓶颈路模型?解法2——多源BFS 倒序枚举答案 并查…...

css重置
css 重置 CSS 重置的主要目标是确保浏览器之间的一致性,并撤消所有默认样式,创建一个空白板。 如今,主流浏览器都实现了css规范,在布局或间距方面没有太大差异。但是通过自定义 CSS 重置,也可以改善用户体验和提高开…...

tcpdump相关
Linux内核角度分析tcpdump原理(一)Linux内核角度分析tcpdump原理(二)...

MFC新建内部消息
提示:记录一下MFC新建内部消息的成功过程 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 先说一下基本情况,因为要在mapview上增加一个显示加载时间的功能。然后发现是要等加载完再显示时间,显示在主…...

linux查找目录
要在Linux中查找目录,可以使用find命令。下面是查询目录的几个示例: 1,查找当前目录下所有子目录: find . -type d 2,在指定路径下查找目录: find /path/to/directory -type d 3,查找以特定名称开头的目录: find . -t…...

机器学习:可解释学习
文章目录 可解释学习为什么需要可解释机器学习可解释还是强模型可解释学习的目标可解释机器学习Local ExplanationGlobal Explanation 可解释学习 神马汉斯,只有在有人看的时候能够答对。 为什么需要可解释机器学习 贷款,医疗需要给出理由,让…...

UE5- c++ websocket里实现调用player里的方法
# UGameInstance里直接调用 获取到引用了,就可以自然的调用。忽略 # UGameInstance里间接调用,通过代理调用 前置已经添加了websocket,具体步骤参考,链接在UWebSocketGameInstance.h里新增代理,并在链接成功后进行绑定。 #pragma…...

线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)
目录 0 问题引出:什么是秩? 概念备注: 1 先厘清:什么是维数? 1.1 真实世界的维度数 1.2 向量空间的维数 1.2.1 向量空间,就是一组最大线性无关的向量组/基张成的空间 1.3 向量α的维数 1.3.1 向量的…...

Centos 6.5 升级到Centos7指导手册
一、背景 某业务系统因建设较早,使用的OS比较过时,还是centos6.5的系统,因国产化需要,需将该系统升级到BClinux 8.6,但官方显示不支持centos 6.x升级到8,需先将centos6.5升级到centos7的最新版,…...

详解python中的映射类型---字典
概述 映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对(key,value)是一种二元关系,源于属性和值的映射…...

gdal求矢量图形的形心
gdal求矢量图形的形心 #include "gdal_priv.h" #include "ogrsf_frmts.h"int main() {OGRRegisterAll();OGRPolygon* square_1 new OGRPolygon();OGRLinearRing* ring_1 new OGRLinearRing();// 添加 square_1 的点ring_1->addPoint(0, 0);ring_1-&g…...

<深度学习基础> Batch Normalization
Batch Normalization批归一化 BN优点 减少了人为选择参数。在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则项约束参数;减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训…...

Ubuntu yolov5 环境配置
查看Ubuntu版本 $ cat /proc/version Linux version 5.4.0-150-generic (builddbos03-amd64-012) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023虚拟机磁盘扩容 因为在环境搭建过程中遇到了磁盘空间不足的问题&a…...

【自执行闭包JS逆向】某网站登录MD5加密分析
文章目录 一、写在前面二、抓包分析三、加密函数分析 一、写在前面 最近工作比较忙,不过还是在督促自己利用有限的时间学习更新一些技术文章。互联网这个行业大家目前也都知道是非常内卷的,所有大家在工作之余养成良好的自主学习习惯是非常好的ÿ…...

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明
Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt :正向提示词 &am…...

【Linux】- 一文秒懂shell编程
shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…...

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决
CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决 虚拟机配置多个网络地址,结果同时只能有一个ip是通的, 原因:Linux默认开启了反向路由检查导致的,比如说外面访问eth0的网卡,而网关在eth1上,又或者从…...

关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
具体 Vue 代码演示: test.vue 文件演示: <template> <!-- 方法一 --> <div>{{ test.data 0 ? 男 : 女}}</div><!-- 方法二 --> <div>{{ test.data 0 ? 男 : }}{{ test.data 1 ? 女 : }}{{ test.d…...

mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器
注意 mac 自带 openssl 所以没必要像 windows 一样先安装 openssl,直接生成即可 生成 ssl/自签名 证书 生成 key # 生成rsa私钥,des3算法,server_ssl.key是秘钥文件名 1024位强度 openssl genrsa -des3 -out server_ssl.key 1024让输入两…...

Unix System V BSD POSIX 究竟是什么?
学习Linux系统,很多同学对这些单词概念很模糊、一脸懵逼! 黄老师觉得,了解了历史,才会真正明白这些单词的含义,坐稳、黄老师发车了!!! 首先介绍一下什么是Unix? UNIX(非复用信息和计算机服务,英语:Uniplexed Information and Computing Service,UnICS)取“UNI…...

数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
文章目录 一、目标检测1.1 labelImg1.2 介绍1.3 安装1.4 使用1.5 转换1.6 验证 二、图像分割2.1 labelme2.2 介绍2.3 安装2.4 使用2.5 转换2.6 验证 一、目标检测 1.1 labelImg 1.2 介绍 labelImg是一个开源的图像标注工具,用于创建图像标注数据集。它提供了一个…...

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}
红黑树 一、红黑树的概念 红黑树(Red Black Tree) 是一种自平衡二叉查找树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有…...

获取对象占用内存
添加依赖 <dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version> </dependency>添加vm启动参数 --add-opens java.base/java.langALL-UNNAMED --add-opens java.ba…...

mysql UUID 作为主键的问题
UUID 在MySQL中,可以使用UUID()函数来生成一个新的UUID值。该函数的返回值是一个字符串类型,表示一个32位的十六进制数字,其中包含4个连字符“-”,例如:“6ccd780c-baba-1026-9564-0040f4311e29”。 varchar(32) 32*4…...