mysql当注册中心,浅谈微服务注册中心与分布式锁

问题的引出:

前几天面试了一个童鞋,他说熟练掌握分布式开发,微服务设计实现,然后我就简单问了几个问题,感觉聊得还挺愉快的,这里记录一下相关的知识点

1.简单对比了注册中心ZooKeeper与MySQL

format,png>dubbo框架注册中心使用ZooKeeper可以替换为MySQL吗?

不可以,MySQL是数据库<

format,png

format,png>注册中心注册的是什么东东?

微服务启动时生产者向注册中心节点写入信息,消费者去注册中心取对应数据。<

format,png

format,png>写入的信息是什么东东,消费者取到的又是什么东东?

额,不太清楚。<

format,png

format,png>咱的微服务不就是个RPC调用吗,写入的是服务的URL地址啊,这和咱请求一个URL不是一样的吗,知道了地址不就可以访问了吗?

对对对,刚才有点短路,是URL地址,RPC调用。<

>那竟然是数据,MySQL也可以保存啊,注册中心换成MySQL没问题吧?

额,但是微服务都是分布式的,都是不同的数据库  <

>那我的分布式服务就共用一个MySQL,这没问题了吧,我建个表,把URL地址写到数据库表里,从表里查数据?

恩,您这么一说确实没问题,但是感觉怪怪的,您帮我捋一捋吧<

>咱就举一个最简单的例子,zkClient断开时会自动删除临时节点信息,这样某个生产者挂掉时,URL地址就移除了,MySQL可以自动删除废弃的URL吗?

哦,明白了,多谢了。<

2.简答谈了一下为什么要用Redis

>为什么要使用redis呢?

缓存,加快访问速度<

>缓存放到本地不是更快吗,redis还得请求一次

恩,本地内存资源宝贵,

我们的图片都是另外启的图片服务器<

>如果本地内存无限大,那就不需要redis了吧

额,无限大的内存,好像是不需要redis,直接本地缓存<

>那你觉得用redis还带来哪些好处?

恩,redis作为中间件,当然还起着解耦的用,多个系统可以通过redis交换数据;同时redis还可以用来集中式管理,比如session会话管理。<

>恩,说的不错,看来这次没有短路。

3.简单设计一个分布式锁。

>现在我的分布式系统中有一个公共资源,各个系统访问公共资源数据时,我需要上一把锁,你如何design?

这个我只需要保证在分布式访问中,每次仅有一个服务操作公共资源即可,可以利用中间件技术吗<

format,png

format,png>当然可以,给出你的思路就好。

mq就可以,我把一个个请求顺序放到一个队列里,然后一个消费者一次取一条慢慢处理<

format,png

format,png>恩,可以的,既然说到mq,那mq还带来哪些好处

mq同样作为中间件,可以解耦合,提供了异步处  理机制,能够起到缓冲的作用<

format,png

format,png>如何起到异步处理机制,有用到的案例吗?

有的,我们的微信公众号后台开发,有的消息处理需要调用各个系统拉取账单数据,而5秒内没有响应微信就会断开连接,所以我们收到用户消息后,立即返回,然后消息  入队列,再调用微信客服接口,将消息推送给用户<

format,png

format,png>恩,不错,假如让你使用ZooKeeper实现下分布式锁,如何设计?还是思路即可

zk的话借助临时节点,递增的序号,watch监听事件, 应该也可以,让我整理一下思路<

format,png

format,png>恩,我能get到你的点,你整理下

还是以保持顺序性为前提,然后分布式服务连接zk,获取同一个父节点下的所有节点序列号,然后每个节点监听它之前的节点,只要之前的节点处理完删除节点后,就轮到  自己处理了,否则等待前一个节点,大概这样吧<format,png

format,png>恩,思路有了,实现起来把握住几个点就OK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值