非正式全面解析NebulaGraph中Session管理
NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Session 管理。由于本文设定为非正式的 Session 讲解,所以本文主要分为理论和实操部分,在实操部分主要摘录了论坛用户的一些关于 Session 的理解,以及本人对 Session 相关问题的解答。 客户端交互流程
在之前的源码解读系列的客户端部分,我们讲过 Session 相关的知识点,这里来回顾下。
通过下图你能了解客户端和服务端连接时,背后的工作原理:
简单来说,整个 workflow 由 ConnectionPool、Session、Connection 构成,用户通过 Session 和计算引擎进行交互,但真正和计算引擎 graphd 发生数据处理关系的是连接池当中的 Connection。 Connection Pool
在连接池初始化阶段,用户使用 Session 之前需要先创建并初始化一个连接池 ConnectionPool,连接池会在初始化时会对用户指定的 NebulaGraph 服务所在地址建立连接 Connection。如果在用集群部署方式部署了多个 Graph 服务,连接池会 采用轮询的策略来平衡负载 ,对每个地址建立近乎等量的连接。
连接池如何管理连接 Connection 呢?连接池内维护了两个队列, 空闲连接队列 idleConnectionQueue 和 使用中的连接队列 activeConnectionQueue,连接池会定期检测过期空闲的连接并将其关闭。这两个队列在增删元素的时候会 通过读写锁来确保多线程执行的正确性 。当 Session 向连接池请求连接时,会检查空闲连接队列中是否有可用的连接,如果有则直接返回给 Session 供用户使用;如果没有可用连接并且当前的总连接数没有超过配置中限定的最大连接数 maxConnSize,则新建一个连接给 Session;如果已经到达了最大连接数的限制,返回错误。
大概流程和下面流程图类似:
一般来说,只有在客户端程序退出时才需要关闭连接池,在关闭时池中所有的连接都会被断开。 Session
客户端会话 Session 通过连接池 ConnectionPool 生成,用户需要提供用户密码进行校验,在校验成功后用户会获得一个 Session 实例,并通过 Session 中的连接与服务端进行通信。最常用的接口是 execute() ,如果在执行时发生错误,客户端会检查错误的类型。如果是网络原因或者和 session 通信的 graph 服务 down 掉,客户端会 自动重连 ,尝试绑定一个可用的连接重发请求。
需要注意的是, 一个 Session 不支持被多个线程同时使用 ,正确的方式是用多个线程申请多个 Session,每个线程使用一个 Session。Session 被释放时,其持有的连接会被放回到连接池的空闲连接队列 idleConnectionQueue 中,以便于之后被其他 Session 复用。 Connection
连接 Connection 每个连接实例都是等价的,可以被任意 Session 持有。 这样设计的目的是这些连接可以被不同的 Session 复用 ,减少反复开关 Transport 的开销。连接会将客户端的请求发送到服务端并将其结果返回给 Session。 社区用户实践
这里主要收录了用户在使用连接池、Session 遇到的比较有代表性的问题。 如何获取多个 Session
可通过 https://discuss.nebula-graph.com.cn/t/topic/3765 查看完整的交流对话。
Sharry2021gu 提问:连接池怎么会有多个 Session 呢?用来测试并发性能。像下面的 pipeline 里怎么才能获取不同的 session?
答:因为你给 Session 包了一层,你直接用 java-client 的 ConnectionPool 拿 Session 就可以了,ConnectionPool 是支持多线程调用 getSession 的接口。 对 Session 管理的理解
下面部分收录社区用户 wuyou 对 Session 管理的理解,你可以通过 https://discuss.nebula-graph.com.cn/t/topic/8777 了解全部内容。这块的内容同上面客户端交互流程有所重叠,不过都是需要注意的使用点。 NebulaPool 的 maxConnSize 是最大连接数,一个 Session 只能使用一个连接,可以简单地认为 maxConnSize 就是这个 NebulaPool 里面支持的最大 Session 数量,适当调整就行了; NebulaPool 使用常规的单例就行,应用程序结束时记得关闭就行了。Session 的话可以在 graph 配置中设置 session_idle_timeout_secs 让其自动销毁就行了; Session 的创建和销毁是有开销的,会有五次 IO 交互:Client 和 Graphd 会有 3 次 IO 交互以及 Graphd 和 Metad 有 2 次 IO 交互。 Client 和 Graphd IO 交互:第一次是检测连接是否是正常的;第二次是做一次认证获取 sessionId;第三次是 USE SPACE; Graphd 和 Metad IO 交互:第一次是生成 sessionId;第二次是获取 space 信息。 所以,一般情况下不建议每次请求都从 pool getSession,execute 之后再 release,这会有性能开销,而且还会在服务端生成很多只用一次的 Session。 Session 是线程不安全的,多个线程使用同一 Session 会直接报错。应对多线程可以自己维护一份 Session 列表。如果是多个 space 的话,可以针对每个 space 维护一份 session 列表。这一点目前需要自己实现,暂时没有官方的好的方式。 自维护 Session
wuyou 提问:官方说需要自己维护 Session 是什么意思,感觉 NebulaPool 已经在维护了,应用层只需要每次直接 getSession 就完事儿了,每次执行完 nGQL 之后 session.release 释放掉 Session,让其回到 pool 中就可以。
答:这里解释下如何理解需要自己维护 Session。NebulaPool 维护的只是 Connection,Connection 是无状态的。Session 的维护是指 多线程使用的情况下复用 Session 做多次查询 ,比如:Session 内部分 sessionInUse 和 idleSession 队列,新建的 Session 放 idle 队列,用的时候起一个线程持有这个 Session 并且移到 inUse 队列,用完之后不用释放 Session 放回 idleSession 供下次使用。 Connection 的释放
wuyou 提问:放回连接池的 Connection 什么时候会被释放?
答:有两种方式来释放 Connection。第一种,手动关闭连接池时里面的连接会被释放。另外一种是,连接池里的对象池通过 setSoftMinEvictableIdleTimeMillis() 自动定期释放。 空闲会话超时设置
可通过 https://discuss.nebula-graph.com.cn/t/topic/9037 查看完整的交流对话。
Ian 提问:设置空闲会话超时时间为 8 小时,是以 SHOW SESSIONS 结果的 update_time 来加 8 小时吗?如果一直在用,就不会过期?
答:是 udpate_time + 8H。使用过程中 session 的 idle time 会更新,如果你一直在用会话就不会过期。
谢谢你读完本文 (/// ///)
要来近距离体验一把图数据库吗?现在可以用用 NebulaGraph Cloud 来搭建自己的图数据系统哟,快来节省大量的部署安装时间来搞定业务吧~ NebulaGraph 阿里云计算巢现 30 天免费使用中~
想看源码的小伙伴可以前往 GitHub 阅读、使用、(^з^)- star 它 -> GitHub:https://github.com/vesoft-inc/nebula
张本智和伊藤美诚没有离开中国!汇合石川佳纯,备战澳门公开赛我在头条搞创作第二期张本智和伊藤美诚没有离开中国,而是备战即将开始的澳门公开赛北京时间2022年10月14日星期五消息。成都世乒赛,有惊无险。中国女队面对日本队,顺风顺水,几乎不给
王卫可能不用道歉了负面新闻缠身时,顺丰前三季度净利润预增超10倍,能否拯救股价?去年,因为业绩暴雷,顺丰控股董事长王卫公开道歉今年,因为快递丢失赔付纠纷等事件,顺丰控股频频陷入舆论麻烦从去年到昨天,顺丰控股股价一路下滑,从去年初的124元,跌到45元现在,一份
权益类理财过冬三季度3只跌幅超10,下半年新发数为0记者胡颖君三季度,市场避险情绪升温,上证综指由二季度末的3398点跌至9月末的3024点,跌幅超过11。受累于股票市场震荡下行,理财产品破净率显著攀升。Wind数据显示,理财子公司
海天失火,殃及酒鬼酒出品子弹财观作者行者编辑蛋总美编倩倩最近,身处舆论漩涡的海天味业,其股价在节后崩盘的状况,也在投资人和消费者的预料之中,但是其他企业尤其是酒水食品类企业的股价也跟着崩盘,就让人有些
买入2300万,中国巴菲特段永平加码!腾讯加倍回购在等待与煎熬中坚守价值。段永平曾经说过,当一个人非要把黄金按照铜的价格卖给你的时候,你只需要判断那是真黄金就好。最近,腾讯接连击破了300港元以及250港元两道关口。为了应对股价的
H6插混上市,哈弗的新能源好戏拉开大幕2022年的新能源市场有多火爆?8月份,作为传统车企的代表,已经全面停产燃油车的比亚迪,卖出了惊人的174915辆,同比增长155。2,以混动DMi挑大梁,尤其是宋PRO和宋PLU
银保监会选择正规机构办理贷款,警惕非法中介或不法行为侵害权益大河财立方消息10月14日,银保监会发布关于警惕贷款中介不法行为侵害的风险提示。贷款市场上,有一些非法中介假冒银行名义,打着正规机构无抵押无担保低息免费洗白征信等虚假宣传的旗号诱导
今日A股大涨55点,还能继续大涨吗?接下来行情会这样走今天是10月14日,A股市场收盘了,今天的A股让所有人都非常的开心,这种开心不仅仅是因为股票的上涨,而是A股已经连续持续三天的反弹,今天A股继续大涨55点,这才是大家非常开心的一件
国际货币基金组织总裁新兴市场和发展中国家面临三重打击国际货币基金组织(IMF)总裁格奥尔基耶娃10月13日表示,新兴市场和发展中国家正受到美元走强借贷成本高企和资本外流三重打击,债台高筑的国家受冲击尤其沉重。格奥尔基耶娃当天在IMF
上海青浦曲水园景点介绍,一起来看看,了解它的古典精致上海青浦曲水园的景点有仪门,重修后的砖雕门楼荷花池,灵动多姿喜雨桥,非常精致充满诗意小飞来,又称大假山夕阳红半楼,建在假山上的楼得月轩,近水楼台先得月有觉堂,历史悠久睡莲池,荷花池
为什么脑梗总是发生在清晨大家好,我是心脑血管医生吕仕超,很多人好奇为什么脑梗总是发生在清晨,今天我来跟大家讲一讲原因究竟是什么?首先发生脑梗大部分都与高血压有关,血压控制不好就容易发生脑梗,而晚上睡着以后
小白进股市,好奇又惶恐在头条上找了个券商,谈妥佣金万分之1。05,开通账户异常顺利,省吃俭用省下来的四万块钱,又朝别人借了五千块钱,今天正式开搞。正式开搞前,也观察些了日子,资金量小,又穷,不敢搞大,说
中国股市数字货币未来发展潜力趋势较强的三大龙头股发展前景数字人民币作为金融IT行业的革命性创新试点项目,正在重构整个金融支付生态,带来更长期的产业扩张逻辑。从长逻辑来看,数字人民币将成为C端B端G端的数字新基建,构建十四五数字经
一生读懂张爱玲1hr因为爱过,所以慈悲因为懂得,所以宽容。对于三十岁以后的人来说,十年八年不过是指缝间的事,而对于年轻人而言,三年五年就可以是一生一世。有两种女人很可爱,一种是妈妈型的,很体贴人
早安语录!(元气满满)早安!朋友!成功,是熬出来的,本事,是逼出来的,废铁熬过了锤打,才能成钢梅花熬过了寒冬,才能绽放熬,虽然很苦,但却是沉淀,愿我们都是苦尽甘来的人。人只要拥有正能量,你就能够战胜烦恼
农商银行改革的思考随着经济社会的发展,我国商业银行逐步发展壮大,资产规模从1999年的6万亿元增长到2018年的3万亿元,占中国银行业金融机构总数的41。6,稳居银行业金融机构第一阵营。商业银行行业
房地产救市政策思路的彻底转向,对购房者意味着什么?在中国房地产市场,调控紧缩与政策宽松是如影随形的孪生子。楼市过热即紧缩,下行必救市,救市必上涨已经成为惯性思维。在本轮特别又凛冽的地产寒冬里,昔日屡试不爽的经验套路纷纷失效,从开发
50万现金被烧焦!银行人员用大头针抢救不敢喘气!近日,江苏苏州吴江区一家再生资源企业遭遇火灾,50万元左右的现金被烧焦。企业负责人当即到银行寻求帮助,鉴定清点,兑换火烧币。10月11日,记者从中国人民银行(以下简称人民银行)苏州
19家银行换帅!最年轻行长43岁上市城农商行主要高管密集变动的趋势仍在继续。据统计,截至10月7日,今年以来已有厦门银行郑州银行杭州银行江苏银行青岛银行北京银行九江银行晋商银行渝农商行等19家上市城农商行董事长或
关于脱发头发掉得厉害?原因可能在此掉头发,确实是一件很令人头痛的事情。每天不管是梳头,还是洗头,洗脸盆地面上都会洒落一地的头发。掉的是成年人的发,伤的是打工人的心。精神焦虑工作压力情绪抑郁等,都会导致头发进入飘洒期
国产汽车终于起势,长城汽车为什么掉队了?导读两年前魏建军对长城汽车的前景发出了灵魂拷问,但转型两年后,长城汽车似乎仍然没有找到自身销量下滑的真正原因。今年9月长城汽车整体销量逆市下滑,将长城带到了自主品牌一线梯队的边缘。
电网为基,科陆电子储能行业高景气,美的入主助力发展新阶段(报告出品方分析师东亚前海证券李子卓高嘉麒)1。电网为基,储能造就新篇章1。1。领先能源领域的综合服务商公司是国内领先的能源领域的综合服务商。主营业务方面,公司主要以能源的发配用储