欢迎访问网易云社区,了解更多网易技术产品运营经验。
秒杀服务需要单独进行特别分析,主要有下面两个原因:
秒杀的核心问题就是极高并发处理,由于系统要在瞬时承受平时数十倍甚至上百倍的流量,这往往超出系统上限,因此处理秒杀的核心思路是流控和性能优化。
流控
尽可能在上游拦截和限制请求,限制流入后端的量,保证后端系统正常。
因为无论多少人参与秒杀,实际成交往往是有限的,而且远小于参加秒杀的人数,因此可以通过前端系统进行拦截,限制最终流入系统的请求数量,来保证系统正常进行。
在客户端进行访问限制,较为合适的做法是屏蔽用户高频请求,比如在网页中设置5s一次访问限制,可以防止用户过度刷接口。这种做法较为简单,用户体验也尚可,可以拦截大部分小白用户的异常访问,比如狂刷F5。关键是要明确告知用户,如果像一些抢购系统那样假装提交一个排队页面但又不回应任何请求,就是赤裸裸的欺骗了。
对客户端,特别是页面端的限流,对稍有编程知识或者网络基础的用户而言没有作用(可以简单修改JS或者模拟请求),因此服务端流控是必要的。服务端限流的配置方法有很多种,现在的主流Web服务器一般都支持配置访问限制,可以通过配置实现简单的流控。
但是这种限制一般都在协议层。如果要实现更为精细的访问限制(根据业务逻辑限流),可以在后端服务器上,对不同业务实现访问限制。常见做法是可以通过在内存或缓存服务中加入请求访问信息,来实现访问量限制。
上述的流控做法只能限制用户异常访问,如果正常访问的用户数量很多,就有后端系统压力过大甚至异常宕机的可能,因此需要后端系统流量控制。
对于后端系统的访问限制可以通过异步处理、消息队列、并发限制等方式实现。核心思路是保证后端系统的压力维持在可以正常处理的水平。对于超过系统负载的请求,可以选择直接拒绝,以此来对系统进行保护,保证在极限压力的情况下,系统有合理范围内的处理能力。
系统架构优化
除了流控之外,提高系统的处理能力也是非常重要的,通过系统设计和架构优化,可以提高系统的吞吐量和抗压能力。关于通用系统性能的提升,已经超出本节的范围,这里只会提几点和秒杀相关的优化。
系统扩容
这项内容是在云计算环境下才成为可能,相对于传统的IT行业,云计算提供了快速的系统交付能力(min VS. day),因此可以做到按需分配,在业务需要时实现资源的并行扩展。
对一次成功的秒杀活动来说,无论如何限流,如何优化系统,最终产生数倍于正常请求的压力是很正常的。因此临时性的系统扩容必不可少,系统扩容包括以下3个方面。
一般来说,流控的实现,特别是业务层流控,依赖于业务自身的设计,因此云计算提供的服务在于更多、更完善的基础设计,来支持用户进行更简单的架构优化和扩容能力。
系统架构优化
通过CDN服务和对象存储服务来分离静态资源,实现静态资源的加速,避免服务器被大量静态资源请求过度占用。要实现异步的消息处理,可以使用队列服务来传输消息,以达到消息异步化和流控。
系统扩容
云服务会提供按需计费的资源分配方式和分钟级甚至秒级的资源交付能力,根据需要快速进行资源定制和交付。
内部系统可以通过负载均衡等服务实现并行扩展,在网易云基础服务中,用户可以直接使用 Kubernetes 的 Replication Controller 服务实现在线水平扩容。对于对外提供的 Web 系统,可以通过负载均衡服务实现水平在线扩展。
对于后端系统来说,建议使用云计算服务商提供的基础服务来实现并行扩展。例如,网易云基础服务就提供了分布式缓存服务和数据库服务,支持在线扩容。
本文节选自《云原生应用架构实践》,网易云基础服务架构团队著。
网易云计算基础服务深度整合了 IaaS、PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台,点击可免费试用。