使用Hasura时能否利用Postgres主从架构实现读写分离?
问题回复
你部署的Postgres主从架构完全不是冗余无用的,哪怕暂时不用于读写分离,也能实现故障自动切换、数据多副本备份兜底,大幅提升数据库层的可用性,本身的部署价值很高。
你期望的读请求走从库、写请求走主库的读写分离能力,目前Hasura已经原生支持:
- 从v2.10.0版本开始,Hasura就新增了PostgreSQL只读副本的原生配置能力,并非只能填写一个主库连接URL
- 配置方式可以选择在控制台的数据库设置页面直接添加只读副本连接串,也可以通过指定格式的环境变量批量注入,比如针对默认主库的副本可以命名为
HASURA_GRAPHQL_DATABASE_URL_READ_REPLICA_0、HASURA_GRAPHQL_DATABASE_URL_READ_REPLICA_1以此类推 - 配置完成后Hasura会自动进行请求路由:所有GraphQL查询/订阅类读请求会自动转发到只读从库,所有变更类写请求、元数据修改请求会自动走主库,完全符合你期望的读写拆分要求
如果你的Hasura版本低于v2.10.0没有原生支持,也可以在数据库层前置Pgpool-II、HAProxy这类数据库代理中间件实现读写分离,Hasura直接连接代理层的统一访问地址即可,不需要额外修改Hasura侧配置。
关于功能迭代计划:原生读写分离目前已经是Hasura的正式稳定功能,官方后续的优化方向主要集中在更灵活的路由规则配置,比如支持自定义指定某类请求强制走主库、支持按副本负载情况动态分配流量等,相关优化已经在迭代排期内。
内容的提问来源于stack exchange,提问作者Laurent Michel
相关产品推荐
相关产品推荐

