美团-2020美团技术年货——后台篇-2021.1-391页_20mb
报告摘要
2020 美团技术年货 - 后台篇总结
核心内容
本文主要围绕线程池和KV存储两个主题展开,深入探讨了线程池的实现原理、实践应用及优化方案,以及美团在万亿级KV存储架构上的设计与实现。文档通过实际案例分析,展示了线程池在业务中的实际应用及问题,同时也介绍了美团内部对于KV存储的演进与挑战。
主要观点
1. 线程池
- 线程池概念:线程池是基于池化思想管理线程的工具,避免频繁创建和销毁线程,提高系统性能和稳定性。
- 线程池作用:降低资源消耗、提高响应速度、提升线程可管理性、提供更多功能(如延时任务)。
- 线程池生命周期:线程池有5种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。
- 任务调度机制:线程池根据当前状态和队列情况决定任务的执行方式,如直接执行、缓冲队列、拒绝任务。
- 任务缓冲机制:使用阻塞队列实现任务缓冲,常见的队列包括ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
- 任务拒绝策略:线程池提供4种拒绝策略,分别是丢弃任务并抛出异常、丢弃任务不抛出异常、丢弃最老任务、调用线程执行任务。
- Worker线程管理:Worker线程通过继承AQS实现线程状态管理,线程池通过Hash表维护线程引用,实现线程生命周期的控制。
- 动态线程池:为解决线程池参数配置难的问题,美团实现了动态化线程池,允许参数在管理平台修改并实时生效。
- 线程池监控:支持实时查看线程池状态,包括负载、任务执行情况、拒绝任务数量等,并提供告警功能。
2. KV存储架构
- 发展历程:从Memcached到Redis,再到自研的Squirrel和Cellar,美团逐步演进KV存储系统。
- Squirrel架构:基于Redis集群,实现高可用、智能迁移、热点隔离等能力,适用于对延迟敏感的业务场景。
- Cellar架构:基于自研的持久化方案,结合Raft协议实现强一致存储,适用于对数据可靠性要求高的业务场景。
- 容灾方案:Squirrel和Cellar都实现了节点容灾和跨地域容灾,通过Handoff机制和集群间复制降低故障影响。
- 热点Key处理:通过热点监控、流控和迁移,实现热点隔离,提升节点处理能力。
- 持久化优化:减少全量重传、控制RDB生成时间、避免AOF写盘抖动,提升系统可用性和稳定性。
关键信息
线程池关键信息
- 线程池核心参数:corePoolSize、maximumPoolSize、workQueue。
- 动态化线程池:通过分布式配置中心实现线程池参数的动态配置,提升系统灵活性和可维护性。
- 拒绝策略:根据业务需求选择合适的拒绝策略,如AbortPolicy、DiscardPolicy、DiscardOldestPolicy、CallerRunsPolicy。
- 监控与告警:支持对线程池进行多维度监控,包括负载、任务执行情况、拒绝任务数量等,并通过大象系统实时告警。
KV存储关键信息
- Squirrel:适用于高吞吐、低延迟场景,采用Redis Cluster架构,支持智能迁移、热点隔离。
- Cellar:适用于高可靠场景,采用Raft协议实现强一致存储,支持节点容灾、跨地域复制。
- 容灾机制:通过Handoff机制实现节点故障后的快速恢复,减少对业务的影响。
- 跨地域复制:通过双向复制链路实现异地多活,减少跨地域带宽消耗。
- 持久化机制:采用异步持久化策略,减少RDB和AOF带来的性能影响。
业务实践
线程池实践
- 场景1:快速响应用户请求:使用线程池并行执行子任务,提升响应速度,建议不设置队列,调高corePoolSize和maxPoolSize。
- 场景2:快速处理批量任务:使用线程池并行处理大批量任务,提升吞吐量,建议设置队列并合理调整corePoolSize。
KV存储实践
- Squirrel智能迁移:通过监控服务和迁移服务实现热点Key的迁移,提升节点处理能力。
- Cellar强一致存储:基于Raft协议实现数据强一致性,解决异步复制可能带来的数据丢失问题。
- 高可用架构:通过HA服务实现节点快速摘除和恢复,结合ZooKeeper进行分布式仲裁,提升系统可靠性。
技术挑战与解决方案
- 线程池参数配置复杂:通过动态化线程池,降低配置和修改成本,提高系统稳定性。
- KV存储扩容与数据迁移:通过智能迁移和Handoff机制,实现快速扩容和故障恢复,减少对业务的影响。
- 跨地域带宽限制:通过双向复制链路和优化复制策略,降低跨地域带宽消耗,提升数据同步效率。
总结
美团在后台技术领域,尤其是在线程池和KV存储方面,通过深入研究和实践,提出了多个优化方案,解决了实际业务中面临的资源管理、并发性能、高可用性等问题。线程池的动态化配置和监控机制提升了系统的灵活性和可维护性,而KV存储的自研架构则在高吞吐、低延迟和强一致性方面提供了强有力的支持。这些实践不仅提高了系统的稳定性和性能,也为其他业务场景提供了可借鉴的经验。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载