京东618技术读后感

  决战618京东技术,这是一本技术很露骨的书,可以让很多没有真正处理过大数据的同学茅塞顿开!内容基本来自书箱,不具原创性,仅供参考!

  这是一本介绍京东的书,也是一本技术架构参考的书。里面详细或简略地介绍了京东的实现方案,都会给你带来一定的提示作用。

  京东其实已经将现有互联网公司尤其是电商公司需要用到技术,基本都用上了。

主要的技术产品有(带解释): 

  jsf(京东的java服务框架提供rpc服务);

  MySQL(大量的分库分表);

  es(用于提供高性能大数据的搜索服务);

  solr(另一种搜索服务产品);

  hadoop(使用hdfs存储全量数据);

  spark(进行数据清洗等大数据操作);

  hbase(作为全量或关键数据永久存储工具支持数据分析);

  mongodb(分布式存储评价等内容);

  jmq(activemq的改进版本支持大部分的消息通信);

  jimdb(redis的改进版本作为内存数据库大量应用)

  kafka(大数据领域消息通信中间件佼佼者);

  lvs+nginx(负载均衡基础工具,大量定制);

  docker(全面docker容器化为云部署提供了方便);

  防攻击系统(行业龙头企业必须考虑的事);

  风控(信任产品核心);

  全链路压测系统(微服务下必备);

  apm(应用监控);

  异地多活(高可用高性能高并发);

  cdn(内容加速必备);

  storm(流式处理平台实时计算);

  hive(大数据快速处理);

  算法(...)

  集群(Go集群并发能力更强)

  dns(从流量源头进行访问控制切换)

 

1. forcebot,全链路军演压测系统,部署在和地cdn节点,模拟用户发起超大规模购物请求,找出性能瓶颈;

2. chaomonkey(制造混乱的猴子),全场景故障演练系统,模拟不同层面的故障,如网络,机器,cdn,os,db,中间件,流量入口,idc。以验证各系统在故障情况下的运行能力,以及开发运维人员的排障能力检测。

 

面对大量数据的存储和高并发的访问,是很常见的事,那么他们的处理办法也是类似的:

  1. 前端优化,nginx+lua;

  3. 废oracle;

  5. 使用mysql;

  6. 多级缓存;

  7. 服务降级开关;

  8. 托底页面;

  9. binlog订阅,最终一致性保障;

  10. es存储索引,提供搜索服务;

  11. 热点数据放入nosql;

  12. 区间索引,排除索引,索引组;

  13. mq消息异步化;

  14. 集群流量分发;

  15. 内存数据库jimdb的使用;

  16. mysql和nosql多写多读,在mysql压力大时,将部分请求转移给nosql处理;

  17. 冷热数据分离;

  18. 多中心服务,第个中心支持全部操作,全量商品数据(读),全量卖家数据(读),交易应用,部分买家数据(读写);

 

以商品更新为例: 

  1. 后台更改,通过db中间件写mysql数据库;

  2. 通过jingobus订阅商品的mysql binlog日志更新,发送商品变更mq通知,刷新redis集群;

  3. 读服务调用划分,多组redis集群,nio redis客户端;(redis集群复制,发布)

  4. 引入三级缓存,最热数据放入内存,缓存时间短,但命中率很高;

  5. nginx+redis单机绑定(unix domain socket),避免tcp/ip网络开销;

 

交易系统的处理:

  1. uuid本地化,不依赖idcenter,启动时获取实例号;

  2. 数据容灾,jimdb/r2m双备份缓存,同步写一个异步写一个,jmq进行数据回写db,多mq保障消息可靠;

  3. 支付订单创建(应收概念)与支付结果处理(实收概念),两个动作有时差,如何保证一致性?可能支付结果先有,或者订单创建很久后才有结果。使用支付结果与支付单放到不同表内,做插入而非做更新(保证数据绝对落地),如果这一步写入也发生了异常,那么会尝试写入缓存然后等待数据库变好后再调度入库,这样才算真正发起成功了一笔支付,才能操作后续业务;

  4. 支付网关场景:在写入延时较长时先断开与交易系统的交互,自行发送保存创建支付订单存入缓存和本地文件;通过java io事件,监听 SelectionKey.OP_READ ,根据同一个PayID到本地文件和缓存内进行判断,判断创建支付单与写支付的任务都成功后再发送消息;

 

压测,tcpcopy进行请求重放;

 

httpdns和gslb调度用户访问不同运营商vip解决跨网访问;

网络设备全三层bgp互联;服务器和tor交换机三层互联;200左右 机柜划分一个pod,pod通过边界互联,收敛路由表项;每个节点支持横向扩展;

 

多数据中心数据一致性:

  不同于业界;一份数据最多写3份,至少跨两中心存储;mysql数据同步tube,tube基于rbr实现binlog实时采集,以管道为单位复制数据关系;jimdb作为调整缓存通过异步持久化实现秒级同步;数据一致性由基础平台部保证;

 

多中心部署和调度:

  jimdb,tube数据同步;视覆盖区域部署不同规模集群;httpdns和gslb根据区域质量调度用户,采用cdn的最优接入原则;

 

多数据中心异地多活遵守:

  1. 减少跨机房调用和数据同步原则;

  2. 尽量闭环服务和闭环读写原则;

  3. 保证最终一致性,不保证实时一致性,需各系统有容错机制;

  4. 使用多种方案,针对不同业务实现不同异地多活;

 

cqrs架构对查多写少场景适用;

  druid

 

京东b2b基础模块平台化建设:

  分库水平扩展,线上数据异步引流验证。

  订单按订单编号进行分库或路由分库;将历史数据归档;跨库查询使用es;通过任务冲正、消息重试、消息二阶段提交等来保障数据一致性;

posted @   阿牛20  阅读(537)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2015-11-30 windows快速打开命令窗口方式[利刃篇]
2015-11-30 使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]
点击右上角即可分享
微信分享提示