首页 > 技术文章 > 架构设计文章读后感1

miria-486 2019-03-14 00:03 原文

手druid平台概览,druid去功能设计,druid改进,手druidroadmap,。
手druid平台概览,业务需求角度考虑手选择druid,手业务特点包括超大数据规模查询时延数据实时性要求并发查询稳定性schema灵活性要求,手选择druid平台底层架构,。
druid原生支持数据去功能手业务会涉及计费场景去需求,重点讲述druid平台实现去,druid接口json形式druid版本支持sqlsql部分会简述druid平台mysql交互方面做改进,重点介绍手druid平台架构,。
数据平台手数据源kafka数据源建立hadoop离线数据源,数据源kafkaindexhadoopindex导入到平台核心druid模型,druid数据进行业务隔离分层数据放在硬盘热数据放在ssd,业务接口方面支持api开发业务模块支持kwaibi做可视化,。
部分人需求支持tableautableauhive连接druid,数据平台辅助系统包括metric监控监控cpu占用率情况进程情况lag信息探针系统用来查询定义查询热度维度信息有助于优化管理系统原生态druidjson接口基础定制管理系统实现任务可视化导入管理操作,druid去概述,原生druid去功能支持情况,。
维度列,cardinalityagghll,查询时hash函数耗费cpu,嵌套group耗费资源,。
社区distinctcount插件局限,支持单维度构建时需要维度做hashpartition,不能跨interval进行计算,指标列,。
hyperuniquessketchhll摄入做计算相比cardinalityagg性能,结论druid缺乏支持预聚合资源占用通用性去支持,去方案,去方案hashset,。
使用hashset方式存储具备通用优点资源占用,图所示例原始数据使用hashset方法year维度列city指标列,维度列分成segment转换数据格式,接下来指标列聚合broker计算出size得到,。
过程如下图所示,使用hashset去方式资源占用,假设条长度stringmb生成hashset会产生链表结构导致内存达到内存扩展达,使用hashset方法可行,。
hashset方法基础考虑优化思路增加节点数据分散机器查询机器聚合求和,方式类似mapreduce计算利用shuffle模型数据打散,优化思路druid平台属性冲突用于druid平台,去方案字典编码bitmap,。
bitmap方法位来表示数据理论最小值,方案思路去数据列做编码string类型数据转化成int编码摄入druidbitmap形式存储,查询bitmap做交集获取,bitmap范围占用空间,。
使用压缩算法使空间占用大大减少,字典编码bitmap方式优点存储查询资源占用构建查询分开字典参与查询,缺点字典需要做全局编码构建过程,考虑kylin使用方案手后续优化方案选择方案基础进行优化,。
字典编码方案,字典编码方案使用,redis方案,redis进行编码支持离线任务任务实时处理数据离线处理数据使用方案,。
redisid生成速度瓶颈,查询压力交互会造成麻烦,redis稳定性要求,离线方案,。
离线方案利用分布式存储编码查询吞吐量用用容错性,支持离线导入任务,综合字典编码方案得到结论,离线任务使用离线编码小时级任务解决实现准,。
任务支持原始int去无需编码,字典编码方案模型,手字典编码方案参照kylinappendtrie树模型模型下图,trie树模型使用字符串做编码,。
手支持各种类型数据类型数据统一转换成字符串类型使用trie树模型做编码,trie树模型实现append方式,节点位置保存id保持已有id不变,记录当前模型id便于新增节点分配id,。
模型会带来问题基数trie树内存会无限扩张,控制内存占用率选择单颗子树设定阈值超过分裂控制单颗子树内存消耗,分裂每棵树负责范围类似hbaseregion分区,查询需要查询子树,。
节省cpu资源guavaloadingcache需加载子树加载使用lru方法换出子树,lru内存管理置换算法内存不够时子树内存清除加载磁盘,lru算法数据历史访问记录进行淘汰数据核心思想数据访问将来访问几率,字典并发构建,。
字典会存在并发构建问题使用mvcczookeeper分布式锁方案,使用mvcc化hdfs读取会使用版本拷贝到working进行构建构建完成生成版本号,历史数据会版本个数ttl进行,构建字典过程会操作目录存在进程去写目录会存在冲突问题,。
引入zookeeper分布式锁datasource列来做定位保证字典只能进程,去实现,新增unique指标存储,使用complexmetricserde定义指标serde序列化反序列化,。
使用aggregator用户定义指标执行聚合上卷,使用aggregatorbuffer版本bufferaggregatoraggregator替代品,使用aggregatorfractory定义指标名称获取aggregator,去整体流程介绍,。
使用determineconfigurationjob计算segment分片情况,使用builddictjobmap去重列发送到reducermap端combine,reducer构建全局字典,列字典构建申请zk锁,。
indexgeneratorjobmap加载字典去重列编码成int,reducerint聚合成bitmap存储,reducer生成segment,去使用方法,。
导入时定义unique类型指标,查询时使用unique类型查询,性能优化测试,优化字典查询,。
存在超高基数列uhc去指标indexgenerator增加clusterbyuhc任务保证map处理uhc列数据有序避免换入换出,存在超高基数列去指标拆成datasource调大indexgenerator任务map内存保证字典加载内存,bitmap查询优化,减少targetpartitionsize调大numshards增加segment个数提升并行度,。
使用bitmap做计算建议使用batchor方法避免计算交替缓存持续刷新导致性能降低,batchor选择rollingbitmap提供接口默认选择naive延迟计算模型情况性能,priorityqueue使用堆排序合并bitmap消耗内存官方建议benchmark使用,序列选择手动顺序inplace,。
思路croaringhighperformancelevelimplementation,rollingbitmap语言实现simdjava版smid版利用向量指令avx2性能提升,手smidjni方式引入bitmap做操作使用java版本操作计算时,jni调用croaring数据进行序列化需要memcpy时计算消耗总用时java版本,。
croaring支持原地inplace序列化immutableroaringbitmap导致实际运行效率官方称提升,传输层编码,brokerhistoricalhttp协议交换数据默认打开gzip压缩选择压缩plainjson,测试发现gzip压缩过程会耗用大量cpu网络建议压缩,。
查询优化步骤性能测试,维度基数数据选择列authorid去指标摄入达,historical机器,做优化去查询时间,。
增加segment数量查询时间提升性能,策略设置batchor查询时间,关闭gzip压缩查询时间,基数数据作去查询时间,。
数据基数查询时间,druid方面做改进,资源隔离部署方案,方案druid官方推荐部署方案充分利用druid分层特质性业务数据分proxy保证业务受影响,。
物化视图,物化视图包括查询数据库对象理解远程数据副本用来生成数据表求和汇总表副本只读,想修改副本复制功能,想表视图抽取数据时物化视图抽取,。
物化视图数据库机制定期耗时表连接物化视图实现会提高查询效率,维度物化,druid社区具备物化视图功能社区实现维度物化,应用场景如下原始数据维度实际查询使用维度原始维度子集,。
不妨原始维度做聚合类似kylincubecuboid,查询部分维度做物化,时序物化,维度物化包括时序物化原始数据小时聚合聚合,。
物化效果,关心物化膨胀率物化命中率指标会影响查询效率,物化膨胀率表示物化数据存储耗用资源情况,物化命中率描述物化实际应用场景匹配,。
表格ds4ds5做到物化膨胀率物化命中率查询效率获得提升,historical重启,手数据平台硬件资源容量sata硬盘数据量segments数据占用空间重启min,druid默认重启会加载全部数据,。
考虑超过元信息启动时并不需要加载数据推迟查询,使用guavasuppliersmemoize命令延迟数据加载信息查询作列加载,过程参数lazyload控制,代码提交druid社区druidsegmentcachelazyloadonstartpr,。
优化重启过程需要min提升,kafkaindex方面改进,taskcount自动伸缩,kafkaindex任务taskcount需要峰值任务数设定导致高峰时刻会存在资源浪费,。
实施优化策略,kafkasupervisor增加dynamictaskcountnotice,taskcpukafkalag阈值进行增减taskcount,无需重启supervisor,。
精细化调度,middlemanagerindexingtask资源分配slot改成内存大小分配类似mapreduce改进优化方法如下,区分kafkaindexingtaskhadoopindexingtaskhadoopindexingtask需要占用内存,允许提交task时指定task内存大小,。
使用方式优化数据任务处理节省超过内存占用离线数据任务处理节省超过内存占用,数据交互,数据metadata又称中介数据中继数据描述数据属性property信息用来支持指示存储位置历史数据资源查找文件记录功能数据组织数据域关系信息看作电子式目录,简言之数据数据数据,。
overlordmysql交互优化,overlord节点负责接收任务协调分配任务任务创建锁返回任务状态任务发送方overlord运行模式模式远程模式默认模式,overlord控制台查看等待任务运行任务可用worker创建结束worker,segmentdruid基本数据存储单元采用列式方式存储时间间隔interval数据源datasource部分数据对应维度值度量值时间维度索引,。
segment逻辑名称结构,datasourceintervalstartintervalendversionpartitionnum,datasource表示数据源表,intervalstartintervalend表示时间段起止时间,。
version表示版本号用于区分加载数据对应segment,partitionnum表示分区编号interval内可能会partition,segmentshdfs物理存储路径包括文件descriptorjsonindexzip,记录segment描述文件样例见表内容保存druid集群元数据druidsegments表中,。
indexzip数据文件,复制代码,描述文件descriptorjson样例,,。
datasourceadactiveuser,intervalt00t00,versiont00,loadspec,。
typehdfs,pathdruidsegmentsadactiveusert000000t000000t00indexzip,,dimensionsappkeyspreadidpkgid,。
metricsmymetricscountoffsethyperloglog,shardspec,typenumbered,partitionnum,。
partitions,,binaryversion,size,。
identifieradactiveusert00t00t00,,druidsegments增加索引datasource查询时间优化,coordinatormysql交互优化,。
druidcoordinator节点负责segment管理分发,coordinator会配置历史节点通信加载丢弃segment,druidcoordinator负责加载segment丢弃过期segment管理segment副本segment负载,coordinator会配置参数设置事件定期执行执行操作会估算集群状态,。
broker节点historycal节点类似coordinator节点会zookeeper集群保持连接用于交互集群信息,coordinator会保存segmentrule信息数据源保持通信,可用segment会存储segment表中列出应该集群加载segment,rule保存rule表中指出应该处理segment,。
segment发现,coordinator默认全量扫描druidsegments表改成增加读取druidsegments添加索引createddate查询时间min优化ms,协调周期,segment使用treeset时间排序确保优先loadsegment现在优化成concurrenthashset分成set操作,。
applyrulesloadrule判断集群副本配置是否跳提升并发能力,cleanupovershadow操作合并,查询时间min优化,手druidroadmap,。
化,今年会实现集群可用保证业务sla线业务权限管理,易用性,实现sql支持手bi产品会做相应升级优化,。
性能优化druid内核方面社区合作,适应物化视图智能化,数值索引,量化引擎,。
提交社区代码,httpsgithubapacheincubatordruidpull去功能,httpsgithubapacheincubatordruidpullhistorical重启,

推荐阅读