全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper Observer与分层架构

Observer扩展和分层架构设计。

Observer扩展架构

Observer特点

特性说明
不参与投票不影响选举和写性能
只同步数据接收Leader提议
处理读请求扩展读能力
可跨地域不增加投票延迟

Observer配置

properties
# observer节点zoo.cfg
peerType=observer
server.1=host1:2888:3888
server.2=host2:2888:3888
server.3=host3:2888:3888
server.4=host4:2888:3888:observer  # Observer节点

跨地域架构

Java
主数据中心(3节点集群)
  Leader + Follower + Follower
          ↓ 数据同步
远程数据中心
  Observer × N → 本地客户端就近访问

Observer优势

优势说明
扩展读能力可部署多个Observer
降低延迟跨地域就近访问
不影响写性能不参与投票
成本低不需要高性能硬件

Observer限制

限制说明
不能Leader不参与选举
写请求延迟写请求仍需访问主集群
数据同步延迟跨地域存在网络延迟

Observer适用场景

场景说明
跨地域部署远程数据中心
读请求密集读多写少场景
成本控制低硬件成本扩展

提示:Observer适合读密集和跨地域场景。

集群分层架构

分层设计

Java
/系统层
  /admin       <- 系统配置(运维管理)
  /monitor     <- 监控数据

/业务层
  /service-a   <- 业务A服务
  /service-b   <- 业务B服务

/租户层
  /tenant-1    <- 租户1数据
  /tenant-2    <- 租户2数据

权限边界设计

层级管理者权限范围
系统层运维团队全部权限cdrwa
业务层业务团队本业务范围crwa
租户层租户用户本租户范围rw

ACL配置示例

Java
// 系统层ACL
ACL systemACL = new ACL(Perms.ALL, new Id("digest", "admin:pwd"));
zk.create("/admin", null, Collections.singletonList(systemACL), ...);

// 业务层ACL
ACL businessACL = new ACL(Perms.ALL, new Id("digest", "team-a:pwd"));
zk.create("/service-a", null, Collections.singletonList(businessACL), ...);

// 租户层ACL
ACL tenantACL = new ACL(Perms.READ | Perms.WRITE, new Id("digest", "tenant1:pwd"));
zk.create("/tenant-1", null, Collections.singletonList(tenantACL), ...);

分层隔离效果

效果说明
数据隔离各租户数据独立
权限隔离不同角色不同权限
误操作隔离操作不跨层影响

命名空间规划

Java
命名规范:
/层级/业务/类型/节点

示例:
/config/db/connection  <- 配置层数据库连接
/services/order/v1     <- 服务层订单服务
/tenant/app1/data      <- 租户层应用数据

提示:分层+ACL实现租户级数据隔离和权限控制。

读写分离策略

读写分离架构

text
写请求 → Leader(集中处理)
读请求 → Follower/Observer(分散处理)

客户端路由策略

text
// 根据请求类型选择节点
if (request.isWrite()) {
    // 写请求发给Leader
    String leaderAddr = getLeaderAddress();
    zk = connect(leaderAddr);
} else {
    // 读请求就近访问
    String nearestAddr = getNearestNode();
    zk = connect(nearestAddr);
}

负载均衡策略

策略说明
随机随机选择Follower
轮询依次访问各Follower
最小延迟选延迟最低节点
权重根据节点能力分配

就近访问配置

text
// 客户端配置连接多个节点
CuratorFrameworkFactory.builder()
    .connectString("leader:2181,follower1:2181,follower2:2181")
    .build();

// Curator自动选择就近节点读

读写分离效果

效果说明
写集中Leader处理所有写请求
读分散Follower/Observer处理读请求
延迟降低读请求就近访问
  • 吞吐提升 | 读请求分散提升整体吞吐 |

强一致读

text
// 需要强一致读访问Leader
zk.sync("/path");  // 同步后读取
// 或直接访问Leader节点

注意:强一致读需求仍需访问Leader。

要点总结

  • Observer不参与投票,无限扩展读能力
  • Observer配置peerType=observer和:observer后缀
  • 分层架构:系统层、业务层、租户层隔离
  • ACL实现层级权限边界控制
  • 读写分离:写Leader、读Follower/Observer -就近访问降低读延迟
  • 强一致读需访问Leader或sync同步

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper SASL与SSL安全配置
下一篇 → ZooKeeper多集群与容灾架构
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库