01. 如何优化 解决了哪些技术难题 主动式内存缓存 如何优化如何优化极致的性能极致的性能 除了网络IO,与Redis有什么区别 复杂的查询怎么办 02. 传统的Cache很难实现多维度的查询,无法具备像SQL一样的灵活的查询模式 支持多种维度的查询 提供类似SQL的查询模式 支持灵活的信息过滤条件 内存不够用怎么办 03. 冷热可交换、策略可定制、内存可扩展,多种冷数据淘汰组件,自由组合 存储扩展,冷热数据交换 可自定义冷热数据交换策略 还能提供什么帮助 04. 降低硬件成本,降低依赖,保证稳定性 同样的性能,需要更少的硬件资源,降低成本同样的性能,需要更少的硬件资源,降低成本 0101 核心数据在本地,依赖少,更稳定核心数据在本地,依赖少,更稳定 0202 千万级内存对象,GC严重耗时,如何解决 复杂的查询场景,内存数据如何高效组织 主动式内存缓存,如何保证数据实时性 数据太多,内存不够用,如何进行存储扩展 通过本次分享,可以带来哪些收获 难点攻克 第二部分 使用内存缓存 数据一致性如何保证 一致性 01. 缓存如何保证更新,如何与数据库同步 同步、更新同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 02. 全量数据加载,增量数据监听 每个应用服务分别消费数据变更消息 一个应用服务消费数据变更,应用服务集群内广播 Maxwell是一个能实时读取MySQL二进 制日志binlog,并生成JSON格式的消 息,作为生产者发送给Kafka、 RabbitMQ、Redis、文件或其它平台的 应用程序 数据管理 如何像SQL一样灵活 多维度查询 03. 业务数据的查询条件复杂,数据在内存中该如何组织 Q1已开始的公益直播,且公开显示直播无数据 数据模型管理 04. 基于golang的struct tag实现正排、倒排结构的自动化管理 全数据扫描 索引 主键 倒排 业务快速增长 存储如何无限扩展 存储扩展 05. 业务数据已经超过1000万,海量数据下,如何实现冷热数据的交换 冷冷 热热 新新 系统历史数据系统历史数据 冷数据、数据量多 缓存成本大、命中低、收益小 热数据热数据 当前系统中的热点数据 命中率高 系统新增数据系统新增数据 近期新增数据,较大概率命中 存储空间缓存性能 冷热可交换,引擎可扩展 06. 冷热数据交换,通过栈式缓存结构,实现多级缓存策略 语言的局限性 07. 基于golang语言,内存对象超过百万量级后出现的GC耗时问题 go原生map存储200万数据对象 数据对象中包含多个string,slice字段 string,slice的内部结构包含指针 GC并发标记、扫描的平均耗时10s GC的辅助标记会抢占业务协程 每次QPS掉底都与GC相关 GC较高的耗时对QPS的影响巨大 服务性能上不去,QPS剧烈抖动 代码实施 语言局限性,如何突破 解决GC扫描耗时的问题 08. 基于cgo,定制化的内存管理,减少运行时对golang结构的gc扫描 CopyCopy CopyCopy 内存数据与golang结构间的桥梁br/