乐趣区

关于数据库:HStreamDB-v07-发布透明分区哈希算法多项性能提升新尝试

春日降临,咱们非常高兴地向大家发表:云原生分布式流数据库 HStreamDB 最新版本 v0.7 已正式公布!

HStreamDB 是首个专为流数据设计的云原生流数据库,致力于为大规模数据流接入、存储、解决、散发等环节提供一站式治理,反对在动态变化的数据流上进行简单的实时剖析,并将在 IoT、互联网、金融等畛域的实时流数据分析和解决场景施展重要作用。

v0.7 的次要优化包含更高的稳定性、扩展性和可用性。在这一版本中,咱们不仅通过集成测试、jepsen 测试等伎俩发现并修复了大量问题,晋升了零碎的稳定性,同时带来了若干新个性和改良,包含:通明分区性能、全新运维管理工具、新版 hstreamdb-java、集群负载平衡算法重构,以及应用和部署方面改良等。

GitHub 我的项目地址:https://github.com/hstreamdb/hstream

新版本速览

新增通明分区性能,晋升 Stream 的扩大能力

在之前的版本中 HStreamDB 曾经可能反对存储和治理大规模的数据流(Stream),为了进一步晋升单个 Stream 的扩大能力和读写性能,并保证数据的程序性,HStreamDB v0.7 新增了通明分区性能:

  • 从扩展性的角度来看,当初一个 stream 外部可能蕴含多个分区(分区的数量是动态变化的),读写流量将通过外部的分区在集群中实现负载平衡,从而实现单个 Stream 的更高吞吐。
  • 从程序性的角度来看,每条写入的数据会携带一个由用户指定的 orderingKey,每个 orderingKey 概念上对应一个逻辑分区,同一个逻辑分区内的数据将依照写入的程序交付给同一个生产客户端,如下图所示。

值得注意的是,在 HStreamDB v0.7 里分区对于用户来说是齐全通明的,用户无需提前指定分区数量和分区逻辑,也不必放心分区的减少和缩小带来的数据重调配以及数据乱序的问题。只管从零碎实现角度来看,分区是解决单点瓶颈、晋升零碎程度扩大能力的无效伎俩;但从使用者的角度来看,把分区间接裸露给用户,不仅毁坏了下层的形象,而且大大增加了用户的学习,应用以及保护老本。通明分区在实现扩展性、保障程序性的同时,并没有将额定的复杂性裸露给用户,这将极大改善用户应用体验。

更具体的对于通明分区的介绍,请参考:HStreamDB Docs

改良集群负载平衡算法,进步调配效率

为了让集群内各节点的资源失去正当的利用,须要将客户端的读写流量尽可能平衡地调配到集群中的各节点上。HStreamDB v0.6 的负载平衡策略是基于节点的硬件资源负载状况来实现的,存在的次要问题是须要节点间互相通信替换多种硬件资源信息,包含 CPU、内存、网络等,同时这种形式存在肯定的滞后性,总体来看实现绝对简单,效率较低。

为此在 HSteamDB v0.7 中咱们基于一致性哈希算法从新实现新的负载平衡模块。一致性哈希是一个优雅而弱小的算法,被多种分布式系统所采纳,比方 DynamoDB。基于它的调配策略不仅使得负载平衡模块不必再实时保护硬件资源信息,而且外围算法更加简洁,也能很好应答集群成员变更的时候的重调配问题。同时它也很灵便,容易被扩大和优化,比方通过配置不同权重的形式应答异质节点。还有一些最新的钻研优化,比方 Google 的 Consistent Hashing with Bounded Loads.

新增 HStream Admin 工具,不便运维治理

咱们提供了一个新的管理工具,以不便用户对 HStreamDB 的保护和治理。HAdmin 能够用于监控和治理 HStreamDB 的各种资源,包含 Stream、Subscription 和 Server 节点。以前嵌入在 HStream SQL Shell 中的 HStream Metrics,现也已迁徙到了新的 HAdmin 中。简而言之,HAdmin 是为 HStreamDB 运维人员筹备的,而 SQL Shell 是为 HStreamDB 终端用户筹备的。

示例:

docker run -it --rm --name some-hstream-admin --network host hstreamdb/hstream:v0.7.0 bash
> hadmin --help
======= HStream Admin CLI =======

Usage: hadmin COMMAND

Available options:
  -h,--help                Show this help text

Available commands:
  server                   Admin command
  store                    Internal store admin command
> hadmin server status 
+---------+---------+-------------------+
| node_id |  state  |      address      |
+---------+---------+-------------------+
| 100     | Running | 192.168.64.4:6570 |
| 101     | Running | 192.168.64.5:6572 |
+---------+---------+-------------------+

具体的应用办法请参考:HStreamDB Docs

hstreamdb-java v0.7 公布,反对 HStreamDB v0.7 新性能

hstreamdb-java 是以后次要的 HstreamDB 客户端,它将始终同步反对 HSteamDB 的最新个性。本次 HStreamDB v0.7 的新性能也在 hstreamdb-java v0.7 中失去了反对,具体的,相比 hstreamdb-java v0.6,除了若干问题的修复,hstreamdb-java v0.7 次要蕴含以下值得关注的新个性和改良:

  • 新增了对 HStreamDB v0.7 通明分区性能的反对。
  • 改良了对集群的反对,新增了申请在可复原的失败状况下在集群中多个节点之间重试的能力。
  • 新增 BufferedProducer 接口和实现。思考到不同场景下用户会对写入的时延和吞吐有不同的要求,为了清晰起见,咱们将原来的 Producer拆分成了两个独立的 BufferedProducerProducer,其中 BufferedProducer 次要面向高吞吐的场景,Producer 次要用于低提早的场景。
  • BufferedProducer新增两种 flush 模式。原来的 Producer 在 batch 模式下只反对按数据条数触发 flush,当初 BufferedProducer 新增了 size-triggered 和 time-triggered 两种flush 模式,同时这三类触发条件能够同时起作用,可能更灵便地满足用户的应用需要。

hstreamdb-java GitHub 仓库:https://github.com/hstreamdb/…

简化部署与应用的流程,晋升应用体验

  • 为了不便用户疾速体验以及应用 HStreamDB,咱们现已减少基于 docker-compose 的疾速上手文档:https://hstream.io/docs/en/la…
  • 为了反对用户在多台机器上疾速部署和应用 HStreamDB 集群,咱们开发了专门的集群部署脚本,可通过以下链接下载 https://github.com/hstreamdb/…
  • 随着 HStreamDB 配置项的一直减少,原有的通过命令行选项传递配置的形式不太足够,因而咱们又引入了通过配置文件的形式来对立治理配置项,请参考:https://hstream.io/docs/en/la…

将来布局

在接下来的开发工作中,咱们将重点实现以下指标:

  • 继续晋升零碎的稳定性,达到生产可用
  • 继续改善零碎可用性和运维监控能力,加强安全性反对
  • 对现有的流解决引擎进行降级,带来更弱小的实时处理和剖析能力

敬请期待!

退出移动版