Phoenix实战 | Phoenix客户端进化之由重到轻
Phoenix重客户端
Phoenix是HBase之上的SQL层,它为HBase赋予NewSQL的特性,支持大多数的标准SQL特性,并提供JDBC的访问接口,使得我们在应用程序中能够方便的集成使用。其架构如图:
从其架构来看,Phoenix结构上划分为客户端和服务端两部分:
客户端包括应用程序开发,将SQL进行解析优化生成QueryPlan,进而转化为HBase Scans,调用HBase API下发查询计算请求,并接收返回结果;
服务端主要是利用HBase的协处理器,处理二级索引、聚合及JOIN计算等。
这种架构我们称之为重客户端架构,也是目前Phoenix使用最广泛的方式,但是这种方式存在一些使用上的缺陷:
应用程序与Phoenix core绑定使用,需要引入Phoenix内核依赖,目前一个单独Phoenix重客户端集成包已达120多M;
运维不便,Phoenix仍在不断优化和发展,一旦Phoenix版本更新,那么应用程序也需要对应升级版本并重新发布;
仅支持Java API,其他语言开发者不能使用Phoenix。
Phoenix轻客户端
针对重客户端使用问题,Phoenix社区引入了轻客户端架构,如图所示:
轻客户端架构将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上。
总结与展望
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
©著作权归作者所有:来自51CTO博客作者mb5fdb0a6739180的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- flex新闻客户端
- HBase解读 | 阿里云HBase SQL(Phoenix)服务深度解读
- 打造最可靠的自动驾驶基础架构
- 自动驾驶思考:基础架构篇
- Apache Doris : 一个开源 MPP 数据库的架构与实践
- 防劣化机制、向前兼容...今日头条前端架构设计解读
- 聚焦ARM科技论坛:Micrium与Xilinx合作共赢
- 【DB宝45】MySQL高可用之MGR+Consul架构部署
- 软件架构-zookeeper集群部署与快速入门