Phoenix客户端进化之由重到轻

简介: Phoenix重客户端 Phoenix是HBase之上的SQL层,它为HBase赋予了NEWSQL的特性,支持了大多数的标准SQL特性,并提供了JDBC的访问接口,使得我们在应用程序中能够方便的集成使用。

Phoenix重客户端

Phoenix是HBase之上的SQL层,它为HBase赋予了NEWSQL的特性,支持了大多数的标准SQL特性,并提供了JDBC的访问接口,使得我们在应用程序中能够方便的集成使用。其架构如图:

image

从其架构来看,Phoenix结构上划分为客户端和服务端两部分:

  • 客户端包括应用程序开发,将SQL进行解析优化生成QueryPlan,进而转化为HBase Scans,调用HBase API下发查询计算请求,并接收返回结果;
  • 服务端主要是利用HBase的协处理器,处理二级索引、聚合及JOIN计算等。

这种架构我们称之为重客户端架构,也是目前Phoenix使用最广泛的方式,但是这种方式存在一些使用上的缺陷:

  1. 应用程序与Phoenix core绑定使用,需要引入Phoenix内核依赖,目前一个单独Phoenix重客户端集成包已达120多M;
  2. 运维不便,Phoenix仍在不断优化和发展,一旦Phoenix版本更新,那么应用程序也需要对应升级版本并重新发布;
  3. 仅支持Java API,其他语言开发者不能使用Phoenix。

Phoenix轻客户端

针对重客户端使用问题,Phoenix社区引入了轻客户端架构,如图所示:

image

轻客户端架构将Phoenix分为三部分:

  • 瘦客户端是用户最小依赖的JDBC驱动程序,与Phoenix依赖进行解耦,支持Java、Python、Go等多种语言客户端;
  • QueryServer是一个单独部署的HTTP服务,接收轻客户端的RPC请求,并将SQL转发给Phoenix Core进行解析优化执行;
  • Phoenix Server与重客户端架构相同。

轻客户端JDBC连接串格式为:

jdbc:phoenix:thin:url=http://<server-hostname>:<port>[;option=value...]

其中

server-hostname:为QueryServer的主机名或IP
port:为QueryServer的端口号,默认为8765

Phoenix还提供了轻客户端命令行工具sqlline-thin.py,可以方便的进行测试使用。

QueryServer介绍

QueryServer基于Calcite的Avatica组件实现,内部嵌入了独立的Jetty HttpServer,支持Protobuf和JSON两种RPC传输协议,其中Protobuf是默认协议,提供比JSON更高效的通信方式。

由于QueryServer是无状态的,可以部署在HBase集群的每台RegionServer上,通过HTTP负载均衡器将多个客户端的请求分发在多个QueryServer上。

image

总结与展望

Phoenix轻客户端使业务端应用程序更加轻薄,业务开发人员无需再花费精力在底层Phoenix升级及运维,更加专注于业务本身,同时提供给非Java开发人员使用Phoenix的一种途径。

相比较重客户端,轻客户端实现增加了RPC请求链路,在性能上略有降低,阿里云HBase团队后续会进一步优化轻客户端读写性能。


阿里云HBase2.x版本已经支持Phoenix5.x的轻客户端模式,详细使用请参考:
产品入口:
  链接:https://cn.aliyun.com/product/hbase

云HBase SQL服务使用文档
  链接:https://help.aliyun.com/document_detail/104059.html?spm=a2c4g.11174283.6.606.11fc3c2ewByoQn

参考文献

https://phoenix.apache.org/server.html

目录
相关文章
|
分布式数据库 Hbase
HBase StochasticLoadBalancer组件介绍
HBase StochasticLoadBalancer组件介绍。
3116 0
|
存储 前端开发 JavaScript
【面试题】面试官问:如果有100个请求,你如何使用Promise控制并发?
【面试题】面试官问:如果有100个请求,你如何使用Promise控制并发?
325 0
|
9月前
|
关系型数据库 分布式数据库 PolarDB
通过 PolarDB for PostgreSQL 实现一体化的 HTAP 能力
阿里云 PolarDB for PostgreSQL作为一款领先的云原生关系型数据库,利用向量化引擎+列存索引等技术实现了 OLTP 和 OLAP 的一体化。本方案为您展示如何通过 PolarDB for PostgreSQL 来实现一体化的 HTAP 能力。
通过 PolarDB for PostgreSQL 实现一体化的 HTAP 能力
|
10月前
|
机器人 应用服务中间件 API
轻松集成私有化部署Dify文本生成型应用
Dify 是一款开源的大语言模型应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能快速搭建生产级生成式 AI 应用。通过阿里云计算巢,用户可以一键部署 Dify 社区版,享受独享的计算和网络资源,并无代码完成钉钉、企业微信等平台的应用集成。本文将详细介绍如何部署 Dify 并将其集成到钉钉群聊机器人和企业微信中,帮助您轻松实现 AI 应用的定义与数据运营,提升工作效率。
5026 65
轻松集成私有化部署Dify文本生成型应用
|
Prometheus 监控 Cloud Native
在 HBase 集群中,Prometheus 通常监控哪些类型的性能指标?
在 HBase 集群中,Prometheus 监控关注的核心指标包括 Master 和 RegionServer 的进程存在性、RPC 请求数、JVM 内存使用率、磁盘和网络错误、延迟和吞吐量、资源利用率及 JVM 使用信息。通过 Grafana 可视化和告警规则,帮助管理员实时监控集群性能和健康状况。
|
Shell
在Shell编程中,进程替换
在Shell编程中,进程替换
301 3
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
|
存储 分布式计算 NoSQL
HBase和Cassandra的分布式架构深度对比
HBase和Cassandra几乎都是一个时候出现的,都是在2010年成为Apache的顶级项目,不过如果我们细品其内部机制,我们会发现其实两者是完全不同的架构风格。HBASE起源于Google BigTable,几乎遵从了BigTable论文的大多数架构设计。Cassandra则是采纳了BigTable的数据模型,同时吸收了Amazon Dynamo的分布式设计。因此从存储结构模型的微观上看,HBASE和Cassandra在单点存储数据的机理是类似的,但是从分布式架构的宏观上看,两者则大相径庭。
HBase和Cassandra的分布式架构深度对比
Flutter 进度条
Flutter 进度条,详细介绍 Flutter 提供了多种类型的进度条,可以用于展示应用程序中的长时间运行任务的进度。进度条可以是线性或圆形,可以显示确定进度或不确定进度,可以按照应用程序的主题进行自定义。
318 0
|
分布式计算 资源调度 安全
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
深入理解Java GSS(含kerberos认证及在hadoop、flink案例场景举例)
715 0