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

全部留言(7)

  • 最新
  • 精选
Johar
老师,DBWriter的功能也可以直接放在Aggregator里面,只有写入DB成功,才手动回复Ack给kafka,这样也可以保证数据的不丢失,所以方案中Queue和DBWriter是否添加的必要?

作者回复: DBWriter可以和Aggregator做在一起,这样的确简单。但是这样也有问题,一个是Aggregator的逻辑会搞复杂(又要计算又要写DB),第二个是DBWriter和Aggregator就耦合了,后续升级更新就要一起更新,不能单独更新DBWriter或者Aggregator。

2020-08-27
2
飞翔
老师 您说counting-service 把请求储存在缓存当中 这里的缓存也应该是持久化的把 counting-service挂了 就会丢失

作者回复: counting和query service都是无状态,可以部署多台做成集群,一般假定不会全部挂。 缓存有很多HA技术,比方说redis支持主从+哨兵,还有cluster集群等,一般也假定不会挂。当然,redis是可以开启持久化的。

2020-06-19
2
Xg huang
老师,请教一下,冷数据的查询问题要怎样解决呢?用对象存储只能解决存储容量的问题,如果用户需要查询这些冷数据,需要再搭一个新的query service来解决吗?

作者回复: 对,如果要对冷数据进行查询处理,肯定需要对查询服务做一些包装和扩展的。一般像阿里云oss,AWS S3等,都是有API可以调用的,基于这些API实现查询也不是很复杂,只要合理设计文件的存储结构。 比方说像prometheus之类的时间序列数据库,就支持所谓远程存储,可以参考thanos(https://thanos.io/)项目,它支持GCP, S3, Azure, Swift and Tencent COS等作为promethues的远程存储,相当于冷存储。

2020-06-19
2
2
飞翔
老师 inner queue 不是也是持久化queue 嘛 这个应该用什么开源组件呀

作者回复: 我之前就曾开发和开源过一个持久化的queue https://github.com/bulldog2011/bigqueue 另外,你基于磁盘文件,自己实现一个持久化的queue,也不麻烦。 还有,用嵌入式DB,比如sqlite/berkeleyDB等,也可以实现简单queue的功能。

2020-06-18
2
漂泊的松鼠
counting-service 的职责很奇怪,缓存了1分钟的数据,起线程同步到kafka, 为什么不直接发给kafka,来一条发一条,用videoId做分区键 counting-service的职责,我认为是kafka的写入、数据转换消息封装, 希望波波回复

作者回复: 一条一条消息发,和聚合一段时间再批量发,性能有数量级的差异。请继续看第三章消息队列的设计,里头有专门讲到这个问题。

2020-07-23
1
jjn0703
不懂就问,老师课程好几次提到JVM垃圾回收监控,这块完全没接触过,请问业界都用什么来落地呢?有什么参考材料参考吗?

作者回复: 我之前公司主要采用CAT进行应用性能监控,CAT是支持JVM监控的,还支持线程监控。另外,Skywalking也是支持JVM监控的。 https://github.com/dianping/cat https://github.com/apache/skywalking

2020-06-28
1
zhou
1.Counting Service 将请求缓存在内存中,后台以一分钟的频率将请求写入MQ中的某一个分区(约定相同的video_id前缀的请求,放入同一个分区), 2.技术消费者从对应的分区中拉取消息缓存在内部队列当中,Aggregator从内存队列中拉取消息进行聚合运算每分钟的观看量,并且以一分钟为频率将结果写入内部的第二个缓冲队列 3.DbWriter 从队列当中拉取结果,最终将结果写入DB中 ---------------------------- 老师我有几个问题 1.如果放入不同分区,怎么保证高可用,若一个分区 2.缓冲队列太多,是否有可能会造成数据丢失,且队列中的消息也被消费了的情况

作者回复: 1. MQ的分区,比方说Kafka的分区,是直接支持高可用的。对于每一个分区,Kafka支持在不同Broker节点上复制多分数据拷贝。 2. Consumer端的第二个缓冲队列,是需要考虑持久化的,这样数据才不会丢。当然内部队列都要监控,如果超过一定大小要告警。

2020-06-27
1
收起评论