Shopee 海量商品系统的治理挑战和应对之策
Shopee 是 Sea 旗下的跨境电商平台,业务范围辐射新加坡、马来西亚、菲律宾、泰国、越南、巴西等市场。作为一个电商平台,商品系统处理着百亿级商品和百万级的并发,这对服务器资源提出了巨大的需求。
即将在 6 月 14-15 日深圳召开的 ArchSummit 架构师峰会上,来自 Shopee 的商品系统的 Team Leader 张俊杰会分享 Shopee 是如何基于成本优先的原则去思考和应对海量商品系统带来的挑战并且成功节省下来几千万人民币的服务器成本。其中涉及到缓存的应对、存储的应对等更多的应对措施。在会议召开前,我们采访了张老师,提前介绍一些技术内容,让更多的人能提前了解到张老师团队在系统治理中的技术实践情况。
张俊杰:商品作为电商平台的核心,我们必须应对不断增长的商品数量和用户浏览量,同时确保系统的稳定性和高效性,在这个过程中,我们获得了很多宝贵的经验和成果。
在实践中,最大的收获就是保障了系统的稳定性同时实现了资源的合理利用。通过缓存和数据治理的方法,我们能够在海量商品系统中提供更高效的服务,并降低资源成本。
我们发现这些经验是可以应用到其他业务场景中的,因此,我们希望将这些宝贵的经验与大家分享,为业界创造更多的价值。
张俊杰:当处理百亿级商品和百万级并发的情况时,降低服务器成本是一个关键问题。我们采取了一系列措施来应对这个挑战,并取得了显著的效果。
缓存在降低服务器负载和提升响应速度方面起着重要作用。我们首先进行了缓存技术的选型。为了找到最适合我们业务需求的方案,我们对数据特征和流量规模进行了深入了解。通过性能验证,我们尝试了不同的缓存架构,并对其性能进行了评估和测试。最终,我们选择了对我们业务最有效的缓存技术。接下来,我们结合业务特征对数据进行定制化处理。通过设置合适的缓存策略和优化缓存命中率等措施,我们成功实现了缓存使用率和命中率都大于 90% 的效果。甚至在大型促销期间,这个数字还可以进一步提升。
接下来是存储方面的措施。选型合适的存储技术对于降低服务器成本至关重要。在选择存储技术时,我们充分考虑了数据量、访问频率、持久性和成本等因素。然而,在这次的经验中,我们意识到通过重新审视数据的生命周期,我们可以进一步降低存储成本。我们从业务角度重新定义了数据的生命周期,并针对不同生命周期阶段的数据采用不同的存储资源。通过这种做法,我们成功节省了 50% 的数据库资源,从而大大降低了服务器成本。
这些措施的实施过程涉及到团队的紧密合作和持续的实践与优化。然而,通过我们的努力,取得了明显的成果。我们不仅成功降低了服务器成本,还提升了系统的性能和稳定性。这些成果为我们应对百亿级商品和百万级并发的挑战提供了强有力的支持,并为未来的业务发展奠定了坚实的基础。
张俊杰:在面对高并发的情况下,选择使用数据库还是缓存中间件是一个有趣的问题。事实上,这取决于不同业务的需求和成本优先原则。根据我们的经验,缓存在高并发场景下更适合作为中间件。
理想情况下,我们希望:
(1)将所有可能被访问的数据都缓存起来,确保没有缓存资源被浪费。
(2) 所有用户的读请求都能够在缓存中命中,减轻数据库的负载。
然而,实际情况是,内存的成本要比磁盘高得多。如果我们简单地将所有数据都存放在缓存中,这将增加昂贵的服务器成本。
因此,在高并发场景中,我们需要着重考虑以下几点优化策略:
(1)如何尽可能预测哪些数据会被频繁访问,提前将其缓存起来。
(2)如何充分利用缓存和服务的内存,使得缓存的数据能够尽可能地满足请求,减少对数据库的访问。
预热是一种常用的策略,它可以在系统启动前将一部分热点数据加载到缓存中,提前准备好响应请求的数据,从而避免请求落到数据库上。这样可以加快响应速度并减轻数据库负载。
另外,多级缓存也是一个有效的应对策略。通过使用不同级别、容量和访问速度的缓存,我们可以更好地平衡成本和性能。将更热点的数据放在更快速但容量较小的缓存中,而将其他热点数据放在容量更大的缓存中,这样可以更有效地利用缓存的资源,并提升系统整体性能。
总而言之,缓存的应对策略在高并发场景下发挥着重要作用。通过精心选择缓存中间件、预热数据和多级缓存配置,我们能够在成本和性能之间寻找到一个平衡点,从而提升系统的稳定性和用户体验。
张俊杰:举个例子来说明,假设一个商品在 2 年前被卖家标记为删除,从那时起就没有产生过销量。在业务系统最初设计规则时,往往不会考虑到几年后这些数据的处理方式,重点是先让系统正常运行起来。随着时间的推移和业务的发展,这些数据可能会扩散到多个关联的数据实体,例如商品的图片、视频等。同时,数据可能也会被复制到其他地方,例如搜索引擎、数据分析平台等。
然而,当数据规模不断膨胀后,我们可以重新审视数据的生命周期。在这个过程中,我们可能会发现一些意外的收获,例如发现大约 1/3 或 1/2 的数据已经不会被正常访问,或者一些数据可以用成本更低的介质进行存放。
因此,在 Shopee 的实践中,我们进行了数据归档和冷热分离的措施。通过数据归档,我们直接减少了数据库的存储需求。同时,由于数据总量减少,也同步减少了计算、网络等资源的消耗,从而帮助我们节省了大量的服务器成本。通过数据归档和冷热分离等技术手段,我们成功实现了对海量存储进行成本优化的目标,为公司节省了千万。
张俊杰:首先,我们可以充分利用闲置的资源,例如内存或硬盘。系统中可能存在一些未被充分利用的资源,可以通过优化配置和使用合适的工具来发掘它们的潜力。这样能够降低成本,同时提升性能。
其次,找到无意义的资源占用并释放。有时候,系统中可能存在一些流量是不应该从线上过来的,或者某些数据是不应该放在缓存中的。通过检查和优化这些无意义的资源占用,可以释放宝贵的资源,提高系统的效率。
另外,资源置换也是一个可行的方法。在可接受范围内,我们可以牺牲一部分时间来换取更多的空间。这意味着我们可以通过一些策略来选择性地牺牲一些性能,以换取更高效的资源利用。例如,可以对一些不常访问的数据进行冷数据归档,或者将一些计算任务进行分布式处理,从而降低整体成本。
同时,我们还可以考虑使用存储和计算资源的弹性扩展方案,例如云计算服务。云计算平台可以根据实际需求提供灵活的资源扩展和收缩,使我们能够动态调整资源配置,根据业务负载的变化来控制成本和性能。
综上所述,除了堆机器,还有很多方法可以降低成本同时保证系统的性能。充分利用闲置资源、释放无意义的资源占用,资源置换以及考虑弹性扩展方案都是有效的策略。在实际应用中,我们可以结合具体业务需求和实际情况来选择合适的优化措施。
张俊杰:首先,跨团队沟通困难是一个普遍存在的问题。不同团队可能有不同的思考方式和关注点,因此在沟通时我们需要提前做好准备,站在双方的视角上思考。我们发现使用简单明了的资料和通用的语言有助于促进理解和达成共识。避免过多的专业术语,而是注重用通俗易懂的语言解释和传达想法,这可以帮助降低团队之间的沟通障碍。
其次,方案验证不理想是一个需要不断试错的过程。这意味着我们可能会面临一些挫折和额外的成本,但也会带来宝贵的经验。为了应对这个挑战,我建议在方案验证前提前确定不同验证阶段的变量,并做好风险预测和解决方案的准备。这样,当出现问题时,我们能够及时调整并采取相应的措施,保证方案的有效性和可行性。
此外,持续的监测和数据分析也是克服挑战的关键。我们可以使用监控工具和数据分析技术来评估方案的效果,并根据反馈进行调整和优化。通过及时的数据反馈和迭代改进,我们能够更好地解决问题,并确保所采取的策略始终符合实际需求。
总的来说,挑战在实践中是难免的,但我们可以通过准备充分的沟通、明确方案的验证阶段和变量,以及持续监测和数据分析来克服这些挑战。重要的是从挑战中吸取经验教训,不断优化我们的方法和策略,以确保最终实现高效的缓存治理和数据归档策略。
张俊杰:首先是沟通问题。在实践过程中,经常会出现理解偏差或者沟通不畅的情况。为了解决这个问题,我们采取了一些策略。首先,对于一些关键名词和概念,我们进行了分类和阐释,通过举例子的方式进行解释,确保大家在沟通中能够达成共识。此外,每次沟通结束后,我们会进行概括性的总结,并通知所有相关人员,以确保大家都理解和接受最新的沟通内容。
其次是推进问题。在平衡业务需求和技术方案的实施过程中,可能会遇到推进困难的情况。为了解决这个问题,我们采用了明确的任务分配和时间管理。每一次对齐之后,我们会明确确定待办事项、负责人和截止时间,并在需要的情况下确定下一次对齐的时间。这样,我们能够更好地推动工作的进展,确保项目按计划顺利进行。
张俊杰:在贯彻成本优先原则到具体的技术决策中,我们需要考虑成本、收益和风险等多个维度进行权衡。让我解释一下在技术决策中如何平衡成本与性能之间的关系。
我们需要明确约束条件和目标。了解项目中的约束条件,包括时间、资源和技术限制,同时明确项目的目标和优先级。这样我们可以清楚地知道在哪些细项上需要优化成本,以及各项优化的优先级。
在技术方案的选择上,我们要考虑每个选项的成本、风险、收益和与项目目标的匹配度。评估不同方案的实施成本,包括开发成本、维护成本和资源消耗等,同时考虑风险因素,如技术可行性、兼容性等。与此同时,我们也要衡量每个方案带来的收益,包括性能提升、用户体验改善和业务需求满足程度等。
我们把成本视为一个重要的指标,在收益和风险可接受的范围内,尽量选择低成本的方案。这不仅可以节约资源和预算,还可以确保项目在限制条件下的顺利进行。但是同时要注意的是,技术决策并不只关注成本,也要综合考虑性能、质量和用户体验等因素,确保系统的稳定性和用户满意度。
张俊杰:首先,在处理海量数据的方面,未来可能会面临数据增长速度难以控制的问题。智能化工具的普及将带来大量的数据,维护和处理这些数据可能会变得更加困难。为了应对这个挑战,我们可以考虑采用智能化的手段来处理增量数据。例如,在数据创建的过程中,系统可以识别出无价值的数据,避免产生无效的数据,从而减少数据处理和存储的压力。
其次,在面对高并发系统的挑战时,未来的交互模式改革可能导致用户更多、更快地浏览数据,进而增加了系统的压力。为了解决这个问题,我们需要更加注重系统的计算和存储资源,确保系统能够处理高并发的请求。在应对挑战时,我们仍然需要遵循成本优先的原则,思考并采取适当的技术和架构来应对需求。
最后,我们应该持续关注和探索新技术,因为技术的演进是不断的。寻找更适合的技术架构和解决方案可以帮助我们更好地应对未来的挑战。这意味着我们需要保持学习和创新的态度,并与技术社区保持紧密联系,以了解最新的技术趋势和最佳实践。
张俊杰:在处理海量商品系统,并尤其是在节约成本方面,我们总结了一些经验教训:
(1)沟通是非常重要的。在处理海量商品系统时,确保相关人员之间对概念和问题有清晰的定义和分类非常关键。通过明确的沟通,可以减少误解和错误,从而降低沟通成本。建立一个良好的沟通渠道和流程,可以帮助大家高效地协作。
(2)要意识到资源的约束是客观存在的。在处理海量商品系统时,资源如服务器容量、带宽等是有限的,必须合理利用这些资源。同时,也要注意业务规则的定义。在优化成本方面,要寻求最佳资源利用的方式。
(3)多参考业界的案例分享也是很有益处的。了解其他电商平台或技术团队在处理海量数据系统时所采取的实践和经验,可以帮助我们避免重复尝试和试错,从而减少额外的成本。通过学习他人的成功案例和挑战,我们可以更快地寻找到适合自己业务需求的解决方案。
总的来说,在处理海量商品系统时,节约成本是一个重要的考虑因素。通过清晰的沟通、合理利用资源以及借鉴业界的经验,我们可以降低成本并提高效率。通过这些经验教训,其他电商平台或技术团队可以了解如何更好地应对成本挑战,优化业务运营并提升用户体验。
将在 6 月 14-15 日举办的深圳 ArchSummit 架构师峰会上,胡月军和刘超老师出品的专题,将邀请 vivo、天翼云、网易、火山引擎、eBay、货拉拉、Uber 的专家来分享各自在大模型算力、AI & Data 结合方面的实践话题,感兴趣的可以点击 [阅读原文] 查看会议详细的议题内容。目前会议门票售价 9 折期间,购票人数越多优惠力度越大,欢迎来现场和演讲嘉宾、同行交流。
微信扫码关注该文公众号作者