2.1.1 Golang主动式内存缓存的优化探索之路
Golang主动式内存缓存的优化探索之路 安晏伯 学而思网校 技术专家 目 录 问题引入 01 难点攻克 02 主动式内存缓存框架 03 总结 04 问题引入 第一部分 为什么能有极致的性能? 01. 如何优化? 解决了哪些技术难题? 主动式内存缓存 如何优化? 极致的性能 除了网络IO,与Redis有什么区别? 复杂的查询怎么办? 02. 传统的Cache很难 • 复杂的查询场景,内存数据如何高效组织? • 主动式内存缓存,如何保证数据实时性? • 数据太多,内存不够用,如何进行存储扩展? 通过本次分享,可以带来哪些收获? 难点攻克 第二部分 使用内存缓存 数据一致性如何保证? 一致性 01. 缓存如何保证更新,如何与数据库同步 同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 热数据的交换 冷 热 新 系 统 历 史 数 据 冷数据、数据量多 缓存成本大、命中低、收益小 热 数 据 当前系统中的热点数据 命中率高 系 统 新 增 数 据 近期新增数据,较大概率命中 存储空间 缓存性能 冷热可交换,引擎可扩展 06. 冷热数据交换,通过栈式缓存结构,实现多级缓存策略 语言的局限性 07. 基于golang语言,内存对象超过百万量级后出现的GC耗时问题0 码力 | 48 页 | 6.06 MB | 1 年前32.2 龚浩华(月牙寂)p2p缓存系统 基于Golang的Aop设计模式
LOGO p2p缓存系统 基于Golang的Aop设计模式 龚浩华 QQ 29185807 月牙寂 背景 v Web缓存(类似CDN技术) § 网页、图片 § 普通下载 § 普通视频 v P2P缓存 § 下载(bt等) § 视频(qvod、百度影音等) 背景 v P2P缓存好处 § 一次获取,多次利用 § 减少局域网出网流量 减少局域网出网流量 § 提升用户体验 背景 v P2P缓存服务器(基于c++开发) § 代码量大 § 协议数量多 § 耦合性高 § 潜在bug多 重构 or 重新推倒? 背景 现实世界是怎么样的 分布式、并发 职能化、松散化 自组织、智能化 程序框架是否也可以这样? OOP v C++对象代码运行 仍然存在不确定性 现实世界的设计模式直接可以拿来借鉴 P2P缓存框架 P2P缓存框架 1、入口监听模块 常驻 功能监听识别连接 2、任务管理模块 常驻 管理任务、分流client P2P缓存框架 3、任务模块 文件缓存度:是否需要下载 文件热点程度:是否热点0 码力 | 29 页 | 338.20 KB | 1 年前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
常见操作所花费的时间 • 图中加法 (add) 和乘法 (mul) 都指的整数。 • 区别是浮点的乘法和加法基本是一样速度。 • L1/2/3 read 和 Main RAM read 的时间指的是 读一个缓存行( 64 字节)所花费的时间。 • 根据计算: 125/64*4≈8 • 即从主内存读取一次 float 花费 8 个 cycle , 符合小彭老师的经验公式。 • “right” 和“ wrong” 相差不多,符合我的预期 。 第 2 章:缓存与局域性 针对不同数据量大小的带宽测试 • 我们试试看 a 不同的大小,对带宽有什么影响。 针对不同数据量大小的带宽测试(续) • 可见数据量较小时,实际带宽甚至超过了 理论带宽极限 42672 MB/s ! • 而数据量足够大时, 才回落到正常的带宽 。 • 这是为什么? CPU 内部的高速缓存 • 原来 CPU 的厂商早就意识到了内存延迟高,读写效率低 器——虽然小,但是读写速度却特别快。这片小而快的 存储器称为缓存( cache )。 • 当 CPU 访问某个地址时,会先查找缓存中是否有对应的 数据。如果没有,则从内存中读取,并存储到缓存中; 如果有,则直接使用缓存中的数据。 • 这样一来,访问的数据量比较小时,就可以自动预先加 载到这个更高效的缓存里,然后再开始做运算,从而避 免从外部内存读写的超高延迟。 缓存的分级结构 查看高速缓存大小: lscpu • 可以看到我们0 码力 | 147 页 | 18.88 MB | 1 年前3ThinkJS 1.2 中文文档
运⾏行时的⼀一些⽂文件 │ │ ├── Cache -‐-‐-‐-‐ 缓存⺫⽬目录 │ │ ├── Data -‐-‐-‐-‐ 数据⺫⽬目录 ⾏行为是 ThinkJS 扩展机制中⼀一项⽐比较关键的扩展,⾏行为可以独⽴立调⽤用,也可以整合到标签 (tag) ⾥里⼀一起调⽤用,⾏行为 是执⾏行过程中⼀一个动作或事件。如:路由检测是个⾏行为、静态缓存检测也是个⾏行为。 标签 (tag) 是⼀一组⾏行为的集合,是在系统执⾏行过程中切⾯面处调⽤用的。与 EventEmitter 不同,标签⾥里的⾏行为是按 顺序执⾏行的,当前的⾏行为通过 Promise js 框架类 lib/Lib/Core/View.js 视图类 lib/Lib/Util/Behavior.js ⾏行为基类 lib/Lib/Util/Cache.js 缓存基类 lib/Lib/Util/Cookie.js cookie 类 lib/Lib/Util/Filter.js 数据过滤类 lib/Lib/Util/Session.js0 码力 | 104 页 | 1.29 MB | 1 年前3CmlPHP v2.x 开发手册
通过字段值删除数据 获取总数 获取列表 注意事项 同时查询多个库 模型-MongoDB Orm详细Api 服务 视图 统一的API Html模板引擎 Blade模板引擎 锁-并发处理 缓存 语言包 日志 调试 Session自定义保存位置 框架自带的扩展包 插件 使用说明 系统挂载点 常用常量 命令行运行程序 守护工作进程 队列服务 2 1.6.22 1 composer、分布式数据库、分布式缓存(异常自动容灾),支持文件、memcache、redis、apc等缓存, 支持多种url模式、URL路由[RESTful],支持多项目集成、第三方扩展、支持插件。 CmlPHP在Model层做了缓存集成,开发者无需关注数据缓存的问题,按照相应的API调用即可获得最大 性能。从而从根本上避免了新手未使用缓存,或缓存使用不当造成的性能不佳的问题。也杜绝了多人 协同开发缓存同步及管理的问题 'runtime_cache_path' => Cml::getApplicationDir('secure_src').'/Runtime' . DIRECT ORY_SEPARATOR . 'Cache',//运行时模板缓存 、文件缓存目录 'runtime_logs_path' => Cml::getApplicationDir('secure_src').'/Runtime' . DIRECTO RY_SEPARATOR0 码力 | 143 页 | 1.54 MB | 1 年前3CmlPHP v2.x 开发手册
1.6.22 1.6.23 注意事项 同时查询多个库 模型-MongoDB Orm详细Api 服务 视图 统一的API Html模板引擎 Blade模板引擎 锁-并发处理 缓存 语言包 日志 调试 Session自定义保存位置 框架自带的扩展包 插件 使用说明 系统挂载点 常用常量 命令行运行程序 守护工作进程 队列服务 权限管理 数据验证 1 支持composer、分布式数据库、分 布式缓存(异常自动容灾),支持文件、memcache、redis、apc等缓存, 支持多种url模式、URL路由[RESTful],支持多项目集成、第三方扩 展、支持插件。 CmlPHP在Model层做了缓存集成,开发者无需关注数据缓存的问题, 按照相应的API调用即可获得最大性能。从而从根本上避免了新手未 使用缓存,或缓存使用不当造成的性能不佳的问题。也杜绝了多人协 绝了多人协 同开发缓存同步及管理的问题 CmlPHP支持根目录、子目录,单入口、多入口部署、支持独立服务 器、虚拟主机、VPS等多种环境,绝大部分开发环境可直接运行,无 需配置伪静态规则(部分低版本server只要修改框架URL配置即可,框 架会自动处理),快速上手开发。线上环境对SEO有要求时再配置伪静 态即可。 初始化一个项目 为了方便开发人员初始化框架所需的目录结构及文件,cmlphp提供了0 码力 | 245 页 | 720.67 KB | 1 年前3CmlPHP v2.x 开发手册
统一的API 1.6.9.1 2. Html模板引擎 1.6.9.2 3. Blade模板引擎 1.6.9.3 10. 锁-并发处理 1.6.10 11. 缓存 1.6.11 12. 语言包 1.6.12 13. 日志 1.6.13 14. 调试 1.6.14 15. Session自定义保存位置 1.6.15 支持composer、分布式数据库、分布式缓存(异常自动容灾),支持文件、 memcache、redis、apc等缓存,支持多种url模式、URL路由[RESTful],支持多项目集 成、第三方扩展、支持插件。 CmlPHP在Model层做了缓存集成,开发者无需关注数据缓存的问题,按照相应的API调 用即可获得最大性能。从而从根本上避免了新手未使用缓存,或缓存使用不当造成的 性能不佳的问题。也杜绝了多人协同开发缓存同步及管理的问题 'runtime_cache_path' => Cml::getApplicationDir('secure_src').'/Runtime' . DIREC TORY_SEPARATOR . 'Cache',//运行时模板缓存 、文件缓存目录 'runtime_logs_path' => Cml::getApplicationDir('secure_src').'/Runtime' . DIRECT ORY_SEPARATOR0 码力 | 251 页 | 973.37 KB | 1 年前3ThinkJS 2.2 中文文档
src/common/controller 控制器,放一些通用的控制器。其中 error.js 里错误处理的不同行为,项目里可以根据需要进 行修改。 src/common/runtime 项目运行时生成的一些目录,如:缓存文件目录,用户上传的文件临时存放的目录。 src/home home 模块,项目默认模块。可以在 src/common/config/config.js 中修改配置 default_module } cache 缓存配置, config/cache.js 。 export default { type: 'file', //缓存⽅方式 adapter: { file: { timeout: 6 * 3600, //6 hours path: think.RUNTIME_PATH + '/cache', //⽂文件缓存模式下缓存内容存放的⽬目录 path_depth: 2, //⼦子⽬目录深度 file_ext: '.json' //缓存⽂文件的扩展名 }, redis: { prefix: 'thinkjs_', //缓存名称前缀 } } }; cookie cookie 配置, config/cookie.js 。 export default { domain:0 码力 | 277 页 | 3.61 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
里构建,即: make -C build -j4 // 调用本地的构建系统执行 install 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8.0 • ↑ 设置安装路径为 /opt/openvdb-8 -DCMAKE_BUILD_TYPE=Release • ↑ 设置构建模式为发布模式(开启全部优化) • cmake -B build ← 第二次配置时没有 -D 参数,但是之前的 -D 设置的变量都会被保留 • (此时缓存里仍有你之前定义的 CMAKE_BUILD_TYPE 和 CMAKE_INSTALL_PREFIX ) -G 选项:指定要用的生成器 • 众所周知, CMake 是一个跨平台的构建系统,可以从 CMakeLists0 码力 | 166 页 | 6.54 MB | 1 年前3美团点评2018技术年货
最后,在运营配置上线后,如果发现问题,可以通过快速回滚,最大限度地实现“止损”。 接口SDK化 接口SDK化 对于运营数据,无论是通过数据库的落地方案、还是通过分布式缓存的方案,都无法彻底解决服务中心化 和服务抖动的问题。通过接入的SDK化,可以做到数据的本地缓存更新机制,解除对中心化服务的依赖, 大大提升服务的稳定性和性能。同时整个APPKIT服务变成可水平扩展,在扩展过程中也不会影响中心服 务的稳定性。 APPKIT打造稳定、灵活、高效的运营配置平台 - 美团技术团队 4.1 数据层 4.1 数据层 数据层作为最底层的数据存储,其保存了最基本的运营后台数据、流程数据和线上数据。对持久化的数 据,我们采用MySQL进行存储;对于缓存数据,我们采用了Redis的解决方案。这样数据层形成基本的两 级存储结构:MySQL保证了数据的持久性,Redis保证了数据获取的速度。 这里我们对底层数据划分为三个不同域:后台数据,相当于草稿数据,运营人员所有的操作都记录在这 APPKIT服务),配置 后台数据服务读取缓存数据。如果缓存数据不存在,则从数据库中读取数据,同时将数据库数据同步到 Redis缓存中。这是经典的数据获取模型,但它有以下几个缺点: 1. 数据调用有网络时延。 2. Redis缓存抖动(网络抖动)会对服务的稳定性产生影响。 3. 缓存的单Key存储的容量限制。 7.2 缓存方案 7.2 缓存方案 针对以上经典方案的缺点,我们做了进一步0 码力 | 229 页 | 61.61 MB | 1 年前3
共 263 条
- 1
- 2
- 3
- 4
- 5
- 6
- 27