版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.背景在高并发的分布式的系统中,缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大星的请求直接落到系统的底层,系统是很难撑住高并发的冲击,分布式系统中缓存的设计是很重要的一环使用缓存的收益:加速读写,缓存一般是內存操作,要比传统数据库操作要快的多•降低后端的负载。缓存一些复杂计算或者耗时得出的结果可以降低后端系统对CPU、10、线程这些资源的需求本地缓存远端调用结果,减少服务间的调用,提升服务并发能力目前问题:目前业务中对缓存的使用并不多,在这次直播活动中,组件性能瓶劲很多,有很大一部分是可以通过缓存加速的疫情直播活动期间,几个核心服务由于人手、改造难度问题等,最后由罗陈珑做一了个缓存代理服务,把UC、EOMS的部分接口做了缓存代理,这些缓存本来应該由服务提供者来实现的数据一致性问题,加了缓存之后,随之而来的就是1—致性的问题数据一致性问题,加了缓存之后,随之而来的就是1—致性的问题,发现有数据不能及时更新目前大家对缓存使用方式不太统一,有的组件使用本地JVM缓存时封装太复杂,出现问题不好走位,清除缓存也不好做二目标降低分布式缓存技术使用门槛,将分布式缓存框架作为微服务开发必备的脚手架,让开发者更易使用,避免因技术门槛而放弃使用缓存•梳理核心业勢,使用分布式缓存加速服勢响应速度,降低服勢负载三.分布式缓存方案3.1@WafCacheable缓存3.1.1分布式缓存和本地jvm缓存为了提高接口能力,需要将一些顼繁访问但数据更新频率比较彳氐的放入缓存中,不要库或其他耗时耗资源的数据源中取。使用@WafCacheable注解,缓存过期时间可以根据数据更新频率自由设定,不设置默认为2小时。©WafCacheable标记的方法被拦截后,数据获取的优先级:本地jvm缓存>redis缓存〉数据源(DB、RMI、其他耗时耗资源的操作)©WafCacheable使用场景:高频访问彳矽页更新的数据ewafCacheabl^8OverridepublicModuleConfiggetByTenantCodeAndDefaultConfigCode(StringtenantCode,StringdefaultConfigcodTenanttenant=ths.tenantServ.ce.getByCodG(tcnantCode);if(tenant=null){returnnuLl;}Hetuhiithis.getByTenAntldAndDefaulXConflgCode(tenant・gGtId(),defaultConfigCode);注意:@WafCacheable对同一个类里的内调方法(A调B,B上加注解不生效),如果直接用this.BQ,加在B上的缓存不生效,需要使用${service}.B()调用(${service}指service实例)。3.1.2RMI缓存RMI(RemoteMethodInvocation)是指微服务提供的SDK中FeignClient方式申请的接口r具体参考http://note.youdao・com/noteshare?id=dda3f2af3976689339c9ffa5ba0b0675RMI上也可以加@WafCacheable注解。使用场景:对于数据变化频率在2小时以上的,为了减少服勢端的请求,提高接口性能缓存方式:本地jvm缓存作用域:客户端/消费者,拦截的包要注意,只拦截以下规则的包命名建议RMI上缓存时间不要超过同一接口service上的过期时间的1/2,最好设置为1/4.^FeignClient(url- _ “,value-rlassapi")pub二丄cinterlaceClassirie.niberApiextendsClientCallTypeApi{SWofCachcablc(cxpirc-GOG)€ApiOp0r,tion("®S学校的学段和年级“)6RequestMapping(value=M/v'/schoo*::/(schooicij/secticrn;"rmethod=RequestNothod・G£T)PagerResult<SchoolSectionsvo>querySchoolSections(^ReqvestKeader(value■^.^or-tcri-nt-'d")Stringtenant3.1.3关闭缓存方法1)酉8置文件中修改•在application.yml中加入waf:cache:enabled:false注意:生产环境禁止关闭缓存•调用rest接口关闭当前结点缓存2)管理接口动态设置3.1.4缓存配置默认情况下缓存是开启状态,缓存队列大小3W,单个又竣20K以下会放入jvmf否则只放入redis,当然也可以通过缓存模式可以强制指定放入jvm.application.yml酉£置:waf:cache:enabled:true //■max-object-size:30荐缓存单糸-大小,单位Ab max-queue-size:20000荐缓讥队列上限3.1.5缓存注解的使用public@interfaceWafCacheable{*缓存过期时间,单位是秒*默认72。0秒々小时丿*/intexpire()default7200;*缓存key,支持自定义*如果没有设置使用默认方式*自定义Jcey+请求参数*VStringkey() t"";/*才*是否强制放进J咖缓存不管缓存对象上限*默认不强制*只有当C^QheMo<^e-BOTjH^JforcePutIntQj™^i^S$^booleanforcePutlntoJvm()defaultfalse;*缓存模式"默认为jvm/氓dis都放*/WafCacheModecacheMode()defaultWafCacheMode.BOTH;3.1.5手动使用缓存CacheService是封装了jvm缓存和redis缓存,在使用sdk操作缓存时,会同时往jvm和redis都放-份,部分api支持对象大于设置的单个对象大小上限可不放jvm.RedisService封装redis的基本操作,包含分布式锁的操作。
3.2缓存清除/数据一致性问题—致的问题,当一个缓存能极大的提高系统负载能力,但同时也引入新的问题,业务规则或缓存的源数据发生变化时.—致的问题,当一个3.Z1缓存清理的难点•缓存key不确走。通过©Wafcacheable注解设置的缓存,缓存key的生成策略为如果设置了自立义key的前缀,则使用自立义key前缀+各个参数拼接而成,如果没有设置自左义key则使用包名+类划+方法需+各个参数拼接而成。labileStxiw 剛“Sxriaa “Scmb? Cojaetd {SrxiD^Qfferah-r*vSTTir>j9uffer<|;if|2tr2aantil«.i»A»tBlank|t«y||{⑷key”)•>«I9b・“emigrgetS皿I.acpead厂.•》・append(r«a/>dR5re>iarlArgtranu?-null<a»rguM3tv.leeajchC|{ate.serQ「••〉・ypeadiW勿・toRCRSxtlaoiftwtnens丨”rwtaniM>.coStria^11.r«plaot(:・:;•》: •{•, :"「:・•:■»*«¥:a*).r«pl»c«{‘ ••| |•<: r<pl«c»9»«nr:**|.r«placa(-•缓存存在多个节点中。缓存不仅有微服务提供者内部缓存,还有客户端(消费端)的缓存,一般是在rmi通过紗afcacheable设置的。缓存既有jvm缓存也有redis缓存。jvm缓存存在于每个application中。这样意味着需要淸除所有微服务节点内部的jvm缓存及redis缓存,包括客户端(消费者端)缓存。3.2.2LRU+TTL算法缓存更新在被动更新缓存上是采用LRU+TTL组合算法实现缓存更新,也就是说只要缓存达到任一清除条件(缓存过期或LRU)都会被清除LRU算法,当缓存容量不足时(控制了缓存上限,避免00M),淘汰最久没有被访问过的,始终保持热數据的缓存命中率TTL算法TTL算法r也就是超时剔除r给缓存i手动设置一个过期时间,当超过时间后,再次访问时从数据源重新加载并设回缓存期,3.2.3主动通知缓存更新(立即生效)由上层应用在配置更新后,通过MQ消息通知给微服务,微服务各应用H•点以广播消息的方式消费,淸除本节点内的缓存。适用场景:适用数据一致性要求高,对数据不一致容忍度低的场景优点:数据一致性高,实现方式简单,上层应用改动比较小,只需在缓存的数据发生变化后发送一条mq消息缺点:上层应用需要按照淸除缓存规则在相应的增、删、改的功能处增加mq消息。缓存key规则说明:英文逗号表示且的关系,检索同一个key中包含的逗号分隔的多个关键字・;"英文分号表示或的关系,检索封号分隔的多个key.例如:cityr010;getAIICity解释:检索缓存key中同时包含city和010字符串的key检索缓存key中包含getAIICity的key.33内置缓存管理3.3.1开关缓存请求/cache/editW请求GET类型接口 手动控制缓存开关描述 注意:不要轻意关闭整个缓存,目前生产上流量比较大,关闭整个缓存会对数据库有较大压力如需紧级让某个开关生效,可以调用清除缓存的方法单个清缓请求 http://xxxxx/叩p/cache/edit?enable=close关闭缓存示例http://xxxxx/app/cache/edit?enable=t开后缓存响应true开后缓存示例false关闭缓存
3.3.2打印jvm缓存请求W请求类型接口描述app/cache/stackGET以json格式输出全部jvm缓存,包括key及value此方法可用于调试缓存内变量请求示例响应示例http://xxxxx/app/cache/stack响应示例{ncodeH:200,nmessageH:'-result'1: {}}3.3.3打印jvm缓存队列大小请求w请求类型接口描述请求示例响应示例/cache/stack/sizeGET仅输出jvm内缓存key的个数http://xxxxx/app/cache/stack/size{"size":3963}3.3.4打印所有jvm缓存key请求地/eache/stack/keys址请求类GET型
接口插 输出当前进程中所有jvm缓存的key述请求示http://xxxxx/app/cache/stack/keys例响应示例3.3.5模糊搜索缓存中的key请求地/cache/keys/_search址请求类GET型接口描模糊搜索某个key,大代无关述请求示http://xxxxx/app/cache/keys/_search?q=com例响应示例3.3.6清除全部jvm缓存请求地/cache/clearjvm址请求类GET型接口描清除全部jvm内存述注意:尽呈不要使用清除全部jvm内存,可以使用清除特走缓存操作请求示http://xxxxx/app/cache/clearjvm例响应示例晌应示例{"code":200z"message":,,0K"/•'resulf: {}}3.3.7清除指定key缓存请求地/cache/clear址请求类POST型接口描 清除缓存,可以清除多个缓存述请求示http://xxxxx/app/cache/clear例 body:[■key"1响应示 响应示例例Hcoden:200,Hmessage":nOKHfnresultn: {}}3.3.8缓存状态请求地址请求类型接口描述请求示/cac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 31455.1-2025快速公交(BRT)智能系统第1部分:总体技术要求
- 道路运输管理与维护操作指南(标准版)
- 出纳制度的基本原则
- 基础设施安全管理与维护指南
- DB61T 2094.4-2025天麻生产技术规范 第4部分:天麻蒴果
- 采购合同履行与争议解决制度
- 办公室消防安全管理制度
- 养老院老人健康监测人员职业发展规划制度
- 2026年闵行区启智学校第一学期编外教师招聘备考题库及一套答案详解
- 养老院外出就医制度
- 云南省大理白族自治州2025届高三上学期二模考试 英语 含解析
- 南京师范大学中北学院《无机及分析化学实验实验》2023-2024学年第一学期期末试卷
- 村干部末位淘汰实施细则(3篇)
- 中国近代史纲要西南政法大学练习题复习资料
- 物理(成都专用)2025年中考物理终极押题猜想(解析版)
- 风电、光伏项目前期及建设手续办理流程汇编
- 内河船舶制造行业发展前景及投资风险预测分析报告
- NeuViz 16 射线计算机断层摄影设备产品信息手
- 2021修订《城市规划设计计费指导意见》
- 叔叔在侄子订婚宴致辞
- 电子地图的基本构成与数据类型
评论
0/150
提交评论