当前位置: 首页 > news >正文

第1063章 自己做视频网站陕西网站建设公司电话

第1063章 自己做视频网站,陕西网站建设公司电话,企业年报网上申报系统网址,医院做网站一、分布式系统概述 分布式系统已成为现代互联网应用的标配架构,据LinkedIn统计,分布式系统设计能力是高级Java工程师薪资差异的关键因素。今天我们将深入解析分布式系统的核心理论和实践,帮助你掌握面试中的系统设计问题。 二、分布式理论…

一、分布式系统概述

分布式系统已成为现代互联网应用的标配架构,据LinkedIn统计,分布式系统设计能力是高级Java工程师薪资差异的关键因素。今天我们将深入解析分布式系统的核心理论和实践,帮助你掌握面试中的系统设计问题。

二、分布式理论基础

2.1 CAP理论详解

   Consistency▲│
A ·──┼──· P│▼Availability

实际应用场景:

系统类型选择典型案例
金融系统CPZooKeeper
社交网络APCassandra
电商系统CA(伪命题)MySQL集群

2.2 BASE理论

  • Basically Available(基本可用):允许部分失败
  • Soft state(软状态):中间状态允许存在
  • Eventually consistent(最终一致):数据最终达成一致

示例场景:

// 订单支付最终一致性实现
public void payOrder(Long orderId) {// 1. 本地事务:更新订单状态为"支付中"orderService.updateStatus(orderId, PAYING);// 2. 异步调用支付系统mqProducer.send(new PaymentMessage(orderId));// 3. 支付系统回调更新最终状态
}

三、分布式事务解决方案

3.1 常见方案对比

方案原理优点缺点适用场景
2PC协调者+参与者强一致阻塞、单点故障数据库层
TCCTry-Confirm-Cancel高可用开发复杂金融交易
本地消息表事务+异步消息简单可靠侵入业务订单系统
Saga事务拆分+补偿长事务支持难调试跨系统流程
Seata全局事务ID一站式解决方案性能损耗微服务架构

3.2 Seata实现原理

工作流程:

  1. TM开启全局事务
  2. RM注册分支事务
  3. TC协调事务提交/回滚
  4. 通过undo_log实现回滚
// Seata使用示例
@GlobalTransactional
public void purchase(Long userId, Long productId) {accountService.debit(userId, money);storageService.deduct(productId, count);orderService.create(userId, productId, count);
}

四、分布式缓存策略

4.1 缓存模式对比

模式写入策略读取策略优点缺点
Cache-Aside先DB后删缓存先缓存后DB简单可控可能不一致
Read-Through自动加载统一入口抽象性好实现复杂
Write-Through同步写缓存-强一致写入慢
Write-Behind异步写缓存-高性能可能丢失

4.2 缓存问题解决方案

缓存穿透:

// 布隆过滤器伪代码
public class BloomFilter {private BitSet bitset;public boolean mightContain(String key) {int[] hashes = hash(key);for (int hash : hashes) {if (!bitset.get(hash)) {return false;}}return true;}
}

缓存雪崩:

