分布式系统案例课
杨波
前携程 / 拍拍贷技术总监,微服务技术专家
11809 人已学习
新⼈⾸单¥59
课程目录
已完结/共 66 讲
第一章 课程介绍 (2讲)
时长 09:20
时长 04:42
第二章 如何设计一个分布式计数服务 - 系统设计面试案例 (7讲)
第五章 如何设计一个高并发无状态的会话缓存服务 - 携程SessionServer案例 (5讲)
第十章 课程回顾&结课测试 (1讲)
分布式系统案例课
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 12 | 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 | 结课测试&结束语
登录 后留言

全部留言(11)

  • 最新
  • 精选
geekbang
波波老师,kafka消费偏移应该早就改成存在位移主题上了,不是在zookeeper上。

作者回复: 对,现在新版本Kafka的消费偏移是支持存在Broker主题上,我记得最早是只能存在ZK上。

2020-06-25
4
ahern88
老师,消费端的消费速度很难与生产端的生产速度一致,为了达到最优效果,猜测是不是要引入背压机制通过动态滑动窗口去消费?

作者回复: 在消息中间件中引入反压机制,会把系统搞复杂,一般两边的速度匹配问题,主要依赖堆积监控+扩容等手段来解决。 现在有一些反应式开发框架,比如https://projectreactor.io/,是支持所谓反压机制的。这个门槛较高,适用于一些高级场景。

2020-06-28
2
2
Jxin
1.拉取消息的动作是否可以放到心跳中去。 2.为什么心跳异常后只提到broker剔除消费者?毕竟异常情况也有broker异常的可能,这时候消费端应该重平衡,重新绑定一个broker可用的分区组吧?

作者回复: 1. 消费者拉消息和报心跳是两个独立功能,请求频率也完全不同,肯定不能合在一起。 2. Broker是无状态的,如果Broker出问题,Nginx健康检查机制会将其剔除(PMQ采用公司内部的Nginx层进行负载均衡)

2020-06-25
2
小美伢
波波老师, 视频里提到push模式下,如果consumer比较慢时, broker会堵塞,所以pull模式比较好。 可是在pull的模式下, 如果consumer 很慢, 没有处理完就不会去pull 新的, 那不是更会造成堵塞吗?

作者回复: push模式的话,broker上有线程要负责去推消息的,如果consumer慢,broker上线程会被阻塞。用邮递员作比喻,相当于邮递员需要主动把信送到每个人家里,如果某个人接收慢(或者路上堵了),可能把邮递员堵塞住,影响给其它人送邮件。 pull模式,broker上相当于只有消息数据,consumer端各自去broker上拉各自的消息,互不干扰,不会堵塞。用取邮件作类比,相当于每个人自己去邮局取邮件,各取各的,不会堵塞。

2020-12-29
1
tenyears
看了两遍没看懂,代码下下来跑了一遍,方才理解数据模型的设计,我是不是理解能力太差了😂

作者回复: 两者相辅相成看,看我视频有助于理解总体架构设计,撸代码可以理解更多细节、提升实践能力。

2020-11-12
1
tenyears
如果Kafka 只有一个Partition,那么记录的是不是消费者组的偏移量

作者回复: 不好意思,没有完全理解你的问题,Kafka怎么会只有一个Partition?首先有Topic,然后才有Partition。 关于Kafka消费者偏移的存储,新版本的Kafka支持将消费者偏移提交到一个叫__consumer_offsets的Topic中,参考: https://stackoverflow.com/questions/41137281/offsets-stored-in-zookeeper-or-kafka

2020-09-18
1
高峰
老师你好,如果一个消费实例我部署多份,都在消费一个topic时 ,有一个消费者实例挂了,过1-2小时重启又好了,针对这个消费者的消费offset 还有保留在上一次对不? 如果又进行了rebalance 这个消费者消费的 分区 可能会发生变化 那么这个消费者的offset如何保持正确?

作者回复: 消费偏移最终是存在服务端的(PMQ是在元数据库中),不管怎么重平衡,也不管某个分区的消费者是否因为rebalance而变化,最终都要从服务端去获取对应的消费偏移。

2020-07-13
1
何凌
如果去掉partition一定要assign 给某一个consumer的要求是不是rebalance的问题就好解决了?这样consumer来拉消息的时候可以round robin的从partition取数据。partition一定要assign给某个consumer这条目前只知道要求同key按顺序消费的情况下有用,还有其他情况有用吗?

作者回复: 你理解错了,和Kafka一样,PMQ的消费者是有状态的,一个消费者必须记住它消费的Partition的消费偏移量。 有状态的就不能round robin。 你再思考下。

2020-06-26
1
Lorgine
Broker如果出现异常会由ng自动踢掉。
2020-06-25
1
Lorgine
第一个问题,心跳是按照实例级别来的,一个实例只要有一个心跳线程即可,但是一个实例可能会有多个分区,实例上每个分区都要拉取的。第二心跳是以固定的频率上报的,而拉取频率不是固定的。所以不能合在一起。
2020-06-25
1
收起评论