当前位置: 首页 > news >正文

Tair(4):Tair原理架构

一个Tair集群主要包括3个必选模块:ConfigServer、Dataserver和Client

通常情况下,一个 Tair 集群中包含2台 Configserver 及多台 DataServer。其中两台 Configserver 互为主备。通过和 Dataserver 之间的心跳检测获取集群中存活可用的 Dataserver,构建数据在集群中的分布信息(对照表)。Dataserver 负责数据的存储,并按照 Configserver 的指示完成数据的复制和迁移工作。Client 在启动的时候,从 Configserver 获取数据分布信息,根据数据分布信息,和相应的 Dataserver 进行交互,完成用户的请求。

从架构上看,Configserver 的角色类似于传统应用系统的中心节点,整个集群服务依赖于 Configserver 的正常工作。而实际上,Tair 的 Configserver 是非常轻量级的,当正在工作的 Configserver 宕机的时候,另一台会在秒级别时间内自动接管。而且,即使出现两台 ConfigServer 同时宕机的恶劣情况,只要 DataServer 没有新的变化,Tair 依然服务正常。应用在使用时只需要连接 Configserver,而不需要知道内部节点的情况。

table

​ 对照表,存放了桶和dataserver的对应关系,put数据时,会对key进行hash计算,在对桶数量取模,然后根据对照表找到相应的dataserver

0192.168.0.1
1192.168.0.2
2192.168.0.1
3192.168.0.2
4192.168.0.1
5192.168.0.2

假设新增了一个节点——192.168.10.3,当configserver发现新增的节点后,会重新构建对照表。构建依据以下两个原则:

  1. 数据在新表中均衡地分布到所有节点上。
  2. 尽可能地保持现有的对照关系。

更新之后的对照表如下所示:

0192.168.0.1
1192.168.0.2
2192.168.0.1
3192.168.0.2
4192.168.0.3
5192.168.0.3

Client

  • 提供访问 Tair 集群的API
  • 更新并缓存数据分布表
  • LocalCache,避免过热的数据访问影响 Tair 集群服务。
  • 流量控制

common

  • common 目录提供基础数据结构和组件

ConfigServer

  • 两台 Configserver 互为主备
  • 通过和 Dataserver 之间的心跳检测来获取集群中存活、可用的 Dataserver 节点信息
  • 根据获取的 Dataserver 节点信息构建数据在集群中的分布表
  • 提供数据分布表的查询服务
  • 调度 Dataserver 之间的数据迁移、复制

DataServer

  • 提供存储引擎
  • 接受 Client 发起的 put/get/remove 等操作
  • 执行数据迁移、复制
  • 访问统计

Storage

​ Tair的存储分为两种:persistence(持久化)和 cache(非持久化) ,非持久化Tair看成是分布式缓存,持久化Tair将数据序列化到磁盘,还可以配置备份数量,将一份数据放到不同的主机上,防止数据丢失。

Tair对存储做了一个抽象层,可以很方便的替换 tair 底层的存储引擎,主要有下面三种存储引擎:

mdb

​ 一个高效率的关系型缓存存储数据库,定位于 cache 缓存,类似于 memcache。采用page/slab管理内存。支持 k/v 存取、prefix 操作、expire数据过期,采用共享内存方式,重启数据不丢。阿里内部大都采用此种模式。

图中mempool是申请到的内存池,大小在配置文件dataserver.conf中指定slab_mem_size=4096,默认是4个g,mempool被划分很多slab组,每组slab下又包含了若干page,每个page下又包含了一组chunk,memcache中叫chunk在图中指定item,item是真正存放数据的地方。

rdb

定位于 cache 缓存,采用了 redis 的内存存储结构。支持 k/v, list, hash, set, sortedset 等数据结构。

ldb

​ ldb,定位于高性能存储, 多实例配置使用,充分利用IO,采用了 levelDB 作为引擎,并可选择内嵌mdb作为KV级别cache 加速,这种情况下 cache 与持久化存储的数据一致性由 tair 进行维护。支持 k/v,prefix 等数据结构。

Memtable:内存数据结构,新的数据会首先写入这里。

Log文件:写Memtable前会先写Log文件,Log通过append的方式顺序写入,Log的存在使得机器宕机导致的内存数据丢失得以恢复。

compact:压缩,LevelDB的一个重要特性就是数据的分层,由于数据的分层, 越旧的数据处在越大的层级,越新的数据在越小的层级,compaction的过程是产生SSTable的过程,在查询数据的时候, 最先读取MemTable里面的数据, 然后是L0的SSTable里面, 接着是L1, L2直到最大的层级。在分层设计中, 越往上层,数据的容量越大, 大约Ln是Ln-1层数据的10倍。 在各个层级的SSTable文件, 只有L0层的数据是有MemTable直接flush到磁盘上, 其它层的数据是经过compaction过程进行排序整理产生的。这意味着L0层以上的数据, 各个SSTable文件内的数据是有序且不会重叠的。

packets

​packets目录提供了通信协议中各种数据包的实现。基础库主要包括tbsys和tbnet,其中tbsys是主要的数据结构和文件操作的实现,包括排它锁和读写锁实现,对线程的包装,以及配置文件读写和分析等。tbnet是主要实现了单线程的网络读写数据流,采用了epoll的模式。

plugin

​tair 还内置了一个插件容器,可以支持热插拔插件。插件由 config server 配置,config server 会将插件配置同步给各个数据节点,数据节点会负责加载/卸载相应的插件。

插件分为 request 和 response 两类,可以分别在 request 和 response 时执行相应的操作,比如在 put 前检查用户的 quota 信息等。插件容器也让 tair 在功能方便具有更好的灵活性。

