临时工说: 云原生数据库别整新名词,bypass ,不就是旁路吗

news2024/11/23 6:55:33

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共1300人左右 1 + 2 + 3 + 4) 3群即将突破 400 会关闭自由申请,新人会进4群

当越来越活明白的时候,人性的理解要深刻,没有人应该对你好,他不恶毒的对待你,已经是善良了。

上次的陈老师在对PolarDB 的分享中,提到一个新名词,bypass,通过bypass 来提高整体的云原生数据库的性能。这在传统的数据库的技术中我未曾听过,当然上次的东西,最近比较懒,没有整理,后续我会把相关的录音转换成文字,把PolarDB到底打败了谁,之快问快答的东西整理出来。

这次先把kerne bypass 的概念搞搞清楚,这里需要抛弃传统数据库使用物理机的思维。云上的数据库产品,面对的环境要比线下的数据库的环境要复杂,面对的主机的物理形式也有不同,基于这些不同 kernel-bypass 内核旁路的技术出现了,主要解决了是超大并发下内核态与用户态之间的性能问题,这项技术的特点是不使用LINUX内核访问内存,而通过绕过系统的方式来,从用户的空间直接访问控制内存的设备,这项技术最大的目的就是高性能,低延迟。

实际上在阅读了一些相关的资料后,产生问题的核心在LINUX 本身的内核无法承受数据流量问题,而kernel bypass就是要解决这个问题。这里解决这个问题的主要解决方案如下:

1  DPDK

2  NETMAP

3  PF_RING

4  RACKET_MMAP

其中解决问题的核心是系统内核的数据传输中会面临中断处理,内存拷贝,上下文切换,局部性失效,内存的数据交互与使用等问题,一般CPU都有3级缓存,在系统运行中如果数据在处理中能在1 2 级别的缓存中命中,效率会较高,而如果无法命中,则就需要等待周期,1级缓存等待 4个周期,2级缓存等待12个周期,3级缓存等待30个周期 到了内存这个级别就是300个周期了。

那么什么是周期,CPU的周期指的是计算机处理指令所需要的时间单位,每个指令的执行都需要经过电子信号的传输,寄存器的操作,算数运算等步骤才能完成。这里以3.0HZ的CPU,一个周期约为0.33纳秒。所以数据切换就需要等待的周期。

而kernel-bypass要做的就是,控制层和数据层进行分离,将数据包的处理,内存的管理,处理器的调度等赚到用户的空间来操作,内核仅仅处理控制指令,这样就没有上面提到的一堆的切换问题。同时我们经常在国产数据库和国产硬件产品中的绑核,也是基于这个问题采用非Bypass kernel的思路,这是将线程和CPU的核心进行绑定,减少线程切换和调度的性能消耗。

94d350d5590662049495ae96ce4bf49f.png

这里我们以DPDK技术作为一个学习点,了解kernel bypass的实现方式

1e0e82ab1687c5cd6f97283234c38979.png

这项技术主要做的有如下几个部分

用户空间数据包处理(内核绕过)。 

避免上下文切换开销。

轮询模式驱动程序(PMD)。 

避免中断处理开销。

保持核心繁忙。

内存使用优化。

轻量级mbufs。

使用巨页、缓存对齐等的内存池。

无锁环形缓冲区。

05e0904e04aa1f950b270393ccb06546.png

DPDK 本身也支持除X86 体系以外的 ARM, PowerPC 等,这里的UIO机制本身是在 UIO中可以通过read 感知中断,通过mmap实现和网卡的通讯,DPDK的UIO驱动屏蔽了硬件发出中断,在用户态中采用主动轮询的方式,这样的方式称为 PMD poll mode driver ,由于去除了硬中断,DPDK可以在用户态做收发包的处理,而不需要进行拷贝,没有系统调用,减少上下文的切换,最终避免了缓存没有命中后的CPU的周期等待。

所以kernel bypass 的功能在云环境是有必要的,解决了高数据量并发时的CPU 消耗的问题,同时也必须说明基于这项技术,也需要CPU 来管理,所以CPU的核心数不要太少。

基于这项技术对于数据库DBA 是一个了解就好的情况,对于这项技术的分支DPDK 中的详细知识可以访问,如下网站进行更深入的学习和了解。

https://doc.dpdk.org/guides/linux_gsg/

35a5fd2c091bdc05967569a244889ac7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有史以来最香的日志收集平台是怎样练成的

作者 观测云 系统开发工程师 李国壮 前言 日志采集(logging)是观测云 DataKit 重要的一项,它将主动采集或被动接收的日志数据加以处理,最终上传到观测云中心。 日志采集的执行过程可大致分为三段,分别是“定位日志”…

听GPT 讲Istio源代码--pilot

File: istio/operator/pkg/translate/translate.go 在Istio项目中,istio/operator/pkg/translate/translate.go文件的作用是处理Istio Operator的配置信息和Kubernetes的资源对象之间的翻译和转换。 首先,scope和componentToAutoScaleEnabledPath是用于记…

趣谈网络协议_1

趣谈网络协议_1 第1讲 | 为什么要学习网络协议?第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?动态主机配置协议(DHCP) 第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?第…

WPF 如何让xmal的属性换行显示 格式化

WPF 如何让UI的xmal 按照下面的格式化显示 首先格式化显示在VS中的快捷键是 Ctrl KD 然后需要配置,工具 选项 -文本编辑器 -xmal -格式化-间距 更改成如下就可以了

分布式锁的三种实现方式!

