metad为什么要持久化保存session?

我们注意到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;
}
  1. 放 meta 是为了客户端能在 graph 服务异常的时候自动重连其他可用的 graph 服务, 选择持久化是怕如果存内存, 那么多 meta 情况下发生 leader change 会导致数据不一致
1 个赞