天猫双十一是怎么保证高并发、分布式系统中,数据一致性的?
今年交易库应该使用的还是全程参与过的Oceanbase0.5版,还可以回答一下 1.
数据一致性的保证,这是个分布式问题,解决方法就是就是Paxos协议。Oceanbase的updateserver节点由一个master和两个slave组成,每条redolog都要保证写master本地成功,并且任意一个slave确认持久化成功才算成功,否则不应答客户端。工程实现上经过了简化,比较类似raft,slave只能应答ID连续的日志同步,而不是megastore里那样,来一条就持久化一条(OB1.0是完美的Multi-Paxos,以后我单独分享blog)。相对与mysql/oracle主备同步要在Maximum
Protection和的Maximum
availability之间取舍设计,Paxos最大的优势在于,3台机器任意宕掉一台(或者说N台机器任意宕掉N/2台),剩下的机器可以继续提供服务,而不必担心丢失日志。
2.
分库分表事务怎么办,OB的事务都在单点updateserver上执行没有分布式事务问题,由于交易库压力巨大,OB也部署了多个集群,但是交易库的特性是没有跨域交易的事务,因此尽管有一笔交易内的跨表事务,但是业务可以按照交易ID来分库,库与库之间没有事务操作。至于其他业务跨库事务,是靠业务逻辑处理实现事务的。
3.
库存加锁是个好问题,OB和mysql优化方式不太一样,本质是都是批处理,之前是听说mysql通过将多条扣减库存的sql合并为一条sql来优化的,优化逻辑需要处理sql解析,个人感觉比较定制化,后续优化成什么样就不太清楚了;而OB使用了多个优化设计:(1)对于并发扣减库存的语句,引入了一种叫做“early
lock release”的机制来优化,在事务提交前释放行锁,使得对同一行的修改有可能能够在一次group
commit提交;(2)扩充了sql语法增,类似存储过程,使得insert,update能够在一次auto
commit中完成,避免了持锁与客户端交互;(3)支持hint提示,让客户端能够提示可能的冲突,使得我们可以将可能冲突的请求在一个线程中排队处理。如上几个优化效果很显著,但是比较遗憾是,由于某些原因,OB当年没有拿下库存中心,后续才转而主攻更核心的交易库。
天猫年销售额
天猫是中国最大的电商平台之一,每年的销售额都备受关注。根据数据显示,2019年天猫年销售额突破了万亿大关,达到1.01万亿元人民币,同比增长25%。其中,双11购物狂欢节的销售额更是高达2684亿元,创下历史新高。这说明天猫在中国电商市场上的地位越来越稳固,消费者对其信任度也日益提高。在2020年受到新冠疫情的影响,很多实体店和商家关闭,电商行业则逆势增长,天猫也不例外。2020年天猫的年销售额达到了1.16万亿元人民币,同比增长19.5%。其中,双11购物狂欢节的销售额更是高达4982亿元,再次创下历史新高。这表明天猫在疫情背景下持续增长,电商已经成为了人们生活中不可或缺的一部分。天猫之所以能够在如此激烈的市场竞争中脱颖而出,其商业模式和服务体验是两个重要因素。天猫通过引入品牌商家和提供优质的商品、服务以及便利的购物体验,赢得了消费者的青睐。同时,天猫还积极推进数字化转型,采用人工智能、大数据等技术手段不断提升服务效率和用户体验。这些因素共同促进了天猫业绩的稳步增长。未来,随着数字化浪潮的加速和消费者需求的不断升级,天猫还将面临更多的挑战。但是,天猫拥有强大的技术、品牌和用户资源,相信其能够持续创新,为用户提供更优质的服务,保持业绩的稳定增长。