电商交易属于核心业务,比如有这么一个场景同一个商品有1000个库存,那么现在有10000个人同时买这个商品,那么在保证这个1000个库存商品全部卖光的前提下,那么交易后台如何保证这10000个人中必须要最多只有1000个人购买成功,极端情况下也可以少于1000个人,反正就是不能超卖。
分析这个场景如下:并发量是10000,交易都是同时到达后端,交易服务是集群部署,会根据服务端负载均衡(Nginx)到不同的server。
解决这个场景的高并发技术和高可用技术如下:
1.高可用架构技术
隔离技术:
线程隔离,交易请求网关肯定不止交易这一个业务接口,还有一些非核心业务接口,那么整个系统区分核心线程池和非核心线程池,在内存和系统核心数足够大的情况下,二者之间是会形成故障隔离的,这里可能就需要使用线程亲和性,将核心线程池绑定到固定的cpu核心数上,比如服务器是32核心,可以分配16个核心给核心线程池,那么这16个cpu就只会处理交易业务,做到充分利用多核cpu的资源。
进程隔离,系统拆分
集群隔离,单实例无法满足交易业务,需要服务化技术,通过部署多个服务形成服务集群,提升系统容量,交易系统集群和其他非核心业务集群隔离
还可以在核心交易业务加一层网关服务集群部署,专门用于派发交易请求(master),实际执行交易的worker可以分布式部署,在流量洪峰下,可以在线扩容worker,提升交易系统的tps。
机房隔离,本机房服务只能调用本机房服务,如果机房服务出现故障,可以自动的切换到对等机房。
读写隔离,和mysql架构类似,读写分离。
动静隔离,静态页面和数据尽量和动态数据隔离,比如热点商品信息缓存,这个是和交易业务相关的。
热点隔离,热点就意味着高并发,在高并发的场景下,要保证高可用性,就必须隔离热点请求,快速的削峰。
使用Hystrix隔离前端交易http请求,Hystrix是一款针对分布式系统的延迟和容错库,目的是用来隔离分布式服务故障,提供线程和信号量隔离,以减少不同服务之间的资源竞争带来的相互影响,提供优雅降级机制,提供熔断机制让服务交易接口快速的失败,而不是一直阻塞,Hystrix可以阻止级联失败并保证系统弹性、和高可用性。
断路器是分布式架构的标配,Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。
2.高并发架构技术
缓存为王,队列也为王,10000个并发请求入分布式缓存队列(redis)或者mq(核心系统mq集群,做到核心业务和非核心业务集群隔离),商品库存1000预存入redis,库存扣减都走redis,交易请求走交易网关(master),master负责分配执行交易请求的worker,worker是分布式部署的,会调用真正的交易接口,整个交易链路就起来了。那客户端如果调用了接口就会友好的弹出一个框提示交易进行中,正常500ms左右会提示交易成功或者交易失败,如果交易失败也就会提示交易失败的原因,比如网路问题、没有库存了等等。