分布式系统案例课
杨波
前携程 / 拍拍贷技术总监,微服务技术专家
11809 人已学习
新⼈⾸单¥59
课程目录
已完结/共 66 讲
第一章 课程介绍 (2讲)
时长 09:20
时长 04:42
第二章 如何设计一个分布式计数服务 - 系统设计面试案例 (7讲)
第五章 如何设计一个高并发无状态的会话缓存服务 - 携程SessionServer案例 (5讲)
第十章 课程回顾&结课测试 (1讲)
分布式系统案例课
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 11 | PMQ 2.0的设计解析(上)
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 需求收集和总体架构设计
04 | 存储设计
05 | 计数服务设计(上)
06 | 计数服务设计(下)
07 | 查询服务设计
08 | 技术栈选型
09 | 进一步考量和总结
10 | PMQ 2.0项目背景
11 | PMQ 2.0的设计解析(上)
12 | PMQ 2.0的设计解析(中)
13 | PMQ 2.0的设计解析(下)
14 | PMQ 3.0的演进
15 | Kafka的动态重平衡是如何工作的?(上)
16 | Kafka的动态重平衡是如何工作的?(下)
17 | 消息队列设计和治理最佳实践
18 | 第四章目录和大纲
19 | 微服务的四大技术难题是什么?
20 | 如何解决微服务的数据一致性分发问题?
21 | 如何解决微服务的数据聚合Join问题?
22 | 如何解决微服务的分布式事务问题?(上)
23 | 如何解决微服务的分布式事务问题?(下)
24 | 阿里分布式事务中间件Seata解析
25 | Uber微服务编排引擎Cadence解析
26 | 如何理解Uber Cadence的架构设计?
27 | 如何实现遗留系统的解耦拆分?
28 | 拍拍贷系统拆分项目案例
29 | CQRS/CDC技术在Netflix的实践
30 | 第四章总结
31 | SessionServer项目背景
32 | 总体架构设计
33 | 如何设计一个高性能基于内存的LRU Cache?
34 | 如何设计一个高性能大容量持久化的ConcurrentHashmap?
35 | 设计评估和总结
36 | SaaS项目healthchecks.io的背景和架构(上)
37 | SaaS项目healthchecks.io的背景和架构(下)
38 | 如何设计一个轻量级的基于DB的延迟任务队列?
39 | 如何设计一把轻量级的锁?
40 | 如何设计一个分布式限流系统?
41 | 如何设计一个分布式TopK系统实现实时防爬虫?
42 | 第七章目标和大纲
43 | 为什么说ServiceMesh是微服务的未来(上)
44 | 为什么说ServiceMesh是微服务的未来(下)
45 | 解析Envoy Proxy(上)
46 | 解析Envoy Proxy(下)
47 | Envoy在Lyft的实践
48 | 解析Istio
49 | K8s Ingress、Istio Gateway和API Gateway该如何选择?(上)
50 | K8s Ingress、Istio Gateway和API Gateway该如何选择?(下)
51 | Spring Cloud、K8s和Istio该如何集成?
52 | 第八章目标和大纲
53 | 拍拍贷案例:大型网站架构是如何演进的?
54 | 最小可用架构:Minimum Viable Architecture(上)
55 | 最小可用架构:Minimum Viable Architecture(下)
56 | 如何构建基于OAuth2/JWT的微服务架构?(上)
57 | 如何构建基于OAuth2/JWT的微服务架构?(下)
58 | 拍拍贷案例:如何实现数据中心机房的迁移?
59 | 携程/Netflix案例:如何实现同城双活和异地多活?
60 | 第九章大纲
61 | 学习开源项目的6个层次和8种方法(上)
62 | 学习开源项目的6个层次和8种方法(中)
63 | 学习开源项目的6个层次和8种方法(下)
64 | 百万年薪架构师是如何炼成的?
65 | 解读一份大厂的研发岗职级体系
66 | 结课测试&结束语
登录 后留言

全部留言(9)

  • 最新
  • 精选
OlafOO
讲的太精彩了,还能用数据库搞,以前就没想过..

作者回复: 有兴趣可以看pmq源码: https://github.com/ppdaicorp/pmq 是一个经典的分库分表案例。

2020-09-11
2
9
geekbang
波波老师,请问基于数据库存储除了实现简单外,还有其他优势吗?它和基于文件存储比较有哪些劣势呢?他们的性能比较会是一个什么情况呢?

