分布式笔记

分布式(更新ing)

分布式项目的整合:

https://www.processon.com/view/link/6281b28c0e3e746f2b12d0ee

分布式架构会把一个项目按照特定要求(多按照模块或功能)拆分成多个项目,每个项目分别部署到不同的服务器上。

RMI

运程方法调用

image-20220516101255871

API

Remote

​ 远程调用接口

RemoteException

​ 承了Remote接口的接口中,如果方法是允许被远程调用的,需要抛出此异常。

UnicastRemoteObject

​ java.rmi.server.UnicastRemoteObject
​ 此类实现了Remote接口和Serializable接口。
​ 自定义接口实现类除了实现自定义接口还需要继承此类。

LocateRegistry

​ java.rmi.registry.LocateRegistry
​ 可以通过LocateRegistry在本机上创建Registry,通过特定的端口就可以访问这个Registry。

Naming

​ java.rmi.Naming
​ Naming定义了发布内容可访问RMI名称。也是通过Naming获取到指定的远程方法。

zookeeper注册中心

image-20220516101724270

客户端常用命令

1
2
3
4
5
6
7
8
9
10
ls [-s][-R] /path
查看列表
get [-s] /path
查看内容
create /path [data]
创建指定路径信息
set /path data
设置节点内容
delete /path
删除节点

注册内容

创建/demo
2 添加依赖
3 编写代码
创建zk对象获取连接
new watcher()内部重写process()
发布任务create()
ZooDefs.Ids.OPEN_ACL_UNSAFE
表示权限
CreateMode.PERSISTENT_SEQUENTIAL
永久存储,文件内容编号递增
4 查看上传数据

查看内容

​ 创建zk对象获取连接
​ new watcher()内部重写process()
​ 获取列表
​ zookeeper.getChildren(“/demo”, false)
​ zookeeper.getData(“/demo/“ + child, false, null);

RPC实现(RMI+Zookeeper)

Dubbo

image-20220516101839047

​ 分布式服务框架
​ 负载均衡
​ 负载均衡是在集群前提下,当访问整个集群时,集群中每个节点被访问次数或频率的规则。
​ 设置
​ @Reference 客户端
​ 注入的是分布式中的远程服务对象
​ @Reference(loadbalance = “roundrobin”)
​ 调用的服务采用的负载均衡算法
​ @Service服务端
​ @Service(loadbalance = “random”)
​ 当前服务采用的负载均衡算法
​ @Service(weight = 4)
​ 设置权重
​ 内置策略
​ Random
​ 随机。随机访问集群中节点。访问概率和权重有关。
​ RoundRobin
​ 轮询。访问频率和权重有关。
​ 性能好的服务器权重应该高一些。
​ LeastActive
​ 活跃数相同的随机,活跃数高的放前面。
​ ConsistentHash
​ hash 相同参数发送到同一个提供者
​ 完整项目
​ provider
​ dubbo.protocal.port
​ 需要设置端口

RabbitMQ

image-20220516101905531

​ 由Erlang语言编写的基于AMQP的消息中间件。
​ 消息中间件作为分布式系统重要组件之一,可以解决应用耦合,异步消息,流量削峰等问题。
​ 账号管理
​ 1 创建账户
​ ./rabbitmqctl add_user username password
​ 2 给用户授予管理员角色

./rabbitmqctl set_user_tags mashibing administrator

​ 3 给用户授权
​ ./rabbitmqctl set_permissions -p “/“ mashibing “.“ “.“ “.*”
​ 4 登录
​ 交换机
​ direct 默认
​ fanout 广播
​ FanoutExchage
​ Binding
​ 绑定交换器和队列
​ BindingBuilder
​ Bind构造器
​ amq.fanout
​ 内置fanout交换器名称
​ topic主题
​ 运行RoutingKey包含匹配规则
​ binding方法里面第二个参数
​ BindingBuilder.bind(topicQueue).to(topicExchange).with(“com.a”);
​ Header首部

FastDFS

​ 分布式文件系统
​ 架构
​ 角色
​ client
​ Tracker Server
​ 跟踪服务器
​ 调度 负载均衡、记录集群状态信息、连接client和storage的枢纽
​ Storage Server
​ 存储服务器
​ 文件和文件属性存储的地方
​ 文件上传流程
​ 1. 客户端访问Tracker
​ 2. Tracker 返回Storage的ip和端口
​ 3. 客户端直接访问Storage,把文件内容和元数据发送过去。
​ 4. Storage返回文件存储id。包含了组名和文件名

Nginx

​ 反向代理服务
​ 代理方式
​ 正向
​ 架设在客户机和目标主机之间
​ 代理客户端,服务端不知道实际发起请求的客户端;
​ 反向
​ 架设在服务器端;
​ 代理服务端,客户端不知道实际提供服务的服务端;
​ 作用
​ HTTP协议代理
​ 搭建虚拟主机
​ 负载均衡