相关文章:

Tair(4):Tair原理架构

一个Tair集群主要包括3个必选模块:ConfigServer、Dataserver和Client 通常情况下,一个 Tair 集群中包含2台 Configserver 及多台 DataServer。其中两台 Configserver 互为主备。通过和 Dataserver 之间的心跳检测获取集群中存活可用的 Dataserver&#…...

SAP UI5 walkthrough step7 JSON Model

这个章节,帮助我们理解MVC架构中的M 我们将会在APP中新增一个输入框,并将输入的值绑定到model,然后将其作为描述,直接显示在输入框的右边 首先修改App.controllers.js webapp/controller/App.controller.js sap.ui.define([&…...

智能检测/摄像头监控系统EasyCVR无法启动进程是什么原因?如何解决?

国标GB28181智慧安防平台EasyCVR支持高清视频的接入和传输、分发,平台采用了开放式的网络结构,提供实时远程视频监控、录像回放与存储等功能。视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持…...

export命令详解

export命令详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Export命令详解:释放Linux强大的数据导出能力 在Linux世界中,export命令是…...

十几个软件测试实战项目【外卖/医药/银行/电商/金融】

项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…...

用python打印出菱形图案

你可以使用Python编写一个简单的函数来打印菱形图案。下面是一个例子,这个函数接受一个参数n,表示菱形的高度,然后打印出一个菱形图案: def print_diamond(n): # 上半部分 for i in range(n): print(" " …...

k8s 中externalTrafficPolicy应用场景和实践

在Kubernetes(K8s)中,externalTrafficPolicy 是一个用于控制服务的外部流量的策略。这个字段可以在 Service 的定义中设置,其主要作用是决定服务对外部请求的负载均衡行为。具体来说,externalTrafficPolicy 有两个可选…...

Selenium自动化测试框架(超详细)

Selenium自动化测试(基于python) 1、Selenium简介 1.1 Selenium是一款主要用于Web应用程序自动化测试的工具集合。Selenium测试直接运行在浏览器中,本质是通过驱动浏览器,模拟浏览器的操作,比如跳转、输入、点击、下…...

蚂蚁SEO实用的网络baidu蜘蛛有哪些

网络蜘蛛是一种用于从互联网上自动抓取信息的程序。它们根据给定的规则和指令,遍历网站上的页面,收集信息并将其存储在数据库中。网络蜘蛛在搜索引擎、数据挖掘、信息提取等领域有着广泛的应用。本文将介绍一种实用的网络蜘蛛,并探讨其实现原…...

滑动窗口如人生,回顾往事不复还———力扣刷题

第一题:长度最小的子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路: 第一想法肯定时暴力枚举,枚举数组任何一个元素,把他当起始位置,然后从起始位置找最短区间,使得…...

VM实现方式及其优缺点

在众多VM实现方式中,我可以说几种常见的实现方式。例如,基于栈的方式、基于寄存器的方式、基于堆的方式等。下面我将分别对这几种方式进行阐述,并讨论它们各自的优点和缺点,以及它们各自的应用场景。 基于栈的方式 基于栈的方式…...

MySQL——库,表基础操作

目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…...

文件批量管理方法:100个文件要怎样快速放在100个指定的文件夹中

处理大量文件时,经常要将多个文件放入相应的文件夹中。如果要处理的文件数量较大,例如100个文件要放入100个指定的文件夹中,那么如何快速有效地完成这个任务呢?下面看下云炫文件管理批量管理文件的方法,快速将100个文件…...

管理的五大过程和十大知识领域

PMBOK五大过程组是什么? PMBOK五大过程组是:启动过程、规划过程、执行过程、监控过程、收尾过程。 各用一句话概括项目管理知识体系五大过程组: 1、启动过程组:作用是设定项目目标,让项目团队有事可做; 2、…...

C/C++ 快乐数: 编写一个算法来判断一个数n是不是快乐数

题目: 编写一个算法来判断一个数n是不是快乐数。 快乐数的定义: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过…...

【后端】JVM 远程调试

前言 再好的代码,也还是有瑕疵的,不是代码不给力,是线上问题太牛逼太玄幻。这不刚部署就出现了问题,幸好还是测试的时候,早点发现早点解决,不给任何人带来不必要的损失,是我做人的原则,只要钱到位,任何问题都不是问题。 JVM 远程调试 不得不说 IDEA 和 宝塔配合是真…...

Android Studio中配置Flutter插件,创建小项目“hello world”

文章目录 一、下载Flutter SDK二、Android studio中安装Flutter插件三、创建Flutter小项目 一、下载Flutter SDK 打开官网https://flutter.io/setup-windows/下载Flutter sdk并解压到一目录 二、Android studio中安装Flutter插件 Android studio中安装Flutter插件&#x…...

BabylonJS(一) 前言-为什么想写这个系列

先开篇吐槽下吧,我是奔着6.0和WebGPU来的,网上各种评测也很优秀,社区活跃,打算入坑。 但...... babylonjs中文资料相对于Threejs、Unity简直是太少了.. 之前有个中文站点,好像也没啥人维护了,大部分deep…...

论文阅读_反思模型_Reflexion

英文名称: Reflexion: Language Agents with Verbal Reinforcement Learning 中文名称: 反思:具有言语强化学习的语言智能体 文章: http://arxiv.org/abs/2303.11366 代码: https://github.com/noahshinn/reflexion 作者: Noah Shinn (Northeastern University) 日期…...

Redis 数据结构:高频面试题及解析

概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...