有赞订单管理主要承接有赞所有订单搜索及详情展示功能,系统随着业务的不断发展经历了多次飞升之路。下面简单介绍下有赞订单管理系统的三生三世与“十面埋伏”。
随着业务发展,单库单表所能承载的数据量局限性越发严重。
历劫:单库单表数据量承载局限
渡劫:分库分表
分库分表的维度针对系统买卖家查询的需求,分片键为买家id和店铺id,其余订单扩展信息表属于数据组装信息,均以店铺id为分片键。
结果:分库分表后,数据业务量的承载质的提升。
随着业务搜索维度的不断添加,使得跨表查询需求越来越多,系统的慢查不断报出,为此引入了ES搜索引擎。
历劫:跨表查询越来越多,系统慢查频频报出 渡劫:引入ES搜索引擎
ElasticSearch是一个基于Lucene的搜索服务器,这里主要是通过将订单主表及辅表的索引字段同步到ES里,这些每张表单独的索引字段,汇总成一个联合索引,来实现多个表的跨表搜索。
结果:目前运行良好,统计的检索需求响应时间均值20ms以内,对于命中缓存的在1ms以内返回。由于多表联查的流量都进了ES,所以系统慢查被清0。
_两个问题需要注意下_:
1. 单Type与多Type的选择
ES里使用文档存储,一个Index可以理解为一个库,一个Type可以理解为一张表,那么订单及其扩展信息面临使用单Type还是多Type的抉择。
_多Type优点_: 可以做到索引字段与表结构一一对应, 数据同步隔离单一,直观简单。
_多Type缺点_:获取数据时候需要一次数据聚合,比如一次跨5张表索引联查,需要先分别取出5张表的数据,然后做一次交集。性能会有影响。类似于DB的跨表联查,而且当数据做冷热隔离,数据拆分时候,多Type的拆分和维护成本反而更高。
_单Type优点_:可以做到数据一次请求即可将目标信息全量返回,一个Type的数据拆分冷热隔离维护成本可控。
_单Type缺点_:数据同步成本高一些,要做好数据聚合一致性问题。 结合业务需求场景,这里采用的单Type方案。如下图所示。
2.索引字段数量控制
由于订单及其扩展信息字段较多,将这些信息全量同步到ES会导致索引字段过多,索引文件也会随之过大,检索效率会受到影响。所以这里采用了将订单及其扩展信息中强搜索需求的索引字段同步了进来,并没有做全量所有字段同步。
随着业务的不断发展,对系统性能的要求的不断提高,我们发现虽然数据检索的效率很高,但是数据组装的效率令人担忧,由于需要从ES中获取的订单号列表到各个扩展表去获取具体信息,也就是一次完整的订单列表拉取时间=数据检索时间+数据组装时间,而数据组装就算是批量获取,也要去取N(假如有N张订单扩展表)次,即使并行去取也不够高效,上文讨论过没有将订单的所有信息全部同步到ES的原因,这样一次完整的订单拉取时间=数据检索时间。
历劫:数据组装效率低下 渡劫:引入Hbase来为详情数据组装 Hbase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。可以通过MapReduce来处理HBase中的海量数据。
这里将订单基本信息及其强依赖的扩展信息全量导入Hbase,其中历史数据采用BulkLoad导入,增量数据采用消息同步写入,以订单号为rowKey为订单号,这样通过一次请求,将该订单的基本信息及扩展信息一次性取出。 结果:订单管理架构被抽象成了DB+ES+HBASE的三层架构(如下图所示),DB作为数据写入源头,ES负责搜索请求的parser解析及基本数据返回(即Es返回字段即可满足需求的场景),而Hbase作为订单详情详细信息的组装载体,两者配合提升整个订单列表搜索和详情组装的性能。同时Hbase的数据源也可以被复用到订单导出,数据统计等离线需求上。
写到这里可能很多朋友都看出,实现这一切还有一个非常重要的劫需要去渡。那就是数据同步的实时性和一致性。感兴趣的话后续文章可以重点写写数据同步以及踩过的坑和破局之道,这里简单抛砖引玉下。
历劫:数据同步的实时性与一致性
渡劫:链路白盒+幂等性保障
1. 链路白盒:整个同步链路是先监听binlog然后同步到消息队列中,业务消费处理同步到Es和Hbase,可以将整个同步链路监控起来,比如一个消息binlogTime->addMqTime->processTime->addEsOrHbaseTime,这个差值其实就是实时性的一个指标。一旦整个同步链路的白盒搭建好,那么对应的报警监控,失败重试补偿就都可以跟进配套完成。保证数据的完整性与实时性。同步链路及同步监控如下图所示。
2.幂等性保障:如果不能保证业务消费的幂等性,那么消息的乱序,数据的重放监控补偿等等就会很被动。这里简单提供几种幂等思路:
简单回顾了下有赞订单管理的“飞升之路”,至于是不是上神,还有待进一步考验,后面会重点发力在配置化编程,系统白盒监控最大化及系统性能的不断提升上,欢迎有志之士加入来一起飞升wangye@youzan.com。
无论是十里桃林凉凉月色恬静中的怡然,还是浅浅岁月十面埋伏中惊悚后的酣畅,都是一种体验,经历了就是经验,愿我们一起把握每一个重要而幸运的经历。
欢迎关注我们的公众号
Original url: Access
Created at: 2019-09-26 17:17:05
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论