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的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. flex新闻客户端
  2. HBase解读 | 阿里云HBase SQL(Phoenix)服务深度解读
  3. 打造最可靠的自动驾驶基础架构
  4. 自动驾驶思考:基础架构篇
  5. Apache Doris : 一个开源 MPP 数据库的架构与实践
  6. 防劣化机制、向前兼容...今日头条前端架构设计解读
  7. 聚焦ARM科技论坛:Micrium与Xilinx合作共赢
  8. 【DB宝45】MySQL高可用之MGR+Consul架构部署
  9. 软件架构-zookeeper集群部署与快速入门

随机推荐

  1. java的学习方法(转自黑马程序员)
  2. ArcGIS JS API For JavaScript实现类台风
  3. java线程池使用场景和使用方法较详细文摘
  4. 7-Flink的分布式缓存
  5. 【笔记】上传图片和音频
  6. java中多线程安全问题产生&解决方案——
  7. 面向 Java 开发人员的 Scala 指南:包和访
  8. 01500105_MLDN-魔乐科技-李兴华【Java核
  9. java程序运行机制和jvm
  10. 小弟申请当版主!