Java——》关于分布式

推荐:

分布式中的2大难题:分布式锁分布式事务
3高:高可用、高并发、高扩展

系统怎么做3高 ? 3高项目设计原则?

场景:看京东加载js的时候,url上js中间有逗号,尽量减少请求

4要

  • 数据量要少
  • 请求数要少
  • 路径要短
  • 依赖要少

1不要

  • 不要单点

识别热点数据?

场景:1亿茅台添加到购物车

  • 技术:uv、pv
  • 业务:计算提前添加购物车数量最多的商品

处理热点数据?

场景:1亿茅台添加到购物车

  • 优化:服务器的代码、连接数、业务逻辑
  • 限制:消息队列(限制每次的数量)、业务限制(比如你比别人多浏览详情就优先,比如根据用户名来限制,本次请求只处理包含a的用户)
  • 隔离:流量大分配更多的资源(30个商品,1个商品用1台redis,剩下29个商品用1台redis)

削峰?

场景:平常1w人,一下子1亿人

解决方案:

  • 排队100排队,第101就等着(例如:下雨天滴滴打车,要排队)
  • 答题:答了一道,才能答下一道
  • 分层过滤:一层一层过滤
  • 流量评估:qps tps

保证系统?

  • 高可用) ——负载均衡
  • 数据一致性) ——分布式锁、分布式事务
  • 高性能) ——提升cpu性能、减少线程的等待时间

一般系统瓶颈地方?

场景:数据库

原因:IO
解决:减少IO,在代码中减少序列化,并发读的优化(读缓存

解决数据一致性?

核心:防止少卖超卖(锁,引入第三方)

少卖?

场景:10个商品,12个人,前10个人拿到锁,后2个人拿不到锁直接抛弃,可能10个中有1个失败,结果就是只卖了9个

解决:重试,阻塞,队列

超卖?

场景:100个线程,同时查询都是10个库存,然后执行下单操作,结果有了100个订单

解决:加锁

集群服务:服务A1、A2

单体服务:jvm锁——Synchronised、 lock
集群服务:请求先到负载均衡 ,然后再负载到其中一个服务,用第三方的锁

用第三方的锁?

原因:

  • 是为了保证锁的互斥
  • A1有自己的锁,A2有自己的锁,2个服务运行过程中互相拿不到对方的

用第三方的事务协调器?

  • 是为了保证共同的事务

场景:请求购买,访问订单服务,订单完成后,访问积分服务,但积分服务故障了
结果:订单数据和积分数据不一致

在这里插入图片描述

分布式2阶段

  • 1.投票阶段:预执行sql
  • 2.执行阶段:提交或回滚

场景:第三方决定2个服务都提交,但这时其中一个服务器挂了(网络断了)?

解决:

  • 1.重试
  • 2.补偿——写脚本(2个服务的数据不一致,确定以哪个服务为准,处理哪个时间段的数据)

在这里插入图片描述
在这里插入图片描述

脚本跟事务执行会冲突么?

  • 不一定要实时执行脚本
  • 指定时间段的数据

base理论

保证数据的最终一致性 , 可以用队列MQ
在这里插入图片描述

TCC

try:提交执行
confirm:确定commit
cancel:确定rollback

confirm和cancle:2个互斥,要么confirm ,要么calcel
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TCC VS 2阶段

2阶段:占用资源,不能放掉数据库链接,要不然没办法提交
TCC:不占用资源

鸵鸟算法?

分布式锁:互斥

  • mysql :唯一索引、主键
  • redis :setnx key (如果没有key拿锁,如果有就拿不到锁)
  • zk:顺序临时节点

死锁?

  • mysql:设置有效期(开始-结束)
  • redis:设置过期时间
  • zk:连接断了就断了
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值