Tips
Go
(18条消息) Go语言自学系列 | golang包_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之channel的遍历_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之select switch_COCOgsta的博客-CSDN博客_golang select switch
(18条消息) Go语言自学系列 | golang并发编程之runtime包_COCOgsta的博客-CSDN博客_golang runtime包
(18条消息) Go语言自学系列 | golang接口值类型接收者和指针类型接收者_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之Timer_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang方法_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之WaitGroup实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang构造函数_COCOgsta的博客-CSDN博客_golang 构造函数
(18条消息) Go语言自学系列 | golang方法接收者类型_COCOgsta的博客-CSDN博客_golang 方法接收者
(18条消息) Go语言自学系列 | golang接口_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang接口和类型的关系_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件读操作_COCOgsta的博客-CSDN博客_golang os.file
(18条消息) Go语言自学系列 | golang继承_COCOgsta的博客-CSDN博客_golang 继承
(18条消息) Go语言自学系列 | golang嵌套结构体_COCOgsta的博客-CSDN博客_golang 结构体嵌套
(18条消息) Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发变成之通道channel_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之原子操作详解_COCOgsta的博客-CSDN博客_golang 原子操作
(18条消息) Go语言自学系列 | golang并发编程之原子变量的引入_COCOgsta的博客-CSDN博客_go 原子变量
(18条消息) Go语言自学系列 | golang并发编程之协程_COCOgsta的博客-CSDN博客_golang 协程 并发
(18条消息) Go语言自学系列 | golang接口嵌套_COCOgsta的博客-CSDN博客_golang 接口嵌套
(18条消息) Go语言自学系列 | golang包管理工具go module_COCOgsta的博客-CSDN博客_golang 包管理器
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件写操作_COCOgsta的博客-CSDN博客_go os模块
(18条消息) Go语言自学系列 | golang结构体的初始化_COCOgsta的博客-CSDN博客_golang 结构体初始化
(18条消息) Go语言自学系列 | golang通过接口实现OCP设计原则_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os包进程相关操作_COCOgsta的博客-CSDN博客_golang os包
(18条消息) Go语言自学系列 | golang标准库ioutil包_COCOgsta的博客-CSDN博客_golang ioutil
(18条消息) Go语言自学系列 | golang标准库os模块 - 文件目录相关_COCOgsta的博客-CSDN博客_go语言os库
Golang技术栈,Golang文章、教程、视频分享!
(18条消息) Go语言自学系列 | golang结构体指针_COCOgsta的博客-CSDN博客_golang 结构体指针
Ansible
太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏_互联网老辛
ansible.cfg配置详解
Docker
Docker部署
linux安装docker和Docker Compose
linux 安装 docker
Docker中安装Docker遇到的问题处理
Docker常用命令
docker常用命令小结
docker 彻底卸载
Docker pull 时报错:Get https://registry-1.docker.io/v2/library/mysql: net/http: TLS handshake timeout
Docker 拉镜像无法访问 registry-x.docker.io 问题(Centos7)
docker 容器内没有权限
Linux中关闭selinux的方法是什么?
docker run 生成 docker-compose
Docker覆盖网络部署
docker pull后台拉取镜像
docker hub
Redis
Redis 集群别乱搭,这才是正确的姿势
linux_离线_redis安装
怎么实现Redis的高可用?(主从、哨兵、集群) - 雨点的名字 - 博客园
redis集群离线安装
always-show-logo yes
Redis集群搭建及原理
[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some - 亲爱的不二999 - 博客园
Redis daemonize介绍
redis 下载地址
Redis的redis.conf配置注释详解(三) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(一) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(二) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(四) - 云+社区 - 腾讯云
Linux
在终端连接ssh的断开关闭退出的方法
漏洞扫描 - 灰信网(软件开发博客聚合)
find 命令的参数详解
vim 编辑器搜索功能
非root安装rpm时,mockbuild does not exist
Using a SSH password instead of a key is not possible because Host Key checking
(9条消息) 安全扫描5353端口mDNS服务漏洞问题_NamiJava的博客-CSDN博客_5353端口
Linux中使用rpm命令安装rpm包
ssh-copy-id非22端口的使用方法
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
Linux cp 命令
yum 下载全量依赖 rpm 包及离线安装(终极解决方案) - 叨叨软件测试 - 博客园
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
RPM zlib 下载地址
运维架构网站
欢迎来到 Jinja2
/usr/local/bin/ss-server -uv -c /etc/shadowsocks-libev/config.json -f /var/run/s
ruby 安装Openssl 默认安装位置
Linux 常用命令学习 | 菜鸟教程
linux 重命名文件和文件夹
linux命令快速指南
ipvsadm
Linux 下查找日志中的关键字
Linux 切割大 log 日志
CentOS7 关于网络的设置
rsync 命令_Linux rsync 命令用法详解:远程数据同步工具
linux 可视化界面安装
[问题已处理]-执行yum卡住无响应
GCC/G++升级高版本
ELK
Docker部署ELK
ELK+kafka+filebeat+Prometheus+Grafana - SegmentFault 思否
(9条消息) Elasticsearch设置账号密码_huas_xq的博客-CSDN博客_elasticsearch设置密码
Elasticsearch 7.X 性能优化
Elasticsearch-滚动更新
Elasticsearch 的内存优化_大数据系统
Elasticsearch之yml配置文件
ES 索引为Yellow状态
Logstash:Grok filter 入门
logstash grok 多项匹配
Mysql
Mysql相关Tip
基于ShardingJDBC实现数据库读写分离 - 墨天轮
MySQL-MHA高可用方案
京东三面:我要查询千万级数据量的表,怎么操作?
OpenStack
(16条消息) openstack项目中遇到的各种问题总结 其二(云主机迁移、ceph及扩展分区)_weixin_34104341的博客-CSDN博客
OpenStack组件介绍
百度大佬OpenStack流程
openstack各组件介绍
OpenStack生产实际问题总结(一)
OpenStack Train版离线部署
使用Packstack搭建OpenStack
K8S
K8S部署
K8S 集群部署
kubeadm 重新 init 和 join-pudn.com
Kubernetes 实战总结 - 阿里云 ECS 自建 K8S 集群 Kubernetes 实战总结 - 自定义 Prometheus
【K8S实战系列-清理篇1】k8s docker 删除没用的资源
Flannel Pod Bug汇总
Java
Jdk 部署
JDK部署
java线程池ThreadPoolExecutor类使用详解 - bigfan - 博客园
ShardingJDBC实现多数据库节点分库分表 - 墨天轮
Maven Repository: Search/Browse/Explore
其他
Git在阿里,我们如何管理代码分支?
chrome F12调试网页出现Paused in debugger
体验IntelliJ IDEA的远程开发(Remote Development) - 掘金
Idea远程调试
PDF转MD
强哥分享干货
优秀开源项目集合
vercel 配合Github 搭建项目Doc门户
如何用 Github Issues 写技术博客?
Idea 2021.3 Maven 3.8.1 报错 Blocked mirror for repositories 解决
列出maven依赖
[2022-09 持续更新] 谷歌 google 镜像 / Sci-Hub 可用网址 / Github 镜像可用网址总结
阿里云ECS迁移
linux访问github
一文教你使用 Docker 启动并安装 Nacos-腾讯云开发者社区-腾讯云
Nginx
Nginx 部署
Nginx 部署安装
Nginx反向代理cookie丢失的问题_longzhoufeng的博客-CSDN博客_nginx 代理后cookie丢失
Linux 系统 Https 证书生成与Nginx配置 https
数据仓库
实时数仓
松果出行 x StarRocks:实时数仓新范式的实践之路
实时数据仓库的一些分层和分层需要处理的事情,以及数据流向
湖仓一体电商项目
湖仓一体电商项目(一):项目背景和架构介绍
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
湖仓一体电商项目(三):3万字带你从头开始搭建12个大数据项目基础组件
数仓笔记
数仓学习总结
数仓常用平台和框架
数仓学习笔记
数仓技术选型
尚硅谷教程
尚硅谷学习笔记
尚硅谷所有已知的课件资料
尚硅谷大数据项目之尚品汇(11数据质量管理V4.0)
尚硅谷大数据项目之尚品汇(10元数据管理AtlasV4.0)
尚硅谷大数据项目之尚品汇(9权限管理RangerV4.0)
尚硅谷大数据项目之尚品汇(8安全环境实战V4.0)
尚硅谷大数据项目之尚品汇(7用户认证KerberosV4.1)
尚硅谷大数据项目之尚品汇(6集群监控ZabbixV4.1)
尚硅谷大数据项目之尚品汇(5即席查询PrestoKylinV4.0)
尚硅谷大数据项目之尚品汇(4可视化报表SupersetV4.0)
尚硅谷大数据项目之尚品汇(3数据仓库系统)V4.2.0
尚硅谷大数据项目之尚品汇(2业务数据采集平台)V4.1.0
尚硅谷大数据项目之尚品汇(1用户行为采集平台)V4.1.0
数仓治理
数据中台 元数据规范
数据中台的那些 “经验与陷阱”
2万字详解数据仓库数据指标数据治理体系建设方法论
数据仓库,为什么需要分层建设和管理? | 人人都是产品经理
网易数帆数据治理演进
数仓技术
一文看懂大数据生态圈完整知识体系
阿里云—升舱 - 数据仓库升级白皮书
最全企业级数仓建设迭代版(4W字建议收藏)
基于Hue,Dolphinscheduler,HIVE分析数据仓库层级实现及项目需求案例实践分析
详解数据仓库分层架构
数据仓库技术细节
大数据平台组件介绍
总览 2016-2021 年全球机器学习、人工智能和大数据行业技术地图
Apache DolphinScheduler 3.0.0 正式版发布!
数据仓库面试题——介绍下数据仓库
数据仓库为什么要分层,各层的作用是什么
Databend v0.8 发布,基于 Rust 开发的现代化云数据仓库 - OSCHINA - 中文开源技术交流社区
数据中台
数据中台设计
大数据同步工具之 FlinkCDC/Canal/Debezium 对比
有数数据开发平台文档
Shell
Linux Shell 命令参数
shell 脚本编程
一篇教会你写 90% 的 Shell 脚本
Kibana
Kibana 查询语言(KQL)
Kibana:在 Kibana 中的四种表格制作方式
Kafka
Kafka部署
canal 动态监控 Mysql,将 binlog 日志解析后,把采集到的数据发送到 Kafka
OpenApi
OpenAPI 标准规范,了解一下?
OpenApi学术论文
贵阳市政府数据开放平台设计与实现
OpenAPI简介
开放平台:运营模式与技术架构研究综述
管理
技术部门Leader是不是一定要技术大牛担任?
华为管理体系流程介绍
DevOps
*Ops
XOps 已经成为一个流行的术语 - 它是什么?
Practical Linux DevOps
Jenkins 2.x实践指南 (翟志军)
Jenkins 2权威指南 ((美)布伦特·莱斯特(Brent Laster)
DevOps组件高可用的思路
KeepAlived
VIP + KEEPALIVED + LVS 遇到Connection Peer的问题的解决
MinIO
MinIO部署
Minio 分布式集群搭建部署
Minio 入门系列【16】Minio 分片上传文件 putObject 接口流程源码分析
MinioAPI 浅入及问题
部署 minio 兼容 aws S3 模式
超详细分布式对象存储 MinIO 实战教程
Hadoop
Hadoop 部署
Hadoop集群部署
windows 搭建 hadoop 环境(解决 HADOOP_HOME and hadoop.home.dir are unset
Hadoop 集群搭建和简单应用(参考下文)
Hadoop 启动 NameNode 报错 ERROR: Cannot set priority of namenode process 2639
jps 命令查看 DataNode 进程不见了 (hadoop3.0 亲测可用)
hadoop 报错: Operation category READ is not supported in state standby
Spark
Spark 部署
Spark 集群部署
spark 心跳超时分析 Cannot receive any reply in 120 seconds
Spark学习笔记
apache spark - Failed to find data source: parquet, when building with sbt assembly
Spark Thrift Server 架构和原理介绍
InLong
InLong 部署
Apache InLong部署文档
安装部署 - Docker 部署 - 《Apache InLong v1.2 中文文档》 - 书栈网 · BookStack
基于 Apache Flink SQL 的 InLong Sort ETL 方案解析
关于 Apache Pulsar 在 Apache InLong 接入数据
zookeeper
zookeeper 部署
使用 Docker 搭建 Zookeeper 集群
美团技术团队
StarRocks
StarRocks技术白皮书(在线版)
JuiceFS
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
JuiceFS format
元数据备份和恢复 | JuiceFS Document Center
JuiceFS 元数据引擎选型指南
Apache Hudi 使用文件聚类功能 (Clustering) 解决小文件过多的问题
普罗米修斯
k8s 之 Prometheus(普罗米修斯)监控,简单梳理下 K8S 监控流程
k8s 部署 - 使用helm3部署监控prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 使用 helm3 部署监控 prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 如何完善 k8s 中 Prometheus(普罗米修斯)监控项目呢?
k8s 部署 - k8s 中 Prometheus(普罗米修斯)的大屏展示 Grafana + 监控报警
zabbix
一文带你掌握 Zabbix 监控系统
Stream Collectors
Nvidia
Nvidia API
CUDA Nvidia驱动安装
NVIDIA驱动失效简单解决方案:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
ubuntu 20 CUDA12.1安装流程
nvidia开启持久化模式
nvidia-smi 开启持久化
Harbor
Harbor部署文档
Docker 爆出 it doesn't contain any IP SANs
pandoc
其他知识
大模型
COS 597G (Fall 2022): Understanding Large Language Models
如何优雅的使用各类LLM
ChatGLM3在线搜索功能升级
当ChatGLM3能用搜索引擎时
OCR神器,PDF、数学公式都能转
Stable Diffusion 动画animatediff-cli-prompt-travel
基于ERNIE Bot自定义虚拟数字人生成
pika负面提示词
开通GPT4的方式
GPT4网站
低价开通GPT Plus
大模型应用场景分享
AppAgent AutoGPT变体
机器学习
最大似然估计
权衡偏差(Bias)和方差(Variance)以最小化均方误差(Mean Squared Error, MSE)
伯努利分布
方差计算公式
均值的高斯分布估计
没有免费午餐定理
贝叶斯误差
非参数模型
最近邻回归
表示容量
最优容量
权重衰减
正则化项
Sora
Sora官方提示词
看完32篇论文,你大概就知道Sora如何炼成? |【经纬低调出品】
Sora论文
Sora 物理悖谬的几何解释
Sora 技术栈讨论
RAG垂直落地
DB-GPT与TeleChat-7B搭建相关RAG知识库
ChatWithRTX
ChatRTX安装教程
ChatWithRTX 踩坑记录
ChatWithRTX 使用其他量化模型
ChatWithRTX介绍
RAG 相关资料
英伟达—大模型结合 RAG 构建客服场景自动问答
又一大模型技术开源!有道自研RAG引擎QAnything正式开放下载
收藏!RAG入门参考资料开源大总结:RAG综述、介绍、比较、预处理、RAG Embedding等
RAG调研
解决现代RAG实际生产问题
解决现代 RAG 系统中的生产问题-II
Modular RAG and RAG Flow: Part Ⅰ
Modular RAG and RAG Flow: Part II
先进的Retriever技术来增强你的RAGs
高级RAG — 使用假设文档嵌入 (HyDE) 改进检索
提升 RAG:选择最佳嵌入和 Reranker 模型
LangGraph
增强型RAG:re-rank
LightRAG:使用 PyTorch 为 LLM 应用程序提供支持
模型训练
GPU相关资料
[教程] conda安装简明教程(基于miniconda和Windows)
PyTorch CUDA对应版本 | PyTorch
资料
李一舟课程全集
零碎资料
苹果各服共享ID
数据中心网络技术概览
华为大模型训练学习笔记
百度AIGC工程师认证考试答案(可换取工信部证书)
百度智能云生成式AI认证工程师 考试和证书查询指南
深入理解 Megatron-LM(1)基础知识
QAnything
接入QAnything的AI问答知识库,可私有化部署的企业级WIKI知识库
wsl --update失效Error code: Wsl/UpdatePackage/0x80240438的解决办法
Docker Desktop 启动docker engine一直转圈解决方法
win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present
WSL虚拟磁盘过大,ext4迁移 Windows 中创建软链接和硬链接
WSL2切换默认的Linux子系统
Windows的WSL子系统,自动开启sshd服务
新版docker desktop设置wsl(使用windown的子系统)
WSL 开启ssh
Windows安装网易开源QAnything打造智能客服系统
芯片
国内互联网大厂自研芯片梳理
超算平台—算力供应商
Linux 磁盘扩容
Linux使用growpart工具进行磁盘热扩容(非LVM扩容方式)
关于centos7 扩容提示no tools available to resize disk with 'gpt' - o夜雨随风o - 博客园
(小插曲)neo4j配置apoc插件后检查版本发现:Unknown function ‘apoc.version‘ “EXPLAIN RETURN apoc.version()“
vfio-pci与igb_uio映射硬件资源到DPDK的流程分析
KubeVirt
vnc server配置、启动、重启与连接 - 王约翰 - 博客园
虚拟机Bug解决方案
kubevirt 如何通过CDI上传镜像文件
在 K8S 上也能跑 VM!KubeVirt 簡介與建立(部署篇) | Cloud Solutions
KubeVirt 04:容器化数据导入 – 小菜园
Python
安装 flash_attn
手把手教你在linux上安装pytorch与cuda
AI
在启智社区基于PyTorch运行国产算力卡的模型训练实验
Scaling law
免费的GPT3.5 API
AI Engineer Roadmap & Resources 🤖
模型排行
edk2
K8S删除Evicted状态的pod
docker 中启动 docker
远程本地多用户桌面1.17(一种不让电脑跟你抢键鼠的思路) - 哔哩哔哩
-
+
首页
JuiceFS 元数据引擎选型指南
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s/asVk0-rUfzdP2Np78HkDkw) 文件系统 (File System)是常见的存储形式,主要由数据和元数据两部分组成。其中数据是文件的具体内容,通常会直接展现给用户;而元数据是描述数据的数据,用来记录文件属性、目录结构、数据存储位置等。一般来说,元数据有非常鲜明的特点,即占用空间较小,但访问非常频繁。 当今的分布式文件系统中,有的(如 S3FS)会将元数据和数据统一管理,以简化系统设计,不过这样的弊端是某些元数据操作会让用户感受到明显的卡顿,如 `ls` 大目录,重命名大文件等。更多的文件系统会选择将这两者分开管理,并根据元数据的特点进行针对性优化。JuiceFS 采用的就是这种设计,其架构图如下: ![](https://mmbiz.qpic.cn/mmbiz_png/F446RY3QsZns2FhUt2kE85vR6NV0S1QrbW4YIVBCLtmyuibuPbHstqIKfk74spA0LI7FB199o9bg1MrPSibThMwg/640?wx_fmt=png) JuiceFS 架构图 其中,**元数据引擎需要是能够支持事务操作的数据库**,而数据引擎一般是用对象存储。目前为止,JuiceFS 已经支持 10 种以上元数据引擎和 30 种以上数据引擎。 用户在使用 JuiceFS 时可以自由地选择成熟组件来充当这两个引擎,以应对丰富多变的企业环境和数据存储需求。然而对于新用户来说,当面对更多选择时,也带来了一个问题:在我的场景中究竟选择哪一款数据库作为元数据引擎比较合适?这篇文章将从产品设计角度,为大家介绍 JuiceFS 可使用的元数据引擎类型,以及他们的优劣势。 01-JuiceFS 元数据引擎类型 ------------------ JuiceFS 现在支持的元数据引擎总共有有三大类。 **第一个是** **Redis**。Redis 是 JuiceFS 开源后最早支持的元数据引擎。首先 Redis 速度够快,这是元数据引擎需要具备的重要能力之一;其次,Redis 受众面广,大部分用户对 Redis 都有实践经验。JuiceFS 对兼容 Redis 协议的数据库也都实现了支持,比如 KeyDB、Amazon MemoryDB 等。 然而,Redis 的可靠性和扩展性容易受限,在一些数据安全性要求较高或规模较大的场景中表现乏善可陈,因此我们又开发支持了另外两类引擎。 **第二个是** **SQL 类**。如 MySQL、MariaDB、PostgreSQL 等,它们的特点是流行度较高,且通常具有不错的可靠性与扩展性。另外,还支持了嵌入式数据库 SQLite。 **最后一个是 TKV(Transactional Key-Value Database)类。**它们的原生接口比较简单,因此在 JuiceFS 中的定制性更好,相较于 SQL 类一般也能有更高的性能。目前这一类支持的有 TiKV、etcd 和嵌入式的 BadgerDB 等,对 FoundationDB 的支持也在紧锣密鼓地开发中。 以上是根据 JuiceFS 在对接数据库时的协议接口进行的分类。每个大类里面有各种不同的数据库,每种数据库又有其自身的特点,以下根据这些特点对用户常用的几个选项进行比较。 ### 元数据引擎比较 <table><thead><tr><td><br></td><td>Redis</td><td>MySQL/PostgreSQL</td><td>TiKV</td><td>etcd</td><td>SQLite/BadgerDB</td></tr></thead><tbody><tr><td>性能</td><td>高</td><td>低</td><td>中</td><td>低</td><td>中</td></tr><tr><td>扩展性</td><td>低</td><td>中</td><td>高</td><td>低</td><td>低</td></tr><tr><td>可靠性</td><td>低</td><td>高</td><td>高</td><td>高</td><td>中</td></tr><tr><td>可用性</td><td>中</td><td>高</td><td>高</td><td>高</td><td>低</td></tr><tr><td>流行度</td><td>高</td><td>高</td><td>中</td><td>高</td><td>中</td></tr></tbody></table> 如上文中提到的,Redis 的最大优势是性能高,因为它是全内存的数据库。其他几方面它就表现平平。 从扩展性上说,通常单机 Redis 可以支持 1 亿文件左右,超过 1 亿时,Redis 单进程的内存使用量会比较大,管理性能上也会有所下降。开源版 Redis 支持以集群模式来扩展其可管理的数据总量,但由于集群模式下 Redis 并不支持分布式事务,因此作为 JuiceFS 元数据引擎时,每个 JuiceFS volume 能用的 Redis 进程还是只有一个,单 volume 的扩展性相较于单机 Redis 并没有太大提升。 从可靠性来看,Redis 默认每秒将数据刷盘,在异常时可能导致小部分数据丢失。通过将配置 appendfsync 改为 always,可以让 Redis 在每个写请求后都刷盘,这样数据可靠性能提高,但是性能却会下降。 从可用性来说,部署 Redis 哨兵监控节点和备用节点,可以在主 Redis 节点挂掉后选择一个备份节点来重新提供服务,一定程度上提高可用性。然而,Redis 本身并不支持分布式的一致性协议,其备用节点采用的是异步备份,所以虽然新的节点起来了,但是中间可能会有数据差,导致新起来的数据并不是那么的完整。 MySQL 和 PostgreSQL 的整体表现比较类似。它们都是经过大量用户多年时间验证过的数据库产品,可靠性和可用性都不错,流行度也很高。只是相较于其余元数据引擎,它们的性能一般。 TiKV 原本是 PingCAP TiDB 的底层存储,现在已经分离出来,成为一个独立的 KV 数据库组件。从我们的测试结果来看,它用来作为 JuiceFS 的元数据引擎是一个非常出色的选择。其本身就有不弱于 MySQL 的数据可靠性和服务可用性,而且在性能与扩展性上表现更好。只是在流行度上,它和 MySQL 还有差距。从我们与用户交流来看,如果他们已经是 TiKV 或 TiDB 的用户,那最后通常都会偏向使用 TiKV 来做 JuiceFS 的元数据引擎。但如果他们之前对 TiKV 并不熟悉,那要再接受这样一个新的组件就会慎重许多。 etcd 是另一个 TKV 类的数据库。支持 etcd 的原因是因为它在容器化场景中流行度非常高,基本上 k8s 都是用 etcd 来管理它的配置。使用 etcd 作为 JuiceFS 的元数据引擎,并不是一个特别适配的场景。一方面是它的性能一般,另一方面是它有容量限制(默认 2G,最大 8G),之后就难以扩容。但是它的可靠性和可用性都非常高,而且容器化场景中也很容易部署,**因此如果用户只需要一个规模在百万文件级别的文件系统,etcd 依然是一个不错的选择。** 最后是 SQLite 和 BadgerDB,它们分别属于 SQL 类和 TKV 类,但使用起来体验却非常类似,因为它们都是单机版的嵌入式数据库。这类数据库的特点是性能中等,但扩展性和可用性都比较差,因为其数据其实就存放在本地系统中。它们的优势在于非常易用,只需要 JuiceFS 自己的二进制文件,不需要任何额外组件。用户在某些特定场景或者进行一些简单功能测试时,可以使用这两个数据库。 02- 典型引擎的性能测试结果 --------------- 我们做过一些典型引擎的性能测试,并将其结果记录在这个文档 [1] 中。其中一份从源码接口处测试的最直接结果大致为:**Redis > TiKV(3 副本)> MySQL(本地)~= etcd(3 副本)**,具体如下: <table><thead><tr><td><br></td><td>Redis-Always</td><td>Redis-Everysec</td><td>TiKV</td><td>MySQL</td><td>etcd</td></tr></thead><tbody><tr><td>mkdir</td><td>600</td><td>471 (0.8)</td><td>1614 (2.7)</td><td>2121 (3.5)</td><td>2203 (3.7)</td></tr><tr><td>mvdir</td><td>878</td><td>756 (0.9)</td><td>1854 (2.1)</td><td>3372 (3.8)</td><td>3000 (3.4)</td></tr><tr><td>rmdir</td><td>785</td><td>673 (0.9)</td><td>2097 (2.7)</td><td>3065 (3.9)</td><td>3634 (4.6)</td></tr><tr><td>readdir_10</td><td>302</td><td>303 (1.0)</td><td>1232 (4.1)</td><td>1011 (3.3)</td><td>2171 (7.2)</td></tr><tr><td>readdir_1k</td><td>1668</td><td>1838 (1.1)</td><td>6682 (4.0)</td><td>16824 (10.1)</td><td>17470 (10.5)</td></tr><tr><td>mknod</td><td>584</td><td>498 (0.9)</td><td>1561 (2.7)</td><td>2117 (3.6)</td><td>2232 (3.8)</td></tr><tr><td>create</td><td>591</td><td>468 (0.8)</td><td>1565 (2.6)</td><td>2120 (3.6)</td><td>2206 (3.7)</td></tr><tr><td>rename</td><td>860</td><td>736 (0.9)</td><td>1799 (2.1)</td><td>3391 (3.9)</td><td>2941 (3.4)</td></tr><tr><td>unlink</td><td>709</td><td>580 (0.8)</td><td>1881 (2.7)</td><td>3052 (4.3)</td><td>3080 (4.3)</td></tr><tr><td>lookup</td><td>99</td><td>97 (1.0)</td><td>731 (7.4)</td><td>423 (4.3)</td><td>1286 (13.0)</td></tr><tr><td>getattr</td><td>91</td><td>89 (1.0)</td><td>371 (4.1)</td><td>343 (3.8)</td><td>661 (7.3)</td></tr><tr><td>setattr</td><td>501</td><td>357 (0.7)</td><td>1358 (2.7)</td><td>1258 (2.5)</td><td>1480 (3.0)</td></tr><tr><td>access</td><td>90</td><td>89 (1.0)</td><td>370 (4.1)</td><td>348 (3.9)</td><td>646 (7.2)</td></tr><tr><td>setxattr</td><td>404</td><td>270 (0.7)</td><td>1116 (2.8)</td><td>1152 (2.9)</td><td>757 (1.9)</td></tr><tr><td>getxattr</td><td>91</td><td>89 (1.0)</td><td>365 (4.0)</td><td>298 (3.3)</td><td>655 (7.2)</td></tr><tr><td>removexattr</td><td>219</td><td>95 (0.4)</td><td>1554 (7.1)</td><td>882 (4.0)</td><td>1461 (6.7)</td></tr><tr><td>listxattr_1</td><td>88</td><td>88 (1.0)</td><td>374 (4.2)</td><td>312 (3.5)</td><td>658 (7.5)</td></tr><tr><td>listxattr_10</td><td>94</td><td>91 (1.0)</td><td>390 (4.1)</td><td>397 (4.2)</td><td>694 (7.4)</td></tr><tr><td>link</td><td>605</td><td>461 (0.8)</td><td>1627 (2.7)</td><td>2436 (4.0)</td><td>2237 (3.7)</td></tr><tr><td>symlink</td><td>602</td><td>465 (0.8)</td><td>1633 (2.7)</td><td>2394 (4.0)</td><td>2244 (3.7)</td></tr><tr><td>write</td><td>613</td><td>371 (0.6)</td><td>1905 (3.1)</td><td>2565 (4.2)</td><td>2350 (3.8)</td></tr><tr><td>read_1</td><td>0</td><td>0 (0.0)</td><td>0 (0.0)</td><td>0 (0.0)</td><td>0 (0.0)</td></tr><tr><td>read_10</td><td>0</td><td>0 (0.0)</td><td>0 (0.0)</td><td>0 (0.0)</td><td>0 (0.0)</td></tr></tbody></table> * • 上表中记录的是每一个操作的耗时,数值越小越好;括号内数字是该指标对比 Redis-always 的倍数,数值也是越小越好 * • Always 和 Everysec 是 Redis 配置项 appendfsync 的可选值,分别表示每个请求都刷盘和每秒刷一次盘 * • 可以看到,Redis 在使用 everysec 的时候,性能更好,但与 always 相差的并不大;这是因为测试用的 AWS 机器上的本地 SSD 盘本身 IOPS 性能就比较高 * • TiKV 和 etcd 都使用了三副本,而 MySQL 是单机部署的。即使这样,TiKV 的性能表现还是高于 MySQL,而 etcd 与 MySQL 接近。 **值得一提的是,上文中的测试使用的都是默认配置,并没有对各个元数据引擎去做特定的调优。用户在使用时可以根据自己的需求和实践经验进行配置调整,可能会有不一样的结果。** 另一份测试是通过 JuiceFS 自带的 bench 工具跑的,其运行的是操作系统读写文件的接口,具体结果如下: <table><thead><tr><td><br></td><td>Redis-Always</td><td>Redis-Everysec</td><td>TiKV</td><td>MySQL</td><td>etcd</td></tr></thead><tbody><tr><td>Write big file</td><td>565.07 MiB/s</td><td>556.92 MiB/s</td><td>553.58 MiB/s</td><td>557.93 MiB/s</td><td>542.93 MiB/s</td></tr><tr><td>Read big file</td><td>664.82 MiB/s</td><td>652.18 MiB/s</td><td>679.07 MiB/s</td><td>673.55 MiB/s</td><td>672.91 MiB/s</td></tr><tr><td>Write small file</td><td>102.30 files/s</td><td>105.80 files/s</td><td>95.00 files/s</td><td>87.20 files/s</td><td>95.75 files/s</td></tr><tr><td>Read small file</td><td>2200.30 files/s</td><td>1894.45 files/s</td><td>1394.90 files/s</td><td>1360.85 files/s</td><td>1017.30 files/s</td></tr><tr><td>Stat file</td><td>11607.40 files/s</td><td>15032.90 files/s</td><td>3283.20 files/s</td><td>5470.05 files/s</td><td>2827.80 files/s</td></tr><tr><td>FUSE operation</td><td>0.41 ms/op</td><td>0.42 ms/op</td><td>0.45 ms/op</td><td>0.46 ms/op</td><td>0.42 ms/op</td></tr><tr><td>Update meta</td><td>3.63 ms/op</td><td>3.19 ms/op</td><td>7.04 ms/op</td><td>8.91 ms/op</td><td>4.46 ms/op</td></tr></tbody></table> 从上表可以看到,**读写大文件时使用不同的元数据引擎最后性能是差不多的。**这是因为此时性能瓶颈主要在对象存储的数据读写上,元数据引擎之间虽然时延有点差异,但是放到整个业务读写的消耗上,这点差异几乎可以忽略不计。当然,如果对象存储变得非常快(比如都用本地全闪部署),那么元数据引擎的性能差异可能又会体现出来。另外,对于一些纯元数据操作(比如 ls,创建空文件等),不同元数据引擎的性能差别也会表现的比较明显。 03 - 引擎选型的考虑要素 -------------- 根据上文介绍的各引擎特点,用户可以根据自己的情况去选择合适的引擎。以下简单分享下我们在做推荐时会建议用户考虑的几个要素。 **评估需求**:比如想使用 Redis,需要先评估能否接受少量的数据丢失,短期的服务中断等。如果是存储一些临时数据或者中间数据的场景,那么用 Redis 确实是不错的选择,因为它性能够好,即使有少量的数据丢失,也不会造成很大的影响。但如果是要存储一些关键数据, Redis 就不适用了。另外还得评估预期数据的规模,如果在 1 亿文件左右, Redis 可以承受;如果预期会有 10 亿文件,那么显然单机 Redis 是难以承载的。 **评估硬件**:比如能否连通外网,是使用托管的云服务,还是在自己机房内私有部署。如果是私有部署,需要评估是否有足够的硬件资源去部署一些相关的组件。无论是用哪一种元数据引擎,基本上都要求有高速的 SSD 盘去运行,不然会对其性能有比较大的影响。 **评估运维能力,这是很多人会忽视的,但是在我们来看这应该是最关键的因素之一。**对于存储系统来说,稳定性往往才是其上生产后的第一重点。用户在选择元数据引擎的时候,应该先想想自己对它是不是熟悉,在出现问题时,能否快速定位解决;团队内是否有足够的经验或精力去把控好这个组件。通常来说,我们会建议用户在开始时选择一个自己熟悉的数据库是比较合适的。如果运维人员不足,那么选择公有云服务也确实是个省心的选项。 这里分享下社区在使用元数据引擎方面的一些统计数据。 * • **目前为止, Redis 的使用者依然占了一半以上**,其次是 TiKV 和 MySQL,这两类的使用者的数量占比在逐步增长。 * • **在运行的 Redis 集群的最大文件数大概是在 1.5 亿,**而且运行情况是比较稳定的。上文提到的推荐的 1 亿文件是建议值,并不是说无法超过 1 亿。 * • **整体数量规模 Top3,都是使用的 TiKV 而且都超过了 10 亿文件数量。**现在最大的文件系统的文件数量是超了 70 亿文件,总容量超过了 15 PiB,这也从侧面证明了 TiKV 在作为元数据引擎时的扩展能力。我们自己内部测过使用 TiKV 作为元数据引擎存储 100 亿文件,系统仍能稳定地运行。所以如果你的整个集群预期的规模会非常大,那么 TiKV 确实是一个很好的选择。 04- 元数引擎迁移 ---------- 文章的最后,为大家介绍元数据引擎迁移。随着用户业务的发展,企业对元数据引擎的需求会发生变化,当用户发现现有的元数据引擎不合适了,可以考虑将元数据迁移到另一个引擎中。我们为用户提供了完整的迁移方法,具体可以参考这个文档 [2]。 这个迁移方法有一定的限制,首先只能迁移到空数据库,暂时无法将两个文件系统直接合在一起;其次,需要停写,因为数据量比较大的情况下,很难在线将元数据完整的迁移过来。要做到这点需要加许多限制,从实测来看速度会非常慢。因此,把整个文件系统停掉再去做迁移是最稳妥的。如果说实在需要有一定的服务提供,可以保留只读挂载,用户读数据并不会影响整个元数据引擎迁移的动作。 虽然社区提供了全套的迁移方法,但是还是需要提醒用户,尽量提前对数据量的增长做好规划,尽量不做迁移或尽早迁移。当要迁移的数据规模很大时,耗时也会变长,期间出问题的概率也会变大。 **本文作者 ** ![图片](https://mmbiz.qpic.cn/mmbiz_png/F446RY3QsZnsdx9Fr7BR4T5Hz5QbvFF4Iy4Tme5dvDC6mcWG1jCk0pNpJeLhk9dMxVYgCibicl8XjnlTEbAUfD4g/640?wx_fmt=png) **Sandy** JuiceFS 核心系统工程师,十年分布式存储系统经验,主要负责 JuiceFS 社区版本的日常开发与维护。 引用链接 `[1]` 文档: _https://juicefs.com/docs/zh/community/metadata_engines_benchmark/_ `[2]` 这个文档: _https://juicefs.com/docs/zh/community/metadata_dump_load#%E5%85%83%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB_ **关于元数据更多讨论 ****欢迎加入用户群** ![](https://mmbiz.qpic.cn/mmbiz_png/F446RY3QsZnicUqZp3Z8kiaYTeutdibxV6AzEciaNND2C30ZXAicFAW9pXQYFkWJT0bhuJj1ia8qW37XDCAob2RCTdYA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1) 社群助手兼合伙人苏锐全天在线 用户案例 [一面数据 Hadoop 上云](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247487472&idx=1&sn=fad1bd5f9c27ecf4db54fe2b0129abdc&chksm=c03d84bef74a0da8aca5b055b93b1c94fb305ac05b14c1939eb3be2f039ed1cd6c3f7647fd80&scene=21#wechat_redirect) [AI - 云知声](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247486878&idx=1&sn=0f9db6a5828f2b57a8899444d265f90e&chksm=c03d86d0f74a0fc6a05f0b9c22ea656a7b66182038d824bd0904cb3584ed74855f8508e6c4e0&scene=21#wechat_redirect) [AI for Science - 深势科技](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247486950&idx=1&sn=08ae30278c08eb17a4ceb5705a8ea8f7&chksm=c03d86a8f74a0fbe060e7addb3eaa56cd6a918bd2fbb61fce8346795d30dc3309867f2334b7e&scene=21#wechat_redirect) [理想汽车:从 Hadoop 到云上](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247487472&idx=1&sn=fad1bd5f9c27ecf4db54fe2b0129abdc&chksm=c03d84bef74a0da8aca5b055b93b1c94fb305ac05b14c1939eb3be2f039ed1cd6c3f7647fd80&scene=21#wechat_redirect) [知乎](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485993&idx=1&sn=99d8bab067233cac450c8c930e89bc4a&chksm=c03d8167f74a08718c282f483fd0fbc886bc515f7159b798fed9ee5270b9a5fc5cae333243b7&scene=21#wechat_redirect) [在线设计平台:稿定科技](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485840&idx=1&sn=2b60bb01450ac4f10dcb2915eb1e339a&chksm=c03d82def74a0bc88b35bfc8b3c249a672ea8b5d0b94d6391eaac15ba5c6eb3d5b7f39cff6a6&scene=21#wechat_redirect) [大搜车](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247483788&idx=1&sn=58dd2ff44ee8461cf2fe9b142f4e5c3d&chksm=c03d8ac2f74a03d4c7226223272f48493c44a8af022ac9db036f85a0205ed0059f2891af3ad4&scene=21#wechat_redirect) [环球易购](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247483785&idx=1&sn=058e055ad9883cc55981ef7985595505&chksm=c03d8ac7f74a03d1319780d881c6e02c5ac42883f65c89ebf729529feeb5371c886ff109e4b8&scene=21#wechat_redirect) [趣头条](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485547&idx=1&sn=07c962144b549d0091e0ac0b39f419b8&chksm=c03d8325f74a0a33feb9012651172152f90a080d620e1478f23b1d7c0f283144db479dac4e67&scene=21#wechat_redirect) [Shopee](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485830&idx=1&sn=fd0a48ac1f7cd192ebfb91ce98155976&chksm=c03d82c8f74a0bdee80401268107e2f74d68b3737b50a351eebd2c33b4fbee616489036f33c7&scene=21#wechat_redirect) [携程冷数据场景](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247487518&idx=1&sn=4a5034411a8f2aa68537dfcaba9ee9a2&chksm=c03d9b50f74a1246de65cbb2b8166daafd7c10a20b4dd725c416edd424853cb3bbe766eac0b0&scene=21#wechat_redirect) 最佳实践 [元数据备份性能提升 40 倍](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247487047&idx=1&sn=117b4dee65baf0ae4c27a7c51376533a&chksm=c03d8509f74a0c1fc128b3b0868cca71a271282af311de2365b12b14d7d7d0af34eaa3a9922f&scene=21#wechat_redirect) [元数据 - Redis](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247487104&idx=1&sn=77fa0a3b58851bc5f95951c0c45b179d&chksm=c03d85cef74a0cd8db91b7d205acf7eb55d70272520b86cd68d1e41d22842dab7b973f646ff3&scene=21#wechat_redirect) [CSI Driver](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485950&idx=1&sn=942e620176edee9f64bd42c81fd891b8&chksm=c03d82b0f74a0ba6f8afc0f021d44e8ee9d132905d6e6548c64600db50ed099e87acb61e3d20&scene=21#wechat_redirect) [性能分析和调优](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485753&idx=1&sn=ab2e615fbd564879ed7a93260a033723&chksm=c03d8277f74a0b61022a478ab1f5200248f283f2cc17868985623cede0a7d6546ac3e600c341&scene=21#wechat_redirect) [HDFS 数据迁移](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247484563&idx=1&sn=9e295996afae83e8031bb24ffdf107f7&chksm=c03d8fddf74a06cb2daf308bd5a44398da65e6298da9ad3408f939d0ba9520521361a56eb9ba&scene=21#wechat_redirect) [跨云数据搬迁](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247484530&idx=1&sn=d840512b948037bec45fd89cf8418677&chksm=c03d8f3cf74a062ab547f44a8a5bd26ccfebd91c5009098c0d6b9b50a5ae27442c3d8a17d55d&scene=21#wechat_redirect) [ClickHouse 架构探索](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247485465&idx=1&sn=f4fd7f8ef8ecfa56f9315e07ff0b855b&chksm=c03d8357f74a0a41981872a7496cc9ddb7720b8289e04f2cb15bfdfeb051c565f78a854e2a29&scene=21#wechat_redirect) [MySQL 备份验证性提升 10 倍](http://mp.weixin.qq.com/s?__biz=Mzg5MjUyNjExMw==&mid=2247483786&idx=1&sn=03e93207369fdd66f426db9b6794f1fa&chksm=c03d8ac4f74a03d2d101af6980b7ef81894a5225476bebb255126d5ad2568bb1114daccd98e9&scene=21#wechat_redirect) **关于 Juicedata** Juicedata,杭州果汁数据科技有限公司是一家企业级存储服务供应商,开发了云原生分布式文件系统 JuiceFS,致力于在大数据时代下,为客户打造安全、高性能、自主可控的存储基础设施及服务。 2021 年,JuiceFS 正式在 GitHub 上开源,已经获得 6.8 K star,欢迎开发者加入我们。 (github.com/juicedata/juicefs) JuiceFS 用起来还不错, 点个 “在看” 让更多人知道
yg9538
2022年10月18日 21:28
1063
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码