1、Apache Pegasus的应用与实践王伟 小米 高级软件工程师讲师简介王伟高级软工程师高级软件工程师,KV存储团队负责人曾就职于百度、SHAREit,先后负责分布式Trace、表格存储、KV存储系统的研发。目前就职于小米,负责KV存储方向。专注于存储系统、性能优化等技术,对分布式、Trace、存储等技术领域有较深的技术积累,及丰富的存储系统实践经验。目录 项目介绍 实现原理 功能特性 应用实践项目介绍项目介绍HBase的问题数据非本地保存(性能较差)Failover时间长(可用性低)JVM垃圾回收(长尾问题)Hadoop生态(运维困难)项目介绍Apache Pegasus一个高可用、高性能
2、、强一致、轻量级分布式KV存储系统项目介绍StartRelease 1.0.0Join ApacheRelease 2.0.0Open SourceGitHubMeetUP201520162017.92020.62020.92021.9Release 2.4.02022.9项目介绍架构设计中的一些考量 实现语言:C+、Java、Golang 存储介质:HDD、SSD、MEM 单机引擎:RocksDB、LevelDB 数据视图:KV、Tabular 数据分布:Hash、Range、一致性Hash 系统架构:中心化、去中心化 一致性协议:Raft、Paoxs、?实现原理实现原理分布式系统概念表A1
3、,2,3,4,51,2,3,4,5.a,b,c,d,e.1(2)2(3)3(4)4(5)5(1)传统数据库分布式数据库表Ba,b,c,d,e表A1,2,3,4,5表Ba,b,c,d,ea(b)b(c)c(d)d(e)e(f)实现原理Partition全局有序Key RangePartition#0 k0,k1 Partition#1 k2,k3 Partition#2 k4,k5Partition#3 k6,k7 Partition#4 k8,k9 k0k1k2k3k4k5k6k7k8k9 实现原理PartitionHash分环全Key Hash前缀HashPartition#0 k0,k5
4、Partition#1 k1,k6 Partition#2 k2,k7Partition#3 k3,k8 Partition#4 k4,k9 k0k1k2k3k4k5k6k7k8 离线)全量数据导出到HDFS,通过Spark进行离线计算,适用于在线数据离线分析场景 数据导入(离线-在线)离线生成数据文件,快速加载海量数据,适用于周期性更新数据,在线提供读取服务,大幅提升灌库速度及稳定性离线生态数据导出实现MetaServerZookeeperPrimary 0Secondary 1Secondary 2Primary 0Secondary 1Secondary 2HDFSSST fileSST
5、 fileSST fileSST fileUpload1 数据快照 通过RocksDB CheckPoint接口生成数据快照2 数据上传 将数据快照从ReplicaServer上传到HDFS即Pegasus的冷备份流程离线生态数据导出实现HDFSReplica serverReplica serverHiveSchema RDD3 使用PegasusSpark解析数据快照,进行离线分析转换为Hive(parquet)使用SparkSQL进行离线分析离线生态数据导入实现nodenodenodenodenodenodeTransform(Pegasus-Spark)HDFS(sst file)Di
6、stinctRepartitionSortoriginal dataoriginal data1 数据生成 通过离线系统ETL生成RocksDB底层数据文件离线生态数据导入实现2 数据下载 将数据文件从HDFS下载到ReplicaServer 数据将同时下载到Primary和Secondary3 导入引擎 待全部分片下载完成后进入导入环节 导入是特殊的写入,由Primary发起 通过IngestSST将数据文件加载到引擎 加载时引擎将瞬间阻写(分钟级别)MetaServerZookeeperPrimary 0Secondary 1Secondary 2P