Memcached Cache是集中式Cache,它仅仅是支持将数据能够分片分区的存储到一台或者多台的Cache Server实例中,但是这些数据并没有作冗余,因此任何一个服务实例不可用,都会导致部分缓存数据丢失。当然很多人采取持久化等方式来保证数据的完整性,但是这种方式对于效率以及恢复的复杂性都会有影响。
简单的来想,为什么不把数据在多保存一份或者多份呢,当其中一份不可用的情况下,就用另外一份补上。这就是最原始的Cache Client Cluster的构想。
这张图上需要注意四个角色:web应用程序(使用Cache的应用),缓存集群(Cache配置的虚拟集群),缓存节点(Cache的虚拟节点,在同一个Cluster中的缓存数据保持完全一致),缓存实例(Cache虚拟节点中实际包含的Memcached Cache服务端实例)。
应用仅仅操作缓存节点,不了解具体数据存储或数据获取是操作哪一个缓存服务端实例。(这点也就是Memcached Cache可扩展性的基础设计)。缓存集群又将多个缓存节点组成了虚拟的集群,通过数据冗余,保证了服务可用性和数据完整性。
缓存客户端集群主要的功能点( 比如缓存客户端集群主要有两种配置模式:active 和 standby):
1.容错。当被分配到读取或者操作数据的Cache虚拟节点不可用的情况下,集群其他节点支持代替错误节点服务于客户端应用。
2.数据冗余。当操作集群中某一个Cache虚拟节点时,数据会异步传播到其他集群节点。
3.软负载。客户端通过对操作的key作算法(比如采用简单的key hash再取余的方式)选择集群中的节点,达到集群中节点简单的负载分担。同时也由于这种模式,可以使得key都有默认的第一操作节点,此节点的操作保持时时更新,而其他节点可以通过客户端异步更新来实现效率提升。
4. 数据恢复。当集群中某一节点失效后恢复时,其数据可能已经完全丢失,此时通过配置成为Active模式可以将其他节点上冗余的数据Lazy复制到该节点(获取一个复制一个,同时只支持一个冗余节点的数据获取(不采取遍历,防止低效))。
Active模式拥有1,2,3,4的特性。Standby模式拥用1,2,3特性。Active在key不存在的情况下会有些低效,因为会判断一个冗余节点是否存在内容,然后决定是否修复当前节点。(考虑采用短期失败标示之类的,不过效率不一定高,同时增加了复杂度)
运行期动态扩容部署
Memcached cache客户端算法中比较出名的是Consistent Hashing算法,其目的也就是为了在节点增加或者减少以后,通过算法尽量减小数据重新分布的代价。采用虚拟节点,环状和二叉树等方式可以部分降低节点增加和减少对于数据分布的影响,但是始终还是有部分数据会失效,这点还是由于Memcached Cache是集中式Cache所决定的。
但如果有了Cache Cluster的话,数据有了冗余,就可以通过逐步修改集群中虚拟节点配置,达到对于单个虚拟节点的配置动态扩容。
支持动态部署前提:
配置文件动态加载。(配置文件可以在Classpath中,也可以是Http资源的方式)通过Cache Client 中Cache Manager可以停止Cache 服务,重新加载配置文件,即时生效。
当前动态部署的两种方式:
1.修改集群配置中某一套虚拟节点的服务实例配置,增加或者减少后端数据存储实例。然后动态加载新的配置文件(可以通过指定远端的http配置作为新的配置文件),通过集群的lazy的修复方式,逐渐的将数据从冗余节点复制到新的节点上来,最终实现数据迁移。
2.修改集群配置中某一套虚拟节点的服务实例配置,增加或者减少后端数据存储实例。然后动态加载新的配置文件(可以通过指定远端的http配置作为新的配置文件),在调用Cache Manager主动将数据由某一虚拟节点复制到指定的集群中,实现数据批量迁移,然后根据需要看是否需要修改其他几套虚拟节点配置。
存在的问题:
1. 当前没有做到不停止服务来动态部署。
2. 不论是lazy复制还是批量数据迁移,都是会将原本有失效时间的数据变成了无失效时间的数据
分享到:
相关推荐
nhibernate调用各种分布式缓存客户端,包括Velocity,SysCache,SharedCache,Prevalence,MemCache,EnyimMemcached elocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以...
Windows环境下Redis集群的搭建,非常详细的介绍了搭建的步骤、每一步的命令等。 包括Ruby环境的搭建,还有客户端如何连接集群。
Redis3.0集群代理系统, 并发接收客户端请求,计算Key的哈希槽值,转发到对应的缓存服务器,并将缓存服务器的返回值回传给客户端, 这样客户端只要访问集群代理系统,实现一次性定位访问,效率与单台缓存服务器...
redis-go-cluster, 在Go中,redis集群客户端实现 redis-go-clusterredis-go-cluster是基于 burd burd burd的客户端的一... 它在本地缓存 slot 信息,并在集群更改时自动更新。 客户端管理每个 node的连接池,使用,可以
Codis:实时计算结果增加缓存,重复利用,加快计算、查询速度。 Rest-Api:提供api接口,供客户端实时查询。 一个满足亿级流量实时计算,实时监控的系统,SpringBoot+ElasticSearch集群+RocketMQ+Codis集群架构...
:unicorn: FreeRedis FreeRedis是基于.NET的Redis客户端,支持.NET Core 2.1 + 、.... English | :rainbow: RedisClient保持所有方法名称与redis...server 5.0及更高版本) :high_voltage: 支持客户端缓存(需要redis-serv
redis集群采用无中心节点方式实现,无需proxy代理,客户端直接与redis集群的每个节点连接,根据同样的hash算法计算出key对应的slot,然后直接在slot对应的redisj节点上执行命令。在redis看来,响应时间是最苛刻的...
新控制时,其它集群中的所有aiCache服务器都同步刷新缓存内容。 14. 选择性日志压缩和抽取。 15. 根据时间或文件大小自动进行日志文件倒换。 16. 内置的全面健康监视器。 17. 对原始服务器实时监测,包括内容匹配。 ...
它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Aoache服务不错的替代品。Nginx相较于 Apache、lighttpd 具有占有内存少,稳定性...缓存数据:数据缓存是客户端第一次访问服务器的时候,nginx会把从服务器返
Redis是一个开源(BSD许可),内存中的数据结构存储,用作数据库、缓存和消息代理。它支持字符串、散列、列表、集合、带范围查询的排序集合、位图、超loglogs、带半径查询和流的地理空间索引等数据结构。Redis具有内置...
1/kafka是一个分布式的消息缓存系统 2/kafka集群中的服务器都叫做broker 3/kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接 4/kafka中...
免费好用,而且支持redis集群
第三部分为集群篇(第9~15章),着重讲解了Web集群后端MySQL数据库、Web集群共享存储NFS、Nginx反向代理负载均衡、Keepalived高可用、Memcached缓存及session共享、Nagios企业级监控等技术实战,最后为读者规划了一个...
支持多模式同时进行压力测试,独有的UDP攻击,采用新型的内核技术,发送数据包不经过缓存区直接对目标发送,且仅占CPU%5左右,自动探测系统是否支持raw发包提升攻击效率30%,安全稳攻击速度一流。为企业IDC提高自身...
第三部分为集群篇(第9~15章),着重讲解了Web集群后端的MySQL数据库、Web集群共享存储NFS、Nginx反向代理负载均衡、Keepalived高可用、Memcached缓存及session共享、Nagios企业级监控等技术实战,最后为读者规划...
然后对这些热数据、热用户等,推送到该应用部署的所有机器JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由客户端决定如何使用这些热key(譬如对热商品做本地缓存、对热用户进行拒绝访问、对热接口进行熔断...
客户端由于配置了集群的信息,也可以生成一致性hash,虽然跟服务器可能不一致,但是正常情况是命中率很高. 在集群没有节点丢失是100%命中,即出现不命中的情况,会同步服务的节点状况,发起二次请求,不影响后续的请求. ...
缓存、集群、分布式、CDN基于情况上。 项目技术栈: 前端: 用Dcloud 的 uni-app全系,基于vue.js和微信小程序开发模式。 目前支持APP(android、ios)、H5、微信小程序、支付宝小程序5端。 在特定场景可以用...
12.4.4 在集群节点上安装和配置iSCSI客户端 12.5 配置RHCS高可用集群 12.5.1 创建一个cluster 12.5.2 创建Failover Domain 12.5.3 创建Resources 12.5.4 创建Service 12.5.5 配置存储集群GFS 12.5.6 ...
主要内容 Redis 简介 Redis 特性 其他缓存对比 Redis 集群( 主从复制,Sentinel,Cluster) Redis 应用场景 Redis 常用客户端 Redis 功能演示 Redis