作者:尤凤凯, 京东商城研发-交易平台-商品研发负责人。2010年加入京东,先后参与设计研发京东第一代监控、消息、EDM等系统。12年开始致力于商品系统SOA化、商品系统的持续架构演进。现主要负责商品中台及组件化建设。
商品,黄金交易流程最基础、最核心的环节,无商品不电商。商品数据无处不在,商家(采销、供应商)发布管理、供应商下采购单、仓储配送、促销、搜索、商详页展现、购物支付、财务结算、售后服务等,都离不开商品。商品信息要准确传导于京东整个供应链的各节点,必须要有一套稳健、可靠的商品服务体系支撑。
原本并没有统一的商品服务及存储。DBA搭建了一套包含若干层级的SqlServer数据库复制结构,各系统从各级从库读取数据。复制延迟严重的时候,超过12小时,从库还没有更新,严重影响用户体验。写入口不止一个,获取到写账号就可以写入。erp商品管理系统、POP商品系统、BIP甚至也开发了一个商品管理系统,都在写同一个库的同一套表,数据一致性无法得到保障。在那个阶段京东的订单量、用户量相对较少,基于数据库的架构一定程度上也能支撑日常流量,但是无法应对大型促销活动。
在此背景下,2012年3月商品组从网站组独立出来,孙歌临危受命组建团队,启动商品技术架构升级项目。京东618年中狂欢购物节,系统(特别是0点)会承受平时无法比拟的压力。2012年之前的大促都会出现系统问题系统经常出现问题,甚至图书抢购活动时直接系统宕机。基于数据库提供读服务的架构,显然已经无法支撑业务前行,升级改造势在必行。12年初NoSQL还是新鲜事物,交易架构师龚杰开始实践Redis,他在一封邮件中介绍自主封装的客户端以及API。商品团队开始基于redis内存数据库搭建商品读服务,并对开源Jedis做了深度封装,扩展了ShardedJedisPool,实现了更加细粒度的多分片连接池管理,并且将一个请求中命中到同一个分片的redis命令由串行改成pipeline并行执行,性能提升较大。