分布式系统(zoopkeeper动物园守护者+dubbo))面试题

https://blog.csdn.net/wuzhiwei549/article/details/80692278

分布式系统

分布式其实就是分散而已,不等于并行。比如把一个程序,有多步,每一小步在一个系统上执行,然后组合成一个大的系统。更多的时候和并行之间相互配合,提高效率。
优点:增加可靠性,我们将一个大的服务分散成小的服务,降低
增加可扩展性。

分布式系统和微服务

微服务:
和分布式很相似。
是把单体服务拆分成很多独立都小个体,降低耦合性。每个小服务只负责一个功能。

分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,服务之间也是通过rpc来交互或者是webservice来交互的。
微服务可以部署在同一个机器或者不同的机器,把一个整体拆分成很多小的服务单元。
分布式部署的是多个服务器部署多个子模块,可以干不同的事也可以干相同的事。,比如集群部署,它是把相同应用复制到不同服务器上。现在分布式和集群都互相交叉使用,比如一个分布式系统中的一块加集群增加容错性。

微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难

RPC 远程过程调用

https://www.jianshu.com/p/2accc2840a1b
在单独程序中我们可以直接通过创建类的对象然后调用该方法。
然而在分布式系统中,我们把不同的程序放在不同的服务器,而如果我们要调用其他服务器中的方法,我们就不能很方便的直接调用。
这时我们就可以使用RPC。当然你也可以说使用restful调用,但是每次调用都写http请求显然十分麻烦。这时RPC就派上用场了。

所以他的用处就是:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

RPC 通信过程

RPC通信是直接使用二进制数据包。
这个过程中最重要的就是序列化和反序列化了,因为数据传输的数据包必须是二进制的,你直接丢一个Java对象过去,人家可不认识,你必须把Java对象序列化为二进制格式,传给Server端,Server端接收到之后,再反序列化为Java对象。

序列化和反序列化

序列化是把对象的状态信息(对象)转化为可存储和传输的形式。
比如把对象转化成XML文件或字节等格式,能够传输存储(对象持久化)
反序列化就是相反的过程。

dubbo

https://blog.csdn.net/zxljsbk/article/details/81626559
(一个jar包)基于RPC远程过程调用 的分布式服务框架。只有在分布式的时候,才有dubbo这样的需求。让分布式服务之间调用效率更高。

springcloud使用http restful进行通信。
这框架包括zookeeper,zookeeper是他的注册中心。

功能

  1. 远程调用:使用RPC进行通信。
    它主要是使用高效的网络框架和序列化框架,让分布式服务之间调用效率更高。
    采用注册中心管理众多的服务接口地址,当你想调用服务的时候只需要跟注册中心询问即可,不用像使用WebService一样每个服务都得记录好接口调用方式。
  2. 监控中心:实现对服务方和调用方之间运行状态的监控,还能控制服务的优先级、权限、权重、上下线等,
  3. 注册中心也能实现高可用(ZooKeeper)。
  4. 负载均衡:采用软负载均衡算法实现对多个相同服务的节点的请求负载均衡。
    四大组件:消费者,生产者,注册中心,监控器
    在这里插入图片描述

zookeeper

zookeeper 注册中心

他是集群的管理者,监视着集群中各个节点的状态,并进行下一步合理操作。负载均衡。
在这里插入图片描述

分布式锁

为什么要使用:

在单机引用的时候,如果对共享变量访问我们可以使用多线程,加同步锁。
而分布式是集群,一个应用要部署到多台机器上然后做负载均衡。
在这里插入图片描述
如果多用户操作一个变量A,由于变量A是在不同服务器上,而java多线程的锁是基于单个JVM的,所以就不能保证多机器加锁。所以我们就要使用到分布式锁来处理多机器的共享资源。
所以我们要保证在分布式环境下,一次只能单机中的一个线程来操作共享变量。

三种实现:

基于数据库实现
基于redis缓存实现

SET resource_name my_random_value NX PX 30000

设置过期时间,超过时间自动释放锁
缺点:
如果master加锁后,master会把锁同步到从服务器,而这时 master死机,我们从服务器还没有拿到锁信息就晋升为master,这时就相当于没加上锁。

基于zookeeper实现
zookeiper的存储结构为树
在这里插入图片描述
节点叫Znode。

  1. 持久节点

springcloud和dubbo的区别

dubbo的话,很多其他服务要自己装,比如配置注册中心用zookeeper,而SpringCloud把整个分布式方案都整合好了注册中心使用erueka。
dubbo使用rpc通信二进制传输,而Springcloud使用http的rest方式一般用json格式文件。
dubbo国内大公司用的比较多,成熟稳定。
springcloud更新快。国外用的比较多。

发布了103 篇原创文章 · 获赞 94 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/102511584