he3proxy

module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2023 License: Apache-2.0

README

LICENSE

Go Report Card

He3Proxy

简介

He3Proxy是中移(苏州)软件技术有限公司基于PG协议 专为He3DB 打造的高性能数据库代理项目,采用Go语言开发, He3Proxy为He3DB 提供读写分离、负载均衡、连接池管理、 读一致性等基础能力,让用户像使用单机一样使用He3DB 集群,并提升集群整体吞吐量、提高节点资源利用率, 同时兼具He3DB 集群管理功能,如集群监控、灰度升级、数据分层存储、动态扩缩容等,助力He3DB 实现serverless。

同时He3Proxy也兼容其他基于PG协议 的主从架构数据库,可作为其数据库中间件使用。

架构图

架构图

集群部署图

集群部署图

功能介绍

  • 支持PG协议连接。
  • 支持SQL读写分离。
  • 支持连接池管理,可复用已有后端数据库链接,减少建立链接时的性能损耗。
  • 支持多个slave,slave之间通过权值进行负载均衡。
  • 支持多个slave,slave之间通过节点负载情况进行负载均衡。
  • 支持显式事务内先读操作的负载均衡。
  • 支持强制读主库。
  • 支持所有请求均主库执行。
  • 支持配置proxy到后端数据库的最大连接数限制。
  • 支持SQL黑名单机制。
  • 支持通过配置hba文件,实现数据库安全访问权限控制。
  • 支持热加载配置文件,动态修改He3Proxy配置项。
  • 支持session读一致性,并根据节点负载情况进行负载均衡。
  • 支持客户端链接维度的tracing数据采集(jaeger)。
功能演示

功能演示

安装部署

	1. 安装Go语言环境(请使用最新版)
	2. git clone https://gitee.com/he3db/he3proxy.git $GOPATH/src/gitee.com/he3db/he3proxy
	3. cd $GOPATH/src/gitee.com/he3db/he3proxy
	4. source ./dev.sh
	5. make
	6. 设置配置文件
	7. 运行he3proxy
	   ./bin/he3proxy -config=./etc/he3proxy.yaml -hba=./etc/hba.conf -log-level=debug

Goland打包Linux二进制文件配置可参考下图

Goland打包配置

配置文件说明

he3proxy.yaml

启动参数说明
postgres@he3db:~/he3proxy$ ./bin/he3proxy -h
    __  __    _____       ____
   / / / /__ |__  /      / __ \_________  _  ____  __
  / /_/ / _ \ /_ <______/ /_/ / ___/ __ \| |/_/ / / /
 / __  /  __/__/ /_____/ ____/ /  / /_/ />  </ /_/ /
/_/ /_/\___/____/     /_/   /_/   \____/_/|_|\__, /
                                            /____/
Usage of ./he3proxy:
  -cancel-request
        the flag of save connection id and secret for cancel request
  -config string
        He3Proxy config file (default "./etc/he3proxy.yaml")
  -conn-pool
        the switch of connection pool, if true means use backend connection pool (default true)
  -cpu-profile
        analysis cpu profile
  -db-mode string
        switch proxy work mode [mysql|postgresql], default postgresql (default "postgresql")
  -hba string
        He3Proxy hba config file (default "./etc/hba.conf")
  -he3proxy
        the flag of he3proxy, if true means tell backend current connection is by he3proxy
  -keep-conn
        keep use current conn, and not release util conn release (default true)
  -log-level string
        log level [debug|info|warn|error], default set by configuration
  -max-cpu int
        the GO MAX PROCS, default sys logical cpu nums
  -metrics
        the flag of collection metrics, if true means work with prometheus
  -opentracing
        switch of opentracing (default true)
  -pprof
        the switch of pprof
  -pyroscope
        the switch of pyroscope
  -readonly
        improve read performance by not release conn
  -server-version string
        set backend server version for pg, default 14.2 (default "14.2")
  -simple-parse
        the flag of use simple parse (lex), if false means will use crdb parse (AST) (default true)
  -single-session
        the switch of single session, if true means proxy work without loadbalance
  -tracer-provider-url string
        jaeger collector url (default "http://localhost:14268/api/traces")
  -v    the version of He3Proxy

鸣谢

  • 感谢kingshard 作者Fei Chen,He3Proxy以kingshard作为基础框架,在其之上进行定制化改造开发。
  • 感谢CockroachDB 团队及postgresql-parser 的作者auxten, He3Proxy在SQL解析层参考使用了项目postgresql-parser,在hba登录鉴权管理等方面参考了CockroachDB的实现。
  • 感谢TiDB for PostgreSQL 作者神州数码团队,He3Proxy在前后端握手、协议处理方面参考了TiDB for PostgreSQL的实现。
  • 感谢PG Go语言驱动pgx 团队,He3Proxy在前后端链接管理、协议等方面使用了pgx团队提供的pgconnpgproto3 等工具。
  • 感谢其他第三方依赖包对He3Proxy提供的帮助,有你们使开发更高效。
  • 感谢以下开源爱好者 为He3Proxy做出的贡献。

贡献说明

欢迎参与并贡献He3Proxy, 请查看Contribute 了解详细信息。CLA提供更多贡献信息。

RoadMap

  • 支持根据冷热数据分布情况进行读节点选择
  • 整体性能调优,目标性能损耗15%以内
  • 支持注册中心(优先etcd)
  • 支持性能监控,如SQL执行时长、节点负载等
  • 支持对He3DB的管理功能,如节点扩缩容、故障切换等
  • 支持He3DB集群灰度升级
  • 支持流量管控,愿景DB订购参数不再是CPU、Mem、Disk而是所需的TPS、QPS
  • 支持Web页面管理中间件功能

He3Proxy用户列表

注意: 当前为非release版本,不建议生产使用!

社区

项目地址https://gitee.com/he3db/he3proxy

欢迎加入slack 进行沟通交流~

更多技术细节欢迎查阅技术文章专栏

License

He3Proxy采用Apache 2.0协议,相关协议请参看目录

Directories

Path Synopsis
cmd
core
Package query provides functions to transform queries.
Package query provides functions to transform queries.
postgresql
hba
Package hba implements an hba.conf parser.
Package hba implements an hba.conf parser.
proxy
Package sqltypes implements interfaces and types that represent SQL values.
Package sqltypes implements interfaces and types that represent SQL values.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL