分布式系统常见问题总结(一)

1.分布式系统中的缓存

a.CDN:缓存一些静态资源,距离用户最近的网络提供商提供。

b.反向代理:缓存静态资源,访问网站数据中心前访问。

c.本地缓存:缓存在本地的访问内容,常用的本地缓存开源框架有JCache,LocalCache。

d.分布式缓存:缓存在分布式缓存集群中,常用的分布式缓存开源框架有redis,memcache。


2.缓存和DB的数据不一致

a.更新DB后需要同步更新缓存,如果更新缓存失败,会导致数据不一致,可以加入retry机制,如果一直不成功,缓存服务器可能出问题了。

b.设置缓存过期时间,对于一些业务允许出现短期不一致的情况可以这样做。


3.缓存扩容:一致性Hash算法

缓存扩容需要满足两个需求:

a.命中率不能变低,比如原来有三台缓存服务器,需要增加一台,增加一台后,在以前的服务器上都找不到以前存的缓存了,这样肯定不行。

b.各个缓存的压力需要保持一致,缓存需要分散在每个缓存服务器上。

从网上找了个图,看下面的hash环,区间是0到2的32次方,node1至node4代表四台服务器,我们先计算数据Key的hash值,看这个hash值离哪个node节点要近一些就存放在那台机器上。如果添加一个node5只要放在hash环上就行了。比如我们放在node1和node2之间,则只会影响node1和node2之间的缓存命中率。但有一个问题,缓存压力没有分散在各个缓存服务器上。

改进的一致性hash算法:加入虚拟节点的概念,node1的虚拟节点有V0-V10,node2的虚拟节点有V10-V20以此类推,把虚拟节点分散到hash环上,先计算Key的hash值在离哪个虚拟节点近,然后通过虚拟节点找到真实的缓存服务器。新加的服务器同样把它对应的虚拟节点分散在Hash环上,这样可以同时保证命中率和各个服务器缓存压力一致。



4.分布式下的Session问题

a.Session复制:对于少量服务器可以这样做。

b.Session绑定:同一IP或者同一用户的请求发送到同一个服务器。

c.Session服务器:专门的服务器基础来管理Session,最好采用这种方案,除了管理Session,当然可以在Session中加入SSO(单点登录),用户服务等功能。


5.数据库读写分离,数据复制延迟

首先我们要知道,主从数据库由于网络原因等其它原因,一定会出现主从数据库短时间的数据不一致的情况。对于某些业务需要强调强一致的,我们可以让他从主数据库读取(我发了一篇文章,我需要马上看到),对于对一致性要求不高的,我们可以从从数据库读取(我发了一篇文章,别人看)。


7.负载均衡算法实现

a.轮询

b.加权轮询

c.随机

d.最少连接

e.源地址散列

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值