秒杀系统设计
“你如何设计一个秒杀系统?或者是你如何设计一个抢票系统?”
在面试高级ApiBoy和架构师的时候,应该有很多人都遇见过这个问题。有时候你不得不思考一下,即便现在网上许多面经里都包含了这类问题,为什么面试官还是乐此不疲的提出它呢?而且你在网上查找这些设计题的答案,也很难找到一个很全面的,能让你一下就能组织起语言去回答的文章。究其原因是因为这个题目涉及到的知识点还是很多的,哪怕你已经背好了答案,只要面试官随随便便发散或者挖掘一下深度,如果你没有很硬的技术知识储备,还是会很快败下阵来。
那么本专栏就是来探究一下如何搞明白一个秒杀系统,这其中确实需要理解方方面面的知识。而从另一个方面来讲,这也可以说是为大家提供一个学习的方向。
本文暂时只做一个大致的方案设计,讲述一下作为一个高级码农面对这个问题你需要从哪些方面来考虑你的系统。具体的知识后面的文章再进行梳理。
废话不说,我们开始设计我们的秒杀系统:
程序的入口 : 网关
对于一个系统的了解,绝对不是仅仅像有些文章写得那样,秒杀就只注意一些缓存和业务逻辑准确性,你的服务器(肯定是分布式)的整个架构都是可以优化的,一个处理大并发的服务肯定是方方面面都要优化到的,作为所有请求的入口,网关肯定是第一个优化的。
直接说结论,首先,使用Lvs+多主的nginx服务器来作为网关。(相关的详细只是后面的文章讲到。)
其次,网关可以做IP验证,使用nginx做一些简单的人机验证,过滤掉一些很明显的非人为请求。假设你的服务不想扩容,但是QPS又超过了