分布式系统

优点

(一)可靠性(容错)

分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

(二)可扩展性

在分布式计算系统可以根据需要增加更多的机器。

(三)资源共享

共享数据是必不可少的应用,如银行,预订系统。

(四)灵活性

由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

(五)更快的速度

分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

(六)开放系统

由于它是开放的系统,本地或者远程都可以访问到该服务。

(七)更高的性能

相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

分布式会话session解决方案

  • tomcat + session–》使用Redis缓存tomcat的session数据
tomcat增加配置,将session托管给redis管理(RedisSessionManager
  • spring session + redis

如何设计一个高可用的分布式系统

  • 针对模块进行系统拆分,一拆多
  • 对于大量的读请求,使用缓存处理
  • 对于大量的写请求,使用MQ进行削峰处理
  • 数据库进行分库分表
  • 数据库读写分离
  • 使用搜索引擎

系统限流

实现思路:拦截打到项目的前端请求

  • 计算器法:单秒对请求进行计数,超过系统承受的最大域值,快速失败
  • 滑动窗口计数法:将时间拆为更细的粒度
  • 漏桶算法:固定的空桶 + 固定的处理线程(保护下游系统)
  • 令牌桶算法:桶容量跟阈值相关,想完成请求,必须在桶里拿到令牌 (保护上游系统)

分库分表

  • 垂直拆分
将一个表的n个字短按访问频率分组,假设表里有1000w条数据,分完两个库后,
A库有1000w条数据,字短访问较高,
B库有1000w条数据,字短访问较低
  • 水平拆分
1000w条数据均匀的拆分到n个表,A库有500w条数据,B库有500w条数据

单表系统向分库分表迁移方案

  • 线上服务停机,使用自己的后台程序,将现有的数据分到对应的库,表
  • 不停机,对数据进行双写,单表,分表数据同时进行新增,同时书写程序,保证旧数据逐步向分库分表进行迁移,单写分库分表

Mysql 主从复制延时解决方案

  • 增加写服务器的数量
  • 避免新增,更新完之后立马执行
  • 指定从主库查询
  • 打开mysql的并行复制

分布式事务的解决方案

  • XA(两阶段提交方案)
第一阶段:事务管理器询问各个库sql是否可以执行
第二阶段:执行
  • TCC
try:做一些预准备工作
confirm:执行操作
cancel:回滚操作
  • 本地消息表
1:A系统在本地执行事务的同时,插入一条数据到消息表
2:A系统发送消息到MQ中
3:B系统接到消息之后,将一条数据放入消息表,同时执行其他的业务操作
4:B系统执行成功之后,改写AB两系统的消息表数据状态
5:A系统会定时扫描自己的消息表,将长时间失败的数据重发到B系统,B再次处理
6:可以保证最终一致性,B系统相同消息只消费一次,哪怕失败了,
  A系统也会不断向B系统重发消息直至B系统消费成功
  • 可靠消息最终一致性方案
1:A系统发送prepared消息到MQ,然后执行A系统业务操作
2:A系统业务操作失败,则发送消息对prepared消息进行回滚
3:A系统操作成功,则发送消息对prepared消息进行confirm
4:B系统执行本地事务
5:MQ自动轮询所有的prepared消息,回调A系统确认此条消息的状态
6:B系统需要实现幂等性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值