京东高性能、高并发的交易系统技术探讨
京东商城交易平台副总监王晓钟先生为大家带来了题为《京东高性能、高并发的交易系统技术探讨》的主题演讲。
他介绍说,交易系统共有10大原则,分别为:
原则一:拆分系统
原则二:灾备切换
原则三:水平扩展-分流
原则四:超预期流量-限流
原则五:保护系统-降级
原则六:提高性能-读写分离
原则七:唯快不破-异步化
原则八:动态,静态流量分离
原则九:线上压力测试-发现瓶颈
原则十:预案
其中,按照业务逻辑切分系统的原则有:
1.网站系统:首页,列表,频道,单品,搜索
2.交易系统:价格,购物车,结算,支付,订单中心
3.基础服务:促销,库存,商品,用户
4.订单系统:管道,OFW,订单中间件,生产系统
而在灾备切换方面,则包括了4大原则:
一、多机房部署
机房内部出现大面积故障和机房入口流量故障
1 入口流量切换策略
1)DNS域名:较慢,机房入口处问题+机房内部,有地域性
2)LVS+HAProxy 直接路由:较快,机房内部大面积故障
二、机房内部切换
调用者客户端切换
1 Java应用切换策略:底层服务框架,VIP,内部DNS
2 缓存切换策略
3 数据库切换策略:客户端,DB自身
三、数据一致性保证:
1 程序双写:灵活,集群间相互切换快。
a 同步双写
数据一致性高,影响性能,不适合多个集群。
b 异步双写
数据一致性差,性能高,适合多个集群。
举例:购物车系统。
2 底层存储数据复制
优点:数据一致性高
缺点:主从切换不灵活,复制节点出问题后,恢复慢。
四、灾备集群
1 空闲灾备集群
热点缓存,管理成本
2 小流量灾备集群
增加事故风险
3 全部切换-部分切换
王晓钟以实时价格为例,介绍了京东的交易系统:
一、业务逻辑概述
京东的实时价格由采销人员后台设置,京东价+促销信息(类型,开始,结束时间)。用户在前台商品详情页访问。京东价由采销设置的京东价+促销规则(直降等)计算而出。
二、写逻辑流程
1 采销后台更新价格,写关系型DB,通过异步任务通知发布程序。
2 发布程序更新促销信息主redis数据,更新价格主redis的过期时间戳。
三、读逻辑流程
1 Nginx直接读取本地redis中的价格数据,无过期则直接返回用户。
2 过期或没有命中则回源访问价格服务,取最新数据返回用户。
四、回源写逻辑
1 Java价格服务读取促销信息主redis,计算价格返回用户,同时异步写价格主redis集群。
2 价格主redis集群同步数据到前置Nginx节点的从redis
水平扩展-分流原则:
前置Nginx+Redis的架构是无状态的,Redis中几乎存放了全部商品价格信息。 可以水平扩展,瓶颈在于主redis的数据复制能力。
超预期流量-限流原则:
前置Nginx增加了限流规则:规则+限流数据。
保护系统-降级原则:通过开关控制回源,降级为不回源,业务影响为价格不更新,但交易系统的价格为最新价格。
提高性能-读写分离原则:
读写逻辑分成几个闭环,完全互不干扰。
唯快不破-异步化原则:
采销后台异步调用发布,发布异步写价格主redis,回源异步写价格主redis。
(。・v・。)