分布式笔记
分布式(更新ing)
分布式项目的整合:
https://www.processon.com/view/link/6281b28c0e3e746f2b12d0ee
分布式架构会把一个项目按照特定要求(多按照模块或功能)拆分成多个项目,每个项目分别部署到不同的服务器上。
RMI
运程方法调用

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注册中心

客户端常用命令
1 | ls [-s][-R] /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

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

由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协议代理
搭建虚拟主机
负载均衡