分布式
1.随机算法
简单版:
public String getRandom(List<String> list){
Random rd = new Random();
int id = rd.nextInt(list.size()); // 范围
return list.get(id);
}
升级版:根据不同权重随机
优化: 根据每个权重,添加多少
2.轮询算法
平滑加权轮询:
原理:
4.哈希算法
场景:一台客户端访问,经过nginx代理,此时若是第一次请求给到A,第二次若是去到B,session没了,所以利用hashcode让这个ip的请求都去到同一台服务器
雪花算法
痛点:wordId,每台机器都需要配不同的id。 美团解决方式:利用zookeeper的有序节点
分布式事务
问题场景:不同服务负责不同的服务,如何做到事务一致
通过消息通知,A服务完成之后,先不提交事务,而是发送消息给B服务,告知我这边OK了,同时B服务完成后也告知A,A和B分别收到消息后,再进行提交事务,否则回滚
协调者:创建全局事务,可以提交全局事务,和回滚全局事务
实现:使用切面,控制与数据库连接的类,对commit方法的点进行切面,若是成功则commit,有异常则rollback