[秒杀系统 | 青训营笔记]

76 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 11 天。

今天,我主要学习了秒杀系统的相关知识,而它是目前Web开发架构的一个重要模型(尤其是电商系统)。

一、系统设计基础

系统设计是计算机科学领域的一个重要领域,主要涉及到把复杂的系统分解成独立的部件,并通过把这些部件组合在一起来设计、实现和评估完整的系统。系统设计包括解决系统的功能性、可靠性、可扩展性、可用性和可维护性等问题。

通常系统设计流程包括以下几个步骤:

  1. 需求分析:了解客户的需求,明确系统的功能和限制。
  2. 概念设计:讨论各种方案,确定最佳的概念设计。
  3. 详细设计:确定系统的架构,设计各个模块的接口和数据结构。
  4. 实现:按照详细设计的方案编写代码。
  5. 测试:对系统进行测试,确保其功能正确。
  6. 部署:将系统部署到生产环境,并进行监控。
  7. 维护:随着需求的变化,维护系统的功能和性能。

这是一个基本的系统设计流程,实际情况可能因项目的不同而有所差别。

二、秒杀系统简介

秒杀系统是一种特殊的电子商务系统,专门针对限时特价的商品,提供快速、高效、可靠的购买体验。秒杀系统通常需要应对大量的并发请求,因此需要具备高性能和可扩展性。此外,由于秒杀活动的时间限制,系统还需要具备高可用性和容错性。我个人认为,秒杀系统之所以得名,是因为淘宝上常有的“1元秒杀”之类。

相比于其他普通系统,秒杀系统有以下几个特殊之处:

  1. 高并发:秒杀活动短时间内可能会有大量用户同时请求
  2. 高性能:系统必须具备快速响应用户请求的能力
  3. 高可用性:系统必须具备高可用性,以确保秒杀活动进行过程中不会出现故障
  4. 可扩展性:系统必须具备良好的可扩展性,以确保系统可以随着用户数量的增加而扩展

因此,秒杀系统的设计和实现要比普通系统更加复杂和具有挑战性。

那么,我们应该如何正确设计秒杀系统呢?

  • 存储

    遵循“金字塔”原则,我们设计三层存储架构,分别是本地缓存、Redis内存数据库和MySQL数据库,层层递进,从而使速度最大化,并压缩主服务器负载。但是,需要特别留意存储一致性的问题,需要精确设计以避免。

  • 服务

    为保证性能最大化,我们需要将整个系统划分成若干服务,例如用户服务、风控服务、订单服务等。

  • 拓展

    秒杀系统对性能的需求不固定,因此我们需要设计一套可扩展的组件,以能够随时扩展/撤销,例如将运算模块封装成容器,把静态资源放置到CDN上。