只读从实例
应用场景
只读从实例是一种实现负载隔离的部署架构,一个主实例可以绑定多个只读从实例,实例与实例之间共享存储,但是计算资源是互相隔离的。ProtonBase 同时支持了数据库、数据仓库和搜索引擎的能力,在多个场景下可能有进行负载隔离的需求,比如:
混合负载
在业务发展初期,数据量和并发访问量都比较小的情况下,OLTP 和 OLAP 的query在一个 ProtonBase 实例可以轻松支持。随着业务飞速发展,数据量、并发度和分析复杂度逐渐增加,会不可避免的遇见不同类型的query产生负载冲突的问题。可能会因为一个大的分析SQL,影响高并发点查或者写入的线上业务。希望对 OLAP 和 OLTP 的场景进行负载隔离。
业务隔离
多个不同的业务依赖同一个Database,不同业务间希望做资源的完全隔离,降低业务出问题时的爆炸半径。比如一个业务发展迅速,查询的流量和复杂度提升造成系统整体负载提升,可能会造成其他高SLA的在线业务受影响。可以为不同业务设置不同实例做到查询之间相互隔离,互不影响,能有效的提高在线服务的整体稳定性。
读写隔离
在 ProtonBase 的数仓应用场景下,对于定期产出的上游数据,可能以批量的方式定时进行写入。特点是单次导入数据量、导入时间长。与此同时,用户可能对此进行 Ad - Hoc 的查询。受限于对 SQL 的熟悉程度,用户可能会写出不合理的SQL导致资源被大量占用造成批写入任务失败。
基本概念
目前 ProtonBase 是通过对Database设置 Primary / Secondary 状态来实现主实例 和 只读从实例 的区分。Primary 和 Secondary 都是代表的Database的状态。
Primary Database
可以对Database进行读操作和写操作。
Secondary Database
可以对Database进行读操作。
主实例
绑定了Primary Database的实例被称作主实例。
只读从实例
至少绑定了一个 Secondary Database 的实例被称作只读从实例。一个只读从实例可以同时绑定多个 Secondary 的 Database,但不支持绑定任何 Primary Database。
操作指南
- 创建一个新的Warebase。Unit个数可以按需指定。一般而言,只读从实例的Unit个数需要小于等于主实例的Unit个数。
- 从控制台左侧的“数据库”,找到要绑定为 Secondary 的Database
- 通过 Database 右侧的操作扩展按钮进行“绑定”操作
- 将 Database 标记为 Secondary 的角色绑定到新创建的Warebase上。绑定成功后,新建的实例即为 只读从实例
- 等待绑定成功。绑定成功后,可以看到这个 Database 的 Primary 和 Secondary 的角色所在的Warebase实例。
常见问题
- 如何判断当前的实例是主实例还是只读实例
通过如下命令进行判断,返回t代表当前所在的 Database 是 Secondary 角色
plutus=> select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 行记录)
- 权限信息是否会自动同步到只读实例
只读实例的所有的 Database/schema/table 的权限,都会follow主实例的权限。
- 如何判断只读实例相对主实例的延迟
在只读从实例上执行如下命令可以判断主从实例的延迟:
select now()-pg_last_xact_replay_timestamp() as replication_lag;
replication_lag
-----------------
00:00:01.0009
(1 行记录)