秒杀系统如何设计?
基于SpringCloud构建秒杀抢购活动,如何才能支持百万级级别以上访问 ?
设计原则:前台请求尽量少,后台数据尽量少,调用链路尽量短,尽量不要有单点
秒杀系统解决方案:
nginx:校验恶意请求,转发请求,负载均衡;
网关:安全过滤(拦截恶意请求)、幂等、高并发、限流、用户频率设计
业务层:分布式集群,多台机器处理,提高并发能力
Hystrix:对秒杀接口实现服务隔离防止雪崩效应
Ribbon:负载均衡,优化资源使用,防止资源的过载
前端:页面资源静态化,按钮控制,使用答题校验码可以防止秒杀器的干扰,让更多用户有机会抢到
redis:实现分布式锁对用户频率限制,集群搭建保证高可用,持久化数据;缓存热点数据(库存);
MQ:异步形式,实现对商品的库存修改,削峰限流,MQ堆积订单,保护订单处理层的负载,
数据库:读写分离,拆分事务提高并发度,使用乐观锁机制(版本号)+库存>0判断防止库存超卖问题
Spring Cloud 是什么?
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud将各家公司开发的比较成熟的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
优点:低耦合,配置简单,面向服务,前后端分离,团队独立,技术独立,独立部署
缺点:部署困难,数据管理困难(数据库分离)、系统集成测试比较麻烦 、性能的监控比较麻烦