过往项目经验整理(搜索&存储)

过往项目经验整理(搜索&存储),第1张

过往项目经验整理(搜索&存储)

1,防书籍重复入库,反作品抄袭;

   A,SimHash特征,计算海明距离,相对于标准向量计算余弦距离计算量小;

   B,基于Elastic Search的书库存量章节关键段落检索;

   C,基于Faiss的竞品章节向量检索;

   D,基于IP代理后的爬虫对百度搜索结果进行检索,并计算相似度;

2,资金结算平台沙箱环境,变更可回溯性追踪;

   背景:出现过这样的Case:在生产环境进行试算,并将试算数据发布出去;

   A,隔离环境细节。沙箱环境ECS服务器,ECS配置对DB的隔离访问策略,服务Init感知环境并判断链接正确性;

   B,数据同步?从线上全库同步数据;

   C,验证过程?沙箱环境部署代码,跑结算任务,并根据结果进行判定;

3,章节阅读故障问题闭环自动修复;

   背景:章节上架链路冗长,链路中数据冗余,领域模型定义不清晰,状态含义不明确,服务调用没考虑最终一致性,流程在链路中某些节点中断的情况;

   A,端上对章节阅读故障上报事情,Kafka原始日志—>Flink日志清洗—>Kafka阅读故障,监听消息并触发章节重新上架流程;客诉量下降95%+;

   B,服务领域拆分,领域模型重新定义,状态码含义定义,明确服务约定,服务调用重试机制;从长条形链路重构成中心化服务,消除数据冗余,减少数据同步;从面向业务过程升级到面向领域服务;

4,版权方合作对接外部API可配置化;

   背景:对接100+书籍供应版权方,需要调用对方提供的OpenAPI接口,拉取书籍入库。接入效率较低;

   A,抽象对接流程,书籍列表—书籍基本信息—章节列表—章节基本信息。OOP的方式抽象定义处理过程,并提供默认实现覆盖80%的情况,20%的情况在默认实现上覆盖扩展定制;

   B,Open API接口URL,验签方式,Response信息抽取方式,可通过后台配置的方式定制;接入耗时从2~3人日优化到4~8工时;

5,跨境平台商品发布成功率问题;

   一站卖全球的愿景,需要把国内商品发布到阿里旗下的海外所有站点;

   A,中文到英文以及其他小语种的翻译;B,人民币到当地货币的重新定价;C,淘系类目到海外类目的映射;D,可售库存的调拨;E,一站到十几个站点的商品发布,以及全部站点的订单回流;

   商品模型扩展支持多语言、多币种,集成AI翻译服务;集成算法的类目映射服务;

   定价计算公式可配置,动态计算当地定价;

   国际业务中台解决方案出海后,商品&订单服务中心化,统一服务接口和数据模型。打通HSF&metaQ基于站点标签自动路由的能力,替代原有的OpenAPI公网调用的方式;

   服务调用串行改并行,并加入metaQ延迟消息重试机制;

   图片&视频等媒体文件,预同步到海外站点,避免同步商品属性的时候需要重新同步;同时APP上图片空窗率也下降0.5%左右;

   打通库存中心与GSP的库存状态变更消息,通过GSP可以跨站点调拨库存;

7,商家侧商品搜索,对接多数据源后,面对大批量更新同步,以及写入性能瓶颈的优化;

    解决索引BUILD阶段写入放大的问题。

    商品管理的维度是SPU,下面挂N个SKU,SKU上有重要属性挂牌价和有无库存状态。为支持价格作为搜索条件,搜索引擎Elastic Search的存储设计成父子文档的格式;

    一个SPU document下挂N个SKU document,利用ES的Inner查询可以搜索商品的价格和库存。但子文档的SKU document不可以被单独更新,需要和SPU document一起被更新;

    商品中心一次新增或更新商品,BinLog会包含1个SPU+N个SKU的消息,这样基于BinLog驱动的索引Build会更新(1+N)*(1+N)次文档。

    除此之外,库存中心或营销中心的变更,也会触发索引更新。

    引入Blink,以一秒为时间窗口,聚合多方的SKU BinLog消息到SPU维度,降低索引更新频率为之前TPS的20%。

8,对章节上架及时性的端到端的监控。外部爬虫,内部运营流程;

9,离线圈人存储引擎选型、数据结构选型和数据同步问题;

    Aerospike VS Redis, ClickHouse VS Doris;

10,核心服务内容分发服务的重构上线;

12,书架数据从Redis迁移到DRDS过程的数据清洗,Rebalance过程;

    书架服务治理,存储在Redis中的List结构的数据,需要迁移到DRDS中。

    使用SCAN命令对线上实例的Key进行扫描,发现每次扫描出来的Key数量有一定偏差,超出正常业务增量范围;

    1,增量Redis&DB双写机制;

    2,存量导出RDB文件,对RDB文件进行扫描;

13,NSQD多channel消费,刚开始启动丢消息问题;

    NSQD是AP的架构。PUB消息的时候,如果Topic不存在,只会在当前NSQD 实例1创建Topic。NSQD的lookup机制,每15秒钟刷新一次NSQD的地址列表;

    此时Client端通过lookup接口,获取实例1的地址返回给Client端并建立连接;

    在下次刷新的之前,SLB机制将PUB消息路由到NSQD实例2,此时NSQD 实例2因为没有Client的Channel连接上来,消息会被丢失。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5706059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存