这样,我们的架构模式变成一个Redis节点切片包含一个主Redis和一个备Redis。在主Redis宕机时,备Redis接管过来,上升为主Redis,继续提供服务。redis一致性哈希算法主备共同组成一个Redis节点,通过自动故障转移,保证了节点的高可用性。则Sharding架构演变成:
vc+1zbO1xLjfv8nTw9DUoaM8L3A+DQo8cD6437fDzsrBv8/Co6y8tMq5ssnTw1NoYXJkaW5nt9bGrKOs0ru49rWltsC92rXju7nKx7PQtaPBy7rctPO1xLfDzsrRucGmo6zV4sqxztLDx7u50OjSqr340ruyvbfWveKho82os6PH6b/2z8KjrNOm08O3w87KUmVkaXO2wbLZ1/fBv7rN0LSy2df3wb+y7tLsuty086OstsGzo7OjysfQtLXEyv2xtqOs1eLKsc7Sw8e/ydLUvau2wdC0t9bA66OstvjH0rbBzOG5qbj8tuC1xMq1wP3K/aGjPGJyIC8+DQq/ydLUwPvTw9b3tNPEo8q9yrXP1rbB0LS31sDro6zW97i61PDQtKOstNO4utTw1ru2waOszazKsdK71ve50rbguPa006Gj1NpTZW50aW5lbLzgv9jPwqOsu7m/ydLUsaPVz73ateO5ytXPtcTX1LavvOCy4qGjPC9wPg0KPGgzIGlkPQ=="3利用代理中间件实现redis集群">3.利用代理中间件实现Redis集群上面分别介绍了多Redis服务器集群的两种方式,它们是基于客户端sharding的Redis Sharding和基于服务端sharding的Redis Cluster。
客户端sharding技术其优势在于服务端的Redis实例彼此独立,相互无关联,每个Redis实例像单服务器一样运行,非常容易线性扩展,系统的灵活性很强。其不足之处在于:
由于sharding处理放到客户端,规模进步扩大时给运维带来挑战。 服务端Redis实例群拓扑结构有变化时,每个客户端都需要更新调整。连接不能共享,当应用规模增大时,资源浪费制约优化。
服务端sharding的Redis Cluster其优势在于服务端Redis集群拓扑结构变化时,客户端不需要感知,客户端像使用单Redis服务器一样使用Redis集群,运维管理也比较方便。
不过Redis Cluster正式版推出时间不长,系统稳定性、性能等都需要时间检验,尤其在使用场合。
能不能结合二者优势?即能使服务端各实例彼此独立,支持线性可伸缩,同时sharding又能集中处理,方便统一管理?本篇介绍的Redis代理中间件twemproxy就是这样一种利用中间件做sharding的技术。
twemproxy处于客户端和服务器的中间,将客户端发来的请求,进行一定的处理后(如sharding),再转发给后端真正的Redis服务器。也就是说,客户端不直接访问Redis服务器,而是通过twemproxy代理中间件间接访问。
参照Redis Sharding架构,增加代理中间件的Redis集群架构如下:
twemproxy中间件的内部处理是无状态的,它本身可以很轻松地集群,这样可避免单点压力或故障。
twemproxy后端不仅支持redis,同时也支持memcached,这是twitter系统具体环境造成的。
由于使用了中间件,twemproxy可以通过共享与后端系统的连接,降低客户端直接连接后端服务器的连接数量。同时,它也提供sharding功能,支持后端服务器集群水平扩展。统一运维管理也带来了方便。
当然,也是由于使用了中间件代理,相比客户端直连服务器方式,性能上会有所损耗,实测结果大约降低了20%左右。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30885-3.html
海警
玩它一玩