集群和分布式

集群和分布式

1. 集群架构

多台服务器,做相同的事情。达到分担大量同一请求的目的。

集群优点:
高伸缩性:根据实际的需求和负荷,动态调整集群节点的规模。
高可用性:即使集群中的某个节点发生故障,整个系统不会因此不可用。(主从复制解决数据备份问题,哨兵机制解决监控管理问题)
高并发:解决大量同时同一请求访问。

Nginx负载均衡器:
接收一切用户请求。
配置了所有节点的服务地址信息。
将请求分发到不同的服务节点上。

2. 分布式架构

多台服务器,分别处理不同的事情。达到应对不同请求的目的。

分布式优点:
划分业务为多个子业务,分别处理不同的请求,提高效率。

3. 集群和分布式区别

集群中的各个节点,具有完全相同的功能。分布式中的各个节点,分别具有不同的功能。
集群只是一种物理形态,将同一个应用部署到多台同样的服务器上。
而分布式是一种工作方式,核心是各个服务器之间的协作。

集群解决了同一时间,大量相同请求的问题。分布式解决了不同请求的问题。
因此分布式+集群,可以解决同一时间,不同的大量请求问题。好的架构,就是先分布式,再集群。

注:微服务和分布式很相似,区别就是分布式是部署到不同服务器上,微服务可以部署到一台服务器上。

redis实现分布式锁

1. 分布式架构的一个问题?

如何确保同一时间,只有一个服务(进程),可以访问某个共享资源。=>使用互斥锁
(锁,就是拿到某个共享资源)

2. 哪个服务拿到了锁?如何告知其他服务?

锁信息,可以放在redis中,使得所有服务都能轻松访问。

3. 单个redis实现分布式锁?

使用set命令,一个服务使用set命令获取锁后,要么服务完成释放锁,要么超时,redis自动删除该锁。

会不会自己申请的锁,被其他服务释放?如何解决?
为了使得只有获取锁的服务才能释放锁,而不被其他服务释放锁。=>所有服务获取锁的key相同,但是获取value是个随机值,是各自服务独有的,这样在释放锁时,其他服务不能释放自己申请的锁。(key表示资源,就是被加锁对象)

总结:单个redis实现分布式锁,set时,value值设置成随机值,是各个服务独有的。

4. 如何解决单个redis存在单点故障问题?

使用主从复制?=>不可行,因为主从复制是异步的,服务在获取主节点的锁后,主节点还没将锁信息同步给从节点,就挂掉了。造成后面服务也能获取该锁,也就是多个服务同时获得一把锁。

方法:采用多个master结点,redlock算法。
服务获取锁时,会向N个master结点循环发送锁请求信息,因此需要设置N次。
当客户端服务获得一半以上的锁,且总消耗时间小于超时时间。那么认为该服务获得了该锁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值