加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

京东到家订单查询服务演进

发布时间:2019-08-31 04:15:53 所属栏目:建站 来源:张淦
导读:副标题#e# 背景 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况。京东到家的订单数据存储在Mysql中,但显然只通过DB来支撑大量的查询是不可取的,同时对于一些

ES集群的分页查询支持from和size参数,查询的时候每个分片必须构造一个长度为from+size的优先队列,然后回传到网关节点,网关节点再对这些优先队列进行排序找到正确的size个文档。假设在一个有6个主分片的索引中,from为10000,size为10,每个分片必须产生10010个结果,在网关节点中汇聚合并60060个结果,最终找到符合要求的10个文档。由此可见,当from足够大的时候,就算不发生OOM,也会影响到CPU和带宽等,从而影响到整个集群的性能。所以应该避免深分页查询,尽量不去使用。

3. FieldData与Doc Values

Fielddata:线上查询出现偶尔超时的情况,通过调试查询语句,定位到是跟排序有关系。排序在es 1.x版本使用的是fielddata 结构,fielddata占用的是jvm heap内存,jvm内存是有限,对于fielddata cache会设定一个阈值。如果空间不足时,使用最久未使用(LRU)算法移除fielddata,同时加载新的fielddata cache,加载的过程需要消耗系统资源,且耗时很大。所以导致这个查询的响应时间暴涨,甚至影响整个集群的性能。针对于这种问题,解决的方式是采用doc values。

Doc Values:Doc Values是一种列式的数据存储结构,跟fieldata很类似,但其存储位置是在Lucene文件中,即不会占用JVM heap。随着ES版本的迭代,doc values比fielddata更加稳定,doc values在2.x起为默认设置。

总结

架构的快速迭代源于业务的快速发展,正是由于近几年到家业务的高速发展,订单中心的架构也不断优化升级。而架构方案没有最好的,只有最合适的,相信再过几年,订单中心的架构又将是另一个面貌,但吞吐量更大,性能更好,稳定性更强,将是订单中心系统永远的追求。

作者:张淦 京东到家研发工程师 主要负责订单中心,商家中心,计费等系统

【本文是51CTO专栏作者张开涛的原创文章,作者微信公众号:开涛的博客,id:kaitao-1234567】

戳这里,看该作者更多好文

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读