Dubbo

dubbo是一个轻量级的服务之前通过RPC(一种远程调用)协议通信的分布式服务框架

  • RPC协议(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务

dubbo 架构

节点角色说明:

  • 序列化

在pojo里面引用Serializable接口实现序列化

把java对象转换成二进制流叫做序列化,相反把二进制流转换成java对象为反序列化

常见的序列化转换格式

  • json->java对象
  • xml->java对象
  • 二进制->java对象(Serialzable)

序列化的作用就是为了不同jvm之间共享实例对象的一种解决方案

由java提供此机制,效率之高

dubbo高级属性

负载均衡

作用是用于分配客户端的请求,进而防止服务提供者的负载过高,导致宕机

  • @Service(weight=100),设置服务器的权重,值越大则处理越多
  • @Reference(loadbalance = “random”),设置负载均衡策略
    • random 随机选一台
    • RoundRobin 按照权重
    • LeastActive 选择请求排队数量少的机器,进行处理
    • ConsistentHash 一致性 Hash

什么是Zookeeper

单机锁
  • 在单机程序中,当存在多个线程可以同时改变某个变量(可变共享变量)时,为了保证线程安全(数据不能出现脏数据)就需要对变量或代码块做同步,使其在修改这种变量时能够串行执行消除并发修改变量。
  • 对变量或者堆代码码块做同步本质上就是加锁。目的就是实现多个线程在一个时刻同一个代码块只能有一个线程可执行
分布式锁

分布式锁的作用:在整个系统提供一个全局、唯一的锁,在分布式系统中每个系统在进行相关操作的时候需要获取到该锁,才能执行相应操作。

分布式锁的实现可以是 Redis、Zookeeper,相对来说生产环境如果使用分布式锁可以考虑使用Redis实现而非Zk。