本帖最后由 天刀仔 于 2015-11-4 17:48 编辑
我来给你科普一下吧。
你可能并不了解一个电商的抢购系统是如何搭建形成的。双11这种抢购活动是极高并发的一种情况,在这种情况下,影响系统性能的一个关键因素是:数据的一致性要求。一共有两项是与数据一致性相关的:商品剩余数量、用户是否已经抢购成功。如果要保证严格的数据一致性,那么在集群中需要一个中心服务器来存储和操作这个值。这会造成性能的单点瓶颈。
下面是个系统的例子,但不是天猫的。
在分布式系统设计中,有一个CAP原理。“一致性、可用性、分区容忍性”三个要素最多只能同时实现两点,不可能三者兼顾。我们要面对极端的爆发流量负载,分区容忍性和可用性会非常重要,因此决定牺牲数据的强一致性要求。
所以大致的系统结构是这样
系统服务端主要分为两层架构,即HTTP服务层和业务处理层。HTTP服务层用于维持用户的访问请求,业务处理层则用于进行具体的逻辑判断。两层之间的数据交互通过消息队列来实现。 HTTP服务层主要功能如下: 1. 进行基本的URL正确性校验; 2. 对恶意访问的用户进行过滤,拦截黄牛; 3. 提供用户验证码; 4. 将正常访问用户数据放入相应商品队列中; 5. 等待业务处理层返回的处理结果。
业务处理层主要功能如下: 1. 接收商品队列中的数据; 2. 对用户请求进行处理; 3. 将请求结果放入相应的返回队列中。
用户的抢购请求通过消息队列,依次进入业务处理层的进程里,然后顺序地处理请求,将抢购结果返回给前面的HTTP服务层。 商品剩余数量等信息,根据商品编号分别保存在业务层特定的服务器进程中。 详细结构图大约是这样。
所以,你会看到,用户浏览器中看到的东西其实并不是控制是否抢购成功的服务器在当前时刻的真实情况。每一个浏览器请求再回传都会出现不同程度的延迟。 抢购一个是拼机器,还要拼网速(这里还有到服务器路由节点的问题),最后当然是拼运气。
最后祝大家好运吧。
|