思维导图
导图按照由浅入深的方式进行讲解,架构从来不是设计出来的,而是演进而来的
从一个几百人的抽奖系统到几万人,再到到百万人,不断增加新的东西。
最后总结归纳一套设计思想,也是万能模板,这样面试官问任何高并发系统,只需从这几个方向去考虑就可以了。
V0——单体架构
如果现在让你实现几十人的抽奖系统,简单死了吧,直接重拳出击!
两猫一豚走江湖,中奖入库,调通知服务,查库通知,完美!
相信大家学java时可能都做过这种案例,思考一下存在什么问题?
-
单体服务,一着不慎满盘皆输
-
抽了再抽,一个人就是一支军队
-
恶意脚本,没有程序员中不了的奖
接下来就聊聊怎么解决这些问题?
V1——负载均衡
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。 为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
负载均衡就是建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,好比管家,由他在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。
如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
负载均衡是用「反向代理」的原理实现的。具体负载均衡算法及其实现方式我们下文再续。
负载均衡虽然解决了单体架构一着不慎满盘皆输的问题,但服务器成本依然不能保护系统周全,我们必须想好一旦服务器宕机,如何保证用户的体验。
即如何缓解开奖一瞬间时的大量请求。