我们注意到metad会持久化保存session, 相关的代码pr是:
Support sessions saving by metad Support sessions saving by metad (#139) · vesoft-inc/nebula@5ab5b1e · GitHub
我们观察到我们的某个集群在大量客户端并发查询是metad频繁写磁盘,持久化的内容跟session信息相关。
问题:
1 这里的session都包含什么信息?
2 为什么metad需要持久化这些session?可否metad只在内存中保持这些信息,这样当集群重启,这些session信息全丢掉也无关紧要?
struct Session {
1: common.SessionID session_id,
2: common.Timestamp create_time,
3: common.Timestamp update_time,
4: binary user_name,
5: binary space_name,
6: common.HostAddr graph_addr,
7: i32 timezone,
8: binary client_ip,
9: map<binary, common.Value>(cpp.template = "std::unordered_map") configs,
10: map<common.ExecutionPlanID, QueryDesc>(cpp.template = "std::unordered_map") queries;
}
- 放 meta 是为了客户端能在 graph 服务异常的时候自动重连其他可用的 graph 服务, 选择持久化是怕如果存内存, 那么多 meta 情况下发生 leader change 会导致数据不一致
1 个赞