经过服务化之后,拆分出的用户中心,经过一段时间的监控,发现几个问题:
1.每天的调用次数大约在2-3亿之间
2.60%的调用集中在TOP100个接口之中
3.用户中心的memcached压力在用户中心的线程排在第一个
4.个别接口成为了服务化过程中的瓶颈
5.memcached使用过程中监控到数据每天有几千次的超时调用,导致服务最大单次耗时被拉长
6.网络开销
7.序列化与反序列化,在缓存中的开销
通过分析针对现有缓存模型进行了重构,加入一层本地缓存
解决思路:减少dubbo请求,把一些不易改变且访问量巨大的数据缓存在本地,通过多级缓存的模式,从而提升系统性能。
在分布式集群的环境下,要解决上述的问题把问题拆分成:
1)如何管理本地缓存数据
2)如何同步各节点间的数据
3)如何监控本地缓存使用情况,最终反应的数据我们需要重新采集和分析。 1.引用本地缓存Ehcahe,简单快速,很好的继承现有的spring,速度比memcached快非常的多。
2.改造现有应用,由于现有接口都是保持不变,只要增加新的模板即可解决,对于省平台的重构将会非常小,并且是可控的
3.为了解决节点间的同步:
1)刚开始我们采取的策略是通过zookeeper的特性,进行节点监听,然后master做分发,但是使用后发现问题(什么问题 你懂的)
2)为此我们引入了activemq,省平台已经集成了这个中间件,所以基本上增加一些配置就能为我们所有,这里最重要的也是本次改造的一个关键,通过mq的订阅模式(区别于我们一直使用队列模式),来解决节点的分发 4.最后我们需要动态的对线上的节点进行监控,我们选择zookeeper的特性,通过写入监控数据,然后统一采集,来分析我们线上缓存的一个使用情况,比如:命中率,调用次数,缓存堆大小等
技术交流群: 534368042
相关推荐
在Android应用开发中,远程图片的获取和本地缓存是一个重要的优化策略,旨在提升用户体验,避免因长时间等待网络加载而导致的无响应异常。通常,Android系统会在UI线程执行耗时操作超过5秒时抛出ANR(Application ...
相反,Redis缓存是基于远程的Key-Value数据库,它将数据存储在独立的服务器上,可以为多个应用实例提供共享的、持久化的缓存服务。Redis支持丰富的数据结构(如字符串、哈希、列表、集合、有序集合)以及事务、发布/...
总之,“远程图片本地化”2.0.2商业版插件是Discuz论坛提升用户体验和内容完整性的重要工具,它简化了图片管理,增强了论坛的稳定性。对于拥有大量图片资源的社区来说,这款插件无疑是不可或缺的选择。
在PHP开发中,“php远程图片本地化”是一个常见的需求,主要目的是将网络上的远程图片下载到本地服务器,以便提高网站的加载速度,减少对外部资源的依赖,同时也有利于图片的管理和备份。以下是对这个主题的详细阐述...
在移动应用开发中,本地缓存机制扮演着至关重要的角色,它能显著提升用户体验,减少对网络的依赖,尤其在离线或者网络不稳定的情况下。...通过合理的设计和实现,本地缓存可以显著提升移动应用的用户体验。
多服务器环境下的ISCSI本地缓存应用,需要考虑缓存一致性问题。当多个服务器同时访问同一份数据时,必须确保每个服务器的缓存都能及时、准确地反映出数据的最新状态。为此,通常会采用缓存同步技术,例如Write-...
这可能是一个服务或驱动程序,负责管理和优化iSCSI连接的本地缓存操作。当这个程序运行时,它会监控iSCSI会话,智能地将数据存储在本地缓存中,以便于快速访问,同时与远程存储系统保持同步,确保数据一致性。 综合...
这样的功能对于确保网站的性能和用户体验至关重要,因为将图片本地化可以减少加载时间,特别是对于大量外部资源的情况。下面我们将详细探讨这个过程涉及的关键知识点。 1. **Java和JSP基础**: Java是一种广泛使用...
本文将深入探讨.NET中的缓存机制如何用于优化本地化资源的加载和使用。 首先,让我们了解一下.NET的内存缓存。在.NET Framework和.NET Core中,System.Runtime.Caching命名空间提供了MemoryCache类,用于在应用程序...
通过缓存,我们可以避免重复计算或频繁访问较慢的数据源(如数据库或远程API),从而显著提高应用的响应速度。 #### 二、缓存的作用 1. **提升数据读取效率:**通过存储常用或重复使用的数据副本,缓存能够快速...
1. **易用性**:极光远程协助2009本地版以其简洁的界面和直观的操作流程著称,让用户无需复杂的设置即可快速上手,进行远程会话。 2. **安全性**:为了保障数据的安全,该软件通常会采用加密技术,如SSL/TLS,确保...
服务化后,调用方只需要通过远程过程调用(RPC)的方式,像调用本地函数一样轻松获取所需的数据。例如,通过简单的`User = UserService::GetUserById(uid);`就可以获取到用户信息,而无需关心底层的数据传输、序列化...
UE4.20版本引入了对Gradle的集成,这是一款广泛用于Android应用构建的自动化工具,它使得游戏引擎可以更有效地与Android Studio和其他Android开发环境协同工作。以下是关于UE4.20中.gradle本地缓存文件及其相关知识...
这样,当网络连接不稳定或断开时,应用程序可以从本地缓存中读取这些预先下载的瓦片,而不是尝试从远程服务器获取。 文件列表中的"RegexUtils.java"可能是一个包含正则表达式工具的类,可能用于处理和验证文件路径...
标题中的“ecshop_商品描述远程图片自动本地化插件”指的是一个专为ECSHOP电子商务平台设计的扩展功能,它的主要目的是解决商家在商品描述中引用远程图片时遇到的问题。ECSHOP是一款开源的PHP购物系统,广泛应用于...
- 远程区域:通过RMI API实现远程缓存,适合多客户端共享缓存数据的场景。 - 可插拔控制器:JCS的组合缓存器允许开发者灵活地选择和配置不同的缓存区域,简化了缓存管理的复杂度。 #### 4. **缓存的整合与触发** ...
这样的框架通常包括本地缓存(一级缓存)和远程分布式缓存(二级缓存)。在这个场景中,`ehcache(Caffeine)` 作为一级缓存,而 `redis` 作为二级缓存。 ### 1. Ehcache (Caffeine) Ehcache 是一个广泛使用的 Java ...
Oracle Coherence是一款高效的企业级数据缓存系统,它为分布式应用程序提供了数据管理、缓存以及服务网格的功能。本文将深入探讨Coherence的核心特性,包括其QuickStart和编程模型,四种缓存类型,数据管理模式,与...
- **自动化缓存**:通过安装特定组件,根据规则自动实现的缓存,如反向代理和输出缓存。 - **编程实现缓存**:需要开发者手动实现的业务数据缓存。 ### 影响缓存命中率的因素 #### 主要因素 - **业务需求的时效性*...