Hefery 的个人网站

Hefery's Personal Website

Contact:hefery@126.com
  menu
73 文章
0 浏览
18 当前访客
ღゝ◡╹)ノ❤️

分布式核心问题

分布式ID

相关概念

传统方案在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品。对数据分库分表后需要有一个唯一ID来标识一条数据或消息

分布式ID特点:

  • 全局唯一
  • 高并发、高可用

实现方案

需求

  • 运行在 docker 容器里生成的 ID 唯一
  • 一个应用在一台服务器,ID唯一
  • 相同应用在多台服务器,ID唯一
  • 多个应用在一台服务器生成的ID唯一?不需要

方案:

  • 时间戳:不满足全局唯一
  • UUID:不能生成递增有序的数字,索引效率下降
  • 数据库主键自增:并发性能不高,受限于数据库性能;分库分表需要改造,较复杂;自增-数据量泄露
  • Redis自增:数据丢失;自增-数据量泄露
  • 雪花算法:时钟回拨

开源组件

  • 百度:uid-generator,Java实现, 只支持Snowflake算法,最终单机QPS可达600w,维护少
  • 滴滴:Tinyid,Java实现, 只支持数据库号段算法,最终单机QPS可达1000w
  • 美团Leaf,Java实现, 支持数据库号段算法和Snowflake算法,最终单机QPS可达5w/s,高可用

使用美团的Leaf组件:项目集成Leaf

分布式Session

相关概念

场景:用户模块—登录登出

Session存储位置:Tomcat

Cookie跨域问题:浏览器会根据 Cookie 的 domain 属性进行判断访问哪个域(127.0.0.1,localhost)会携带这个Cookie

实现方案

  • Token + Redis
  • JWT:Json Web Token
  • OAuth2:授权机制(授权数据给第三方:QQ、微信、微博授权登录)

开源组件

解析JWT-jwt.io/:token里的内容可以被解析,但是不能被篡改

分布式任务调度

相关概念

任务调度场景:

  • 报表:电商
  • 日/月结单:支付
  • 爬虫
  • 数据归档

开源组件

分布式任务调度框架

分布式限流

相关概念

限流场景:秒杀

限流原理:

  • 漏桶算法
  • 令牌桶算法

开源组件

压测工具:JMeter、AB(Apache Bench)

Sentinelspring-cloud-alibaba

分库分表

相关概念

分库分表原因:数据库性能瓶颈

拆分方式

  • 水平拆分:每个表结构都一样
  • 垂直拆分:表的多个字段拆分到多个表中

实现方案

分布式事务

相关概念

场景:订单系统要创建订单,向商品系统发出扣库存的请求,商品系统扣库存成功并返回订单系统扣库存的通知,订单系统接收到通知后会创建订单。但是商品系统扣完库存,也成功返回了订单系统通知,但是由于某种原因,订单系统并没有成功创建订单,那么商品系统的扣库存操作就需要回滚

实现方案

分布式锁

相关概念

作用:为了防止分布式系统中的多个进程或线程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁

实现方案

  • Redis:setnx命令,原子性操作
  • Zookeeper:顺序临时节点

开源框架


标题:分布式核心问题
作者:Hefery
地址:http://hefery.icu/articles/2022/02/19/1645206676219.html