// 随机过期时间
public <T> T getWithRandomExpire(String key, Supplier<T> loader) {T value = cache.get(key);if (value == null) {value = loader.get();// 基础过期时间+随机偏移int expire = 3600 + new Random().nextInt(600); cache.set(key, value, expire);}return value;
}

五、服务治理

5.1 服务发现架构

[Service Instance] → Register → [Registry Center]↑                               ↓
[Client] ←─ Discover ←───────────────┘

主流方案对比:

  • Eureka:AP设计,适合Spring Cloud
  • ZooKeeper:CP设计,强一致但性能低
  • Nacos:支持AP/CP切换,功能全面
  • Consul:多数据中心支持,健康检查完善

5.2 负载均衡算法

算法描述适用场景
轮询(Round Robin)依次分配服务器性能均匀
加权轮询按权重分配服务器性能不均
随机随机选择简单场景
最小连接选择连接数最少的长连接服务
一致性哈希相同请求到同一节点缓存服务

六、消息队列应用

6.1 消息队列选型对比

特性KafkaRocketMQRabbitMQPulsar
设计目标日志处理金融交易企业集成流处理
吞吐量非常高非常高
延迟毫秒级毫秒级微秒级毫秒级
事务消息支持支持不支持支持
协议支持自定义自定义AMQP多协议

6.2 消息可靠性保障

生产者保证:

  1. 同步发送+重试机制
  2. 事务消息(如RocketMQ)
  3. 消息落库+定时任务补偿

消费者保证:

// RocketMQ消费者示例
consumer.registerMessageListener((MessageListenerOrderly) (msgs, context) -> {try {// 业务处理processMessage(msgs);return ConsumeOrderlyStatus.SUCCESS;} catch (Exception e) {// 记录日志,人工干预log.error("消费失败", e);return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;}
});

七、高频面试题解析

7.1 问题1:如何设计一个分布式ID生成器?

参考答案:

  1. UUID:简单但无序
  2. 数据库自增:需要中心化数据库
  3. Snowflake算法
    // 64位ID结构
    0 | 000...0000(41位时间戳) | 00000(5位数据中心ID) | 00000(5位机器ID) | 000...000(12位序列号)
    
  4. Redis INCR:利用原子操作
  5. Leaf算法:美团开源的分布式ID服务

7.2 问题2:如何保证微服务接口的幂等性?

解决方案:

  1. 唯一索引:防止重复数据
  2. 乐观锁
    UPDATE orders SET status = 'paid' WHERE id = 100 AND status = 'unpaid'
    
  3. Token机制
    // 1. 服务端生成token存入Redis
    String token = UUID.randomUUID().toString();
    redisTemplate.opsForValue().set("order:100:token", token, 5, TimeUnit.MINUTES);// 2. 客户端携带token请求
    // 3. 服务端校验后删除token
    
  4. 状态机:限制状态流转路径

八、系统设计实战

题目:设计一个秒杀系统

核心方案:

  1. 分层削峰

    • 前端:按钮置灰+验证码
    • 网关:限流(令牌桶算法)
    • 服务:队列缓冲+异步处理
  2. 热点隔离

    • 独立部署秒杀服务
    • Redis集群分片存储热点数据
  3. 库存扣减

    // Redis原子操作
    Long remain = redisTemplate.opsForValue().increment("seckill:stock:"+productId, -1);
    if (remain < 0) {// 回滚redisTemplate.opsForValue().increment("seckill:stock:"+productId, 1);throw new RuntimeException("库存不足");
    }
    
  4. 最终一致性

    @Transactional
    public void handleSeckill(Long userId, Long productId) {// 1. 扣减Redis库存// 2. 发送创建订单MQ// 3. 异步更新数据库
    }
    

九、明日预告

明天我们将探讨《高并发系统设计实战》,内容包括:

  • 性能压测方法论
  • 限流熔断策略
  • 降级方案设计
  • 高性能编码技巧
  • 真实案例解析

十、昨日思考题答案

问题:Spring Boot自动配置如何工作?

答案:

  1. 启动时加载META-INF/spring.factories中的EnableAutoConfiguration
  2. 通过@Conditional系列注解条件化装配Bean
  3. 主要条件注解包括:
    • @ConditionalOnClass:类路径存在时生效
    • @ConditionalOnMissingBean:容器中不存在时生效
    • @ConditionalOnProperty:配置属性匹配时生效

欢迎在评论区分享你的分布式系统设计经验,我们明天见!

http://www.dtcms.com/a/547786.html

相关文章:

  • 站酷的网址网页小游戏在线玩知乎
  • 做网站一定需要icp么企业品牌策划排行榜
  • 网站互联互联网舆情监测系统
  • 自助建站网站如何下载wordpress
  • 有没有专门招代理的网站上海网站公司建设
  • 如何建立属于自己的网站潍坊知名网站建设
  • 青岛网络建站公司用自己的计算机做服务器建网站
  • 新网站为什么做的这么难罗湖实惠的网站建设费用
  • 给我一个网站图片网站设计和平面设计
  • 网站建设需要准备什么建网站做站长怎么赚钱
  • 个人网站 平台有没有专门做网站的
  • 做网站要分几部分完成在线看国内永久免费crm
  • dw做网站简单首页wordpress js加载位置
  • 怎么创建网站详细流程seo公司中国
  • 学做网站需要什么软件o2o商城系统
  • 巫山网站建设3小时网站建设平台
  • 代做毕设要注册答疑网站萍乡企业网站制作
  • php做网站标题加链接传动设备 技术支持 东莞网站建设
  • 网站设计目的苏州手机网站建设公司
  • 传奇辅助网站怎么建设dede 汽车网站
  • 工商注册在哪个网站公司网络搭建
  • 英国男女做那个视频网站百度权重9的网站
  • 宇宙企画网站wordpress很强大
  • 用php做购物网站h5怎么制作的
  • 陶瓷刀具网站策划书网站正在维护模板
  • 深圳市住房和建设局网站和市住宅租赁管理服务中心商城网站建设技术论坛
  • 如何制作境外网站新网 如何建设网站
  • 小游戏网站怎么做搜索引擎优化的流程
  • 比较知名的企业微信小程序排名关键词优化
  • 个人网站制作基本步骤网站备案 互联网信息查询