2021-Golang主动式内存缓存的优化探索之路.pdf

2021-Golang主动式内存缓存的优化探索之路.pdf
这份文档主要介绍了学而思网校在 Golang 主动式内存缓存方面的优化探索之路。文档的核心内容可以总结为以下几个方面: **1. 问题引入:** * 提出主动式内存缓存在性能方面的优势和需要解决的挑战:需要支持多维度查询、灵活的信息过滤条件,以及解决内存容量限制等问题。 * 目标是达到极致的性能,减少硬件资源消耗,提高系统稳定性。 * 通过本次分享,可以了解如何解决GC耗时、高效组织内存数据、保证数据实时性、以及进行存储扩展等问题。 **2. 难点攻克:** * **数据一致性:** 采用主动式更新策略,监听数据库变化,实时同步缓存。使用 Maxwell 监听 binlog 实现增量更新。 * **数据管理:** 通过定义 struct tag,自动化管理正排和倒排索引结构,实现像 SQL 一样灵活的查询。 * **存储扩展:** 通过冷热数据交换策略,解决内存容量限制。 * **语言局限性:** 针对 Golang GC 的问题,通过 cgo 定制内存管理,减少 GC 扫描。 * **数据结构复杂度:** 自研 MemoryTile 进行序列化和反序列化优化。 解决序列化、反序列化开销大的问题。 **3. 主动式内存缓存框架:** * **架构设计:** 采用分布式部署,使用数据中心和数据源,构建了支持多种组件和灵活扩展的框架。 * **数据传输:** 使用全量加载和差量更新相结合的方式,减少数据库压力。 * **数据存储:** 针对数据的存储和查询进行了优化。比如,通过空值剔除减少存储空间。 * **数据同步:** 通过Maxwell的接口实现业务和框架解耦。 * **DataManager:** 工程化的通用数据管理器。 **4. 总结:** * 尽可能将业务数据存放在内存中,做好冷热数据交换。 * 主动监听数据的变化,并实时更新内存中的缓存数据。 * 具备极高的性能,保障业务的快速响应。 * 最小化依赖,依赖方不可用时,提供有损服务。 * 框架具备代码分离、开箱即用、灵活查询、数据一致性保障、自动代码生成、支持可扩展的海量数据、服务性能无压力、单元测试高覆盖等优势。 总而言之,这份文档展示了学而思网校在 Golang 内存缓存方面进行的一系列优化实践,旨在提升性能、降低成本、提高稳定性,并且提供了一个可扩展、易维护的内存缓存框架。该框架能够支持多维度查询、解决 GC 瓶颈,并支持冷热数据交换等高级特性。
在线阅读 下载完整报告 | 6.06 MB | 48页
阅读和下载会消耗积分;登录、注册、邀请好友、上传报告可获取积分。
成为VIP会员可免费阅读和下载报告