作者回复: DB对比文件的优势: 1. 数据库成熟,并且已经有成熟的HA方案,比文件更可靠 2. 可以方便查消息 3. Broker和存储分离,Broker无状态,可以简单扩展 性能比较:DB和文件应该在同一量级,写入和读取基本都是顺序操作,没有哪个有明显的性能问题。 DB的劣势:需要单独的DB数据库,成本稍高,不像Kafka只要Broker上的文件存储就好了。

2020-06-25
3
5
Alan
波波老师好 想问下生产者发送消息到broker上 以及消费者去拉消息 broker只是做了一个消息落库的操作和查询的操作吗?如果是这样 那生产者直接将消息入库和消费端直接去查询有啥区别?能详细说下吗?

作者回复: 嗯,从理论上讲,生产者/消费者直接访问数据库,也可以实现PMQ的功能。但是这样生产者/消费者就和数据库直接耦合了,而且生产者/消费者的逻辑会变得非常复杂,难以维护和升级,比方说数据库扩容的话,生产/消费者的连接字符串都需要调整。 增加一层Broker作为间接,生产/消费者和DB就不耦合,通过Broker可以屏蔽DB的扩容升级等变化,而且生产/消费逻辑简单,易于升级维护。

2020-07-07
2
2
白小龙
对于一个partition只能有一个消费指针的理解:如果同一个consumerGroup的两个consumer消费同一个queue(partition),由于各自都存在消费指针,那么这两个consumer就形成了消息资源竞争关系,为了避免重复消费,就得加锁,显然增加了系统复杂性并影响性能。顾一个消费者组的消费者之间不能绑定到同一个queue上。还望老师点评!

作者回复: 你的理解是正确的,一个queue里头的数据是状态,如果一个consumerGroup中的两个consumer同时消费的话,必然存在状态竞争问题,加锁对性能的影响非常大,而且两个consumer之间还需要同步消费指针,开销更大,所以一个consumerGroup中的两个consumer不能同时消费一个queue。

2021-02-02
1
深山小书童
波波老师,同一个topic的所有partition存储的消息都是一样的吗?

作者回复: 同一个topic的所有partition存储的消息都是属于这个topic的,比方说和order订单更新消息相关联的topic叫order_update_msg,那么所有和订单更新相关的消息,都会分布在这个order_update_msg的不同partition中。

2020-08-20
1
江流
波波老师,我有个疑问:你说基于文件系统来做没有数据库可靠是因为数据库有日志恢复功能吗,但是基于文件来做在不同节点上有副本来保证可靠性啊?

作者回复: 你好,我并没有说文件系统一定没有数据库可靠,毕竟数据库底层也是基于文件系统的。 只不过MySQL之类的数据库已经比较成熟,大量可靠性技术已经沉淀在里头,换句话说,坑已经基本上被踩平了。 基于文件在不同节点上存副本,当然可以做到高可靠,不过我觉得有点复杂了,远没有MySQL主从来得简单成熟让人放心(波波个人观点)。

2020-06-30
1
jhren
请问波波老师,同一个消息要发给多个consumer分别独立消费。 是把这个消息在该Topic的每个Partition都发一次吗?

作者回复: PMQ(包括kafka)都是采用消费者拉模式的,不是推模式。也就是说消息是消费者主动来拉的,不是Broker主动推的。这个一定要先理解。 消息在PMQ的DB中(或者Kafka的broker上),只需要存一份。但是消费者可以组成不同的消费者组(consumer group),然后都可以来拉同一个分区中的消息,只要各自维护自己的消费者指针就可以了。 这一节课你可以多消化下,把数组和指针的那个ppt看明白。

2020-06-27
2
1
写点啥呢
数据库自增列有数值不连续的情况(比如事务回滚,数据库崩溃恢复场景),请问波波老师PMQ在工程上是如何处理这种情况的? 另外利用数据库是如何实现partition replication来做到数据高可用呢(如何解决多库间事务)。谢谢老师

作者回复: 1,自增主键可能出现不连续,生产端没有关系,消费端client会自动处理。 2,mysql数据库的HA主要采用MySQL MHA机制实现,解决多库事务问题成本很高,发生问题概率很低,综合评估下来暂没有实现,如果确实发生,目前依赖人工解决。

2021-04-21
张辉
波波老师,讲义方便发一下么
2023-04-08
收起评论