分布式锁是一种用于保证分布式系统中多个进程或线程同步访问共享资源的技术。同时它又是面试中的常见问题,所以我们本文就重点来看分布式锁的具体实现(含实现代码)。 在分布式系统中,由于各个节点之间的网络通信延迟、故障等原因…

基于java求长方形的周长和面积详细方法

一、方法 要使用Java求长方形的周长和面积,可以通过定义长方形的长度和宽度,然后使用相应的公式进行计算。 首先,定义长方形的长度和宽度: double length 10.0; double width 5.0;然后,使用以下公式计算长方形的周…

RK3588 添加I2C模拟芯片CH423

一.简介 有时候会遇到IO不够用的情况,例如说驱动LED灯,那么有没有什么便宜的,容易买到的芯片?我这次就考虑使用WCH的CH423S,这是一个比较新的IO扩展芯片。 二.硬件原理图 使用gpio来模拟IIC,飞线处理&…

2020-2023中国高等级自动驾驶产业发展趋势研究-概念界定

1.1 概念界定 自动驾驶发展过程中,中国出现了诸多专注于研发L3级以上自动驾驶的公司,其在业界地位也越来越重要。本报告围绕“高等级自动驾驶” 展开,并聚焦于该技术2020-2023年在中国市场的变化趋势进行研究。 1.1.1 什么是自动驾驶 自动驾驶…

发现matplotlib的一个问题

今天在做需求的时候发现一个问题,就是当传一个‘o’时,调用plt.plot画图会自动成为散点图,而不是折线图,代码如下: import pandas as pd import numpy as np import matplotlib.pyplot as plt ds pd.date_range(star…

直播视频处理过程

视频其实就是快速播放一连串连续的图片。 每一张图片,我们称为一帧。只要每秒钟帧的数据足够多,也即播放得足够快。比如每秒 30 帧,以人的眼睛的敏感程度,是看不出这是一张张独立的图片的,这就是我们常说的帧率&#…

JavaScript 中的 `this` 指向问题与其在加密中的应用

JS中的 this 关键字是一个非常重要的概念,它在不同情况下会指向不同的对象或值。在本文中,我们将深入探讨 JavaScript 中 this 的各种情况,并思考如何将其应用于 JS加密中的一些有趣用途。 1. 全局上下文中的 this 在全局上下文中&#xff…

cs224w_colab3_2023 And cs224w_colab4_2023学习笔记

class GNNStack(torch.nn.Module):def __init__(self, input_dim, hidden_dim, output_dim, args, embFalse):super(GNNStack, self).__init__() #这里的继承表示参见 https://blog.csdn.net/wanzew/article/details/106993425 # 继承时运行继承类别的函数 总之 __mro__的目的…

C++ 太卷,转 Java?

最近看到知乎、牛客等论坛上关于 C 很多帖子,比如: 2023年大量劝入C 2023年还建议走C方向吗? 看了一圈,基本上都是说 C 这个领域唯一共同点就是都使用 C 语言,其它几乎没有相关性。 的确是这样,比如量化交…

解决IDEA actiBPM插件之.bpmn文件中文乱码

1、修改IDEA编辑器编码为utf8,File->Settings->Editor->File Encodings,都改为UTF-8 2、在IDEA安装bin目录下,找到 idea.exe.vmoptions 和 idea64.exe.vmoptions 两个文件,打开编辑分别在文本最末端添加下面代码&#xf…

postman接口传参案例

目录 案例1: 接口A 接口B 案例2: //断言 案例1: 接口A 根据返回值需要从返回值中提取userid值,在Tests标签栏下编写脚本 //获取返回的响应值,并转化为json格式 var jsonData pm.response.json(); // 获取返回…

AIGC(生成式AI)试用 5 -- 从模糊到精确,再一步

参考 AIGC(生成式AI)试用 4 -- 从模糊到精确_Rolei_zl的博客-CSDN博客 提问信息不足时,生成式AI有的会引导提问者给出更多信息,有的会按自己的理解给出一个在某些方面正确的答案 随着提供的信息越来越多,生成式AI给…

E-kit 一体化电子工具箱

详细请见: E-kit: E-kit 一体化电子工具箱 (github.com) 在个人博客页查看本文 E-kit E-kit 一体化电子工具箱,STM32 实现,示波器 函数发生器 幅频特性仪器… 目前此项目已归档 注意:工程采用 GB2312 编码 基本功能 STM32F1…

RabbitMQ:基于DelayExchange插件实现延迟队列

因为延迟队列的需求非常多,所以RabbitMQ的官方也推出了一个插件,原生支持延迟队列效果。 这个插件就是DelayExchange插件。参考RabbitMQ的插件列表页面:Community Plugins — RabbitMQ 使用方式可以参考官网地址:Scheduling Mes…

OPC UA协议报文,基础介绍+Hello报文解析

消息主要分为:消息头和附加字段 通讯过程 协议标准第一部分进行总体介绍;协议标准第四部分有详细介绍通讯过程 流程介绍 整体流程 连接套接字》Hello》打开安全信道》创建会话》关闭安全信道》关闭套接字 订阅等事件 服务器审核行为 聚合的服务器审…

你已经应用了哪种服务注册和发现的模式呢?

前面历史文章中我们有说过关于微服务的注册和发现,并以 etcd 作为简单例子简单阐述了关于服务注册和发现的应用 那么日常工作中,你已经使用了服务注册和发现的哪些模式呢? 服务注册和发现的作用 首先,简单说明一下服务注册和发…