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

全部留言(21)

  • 最新
  • 精选
名贤集
session为何不直接存储在redis,为何要自己实现缓存呢?

作者回复: 主要4点原因: 1. 携程session数据总量大,如果全部存入redis缓存,成本比较高,而我们需要的是一套二级缓存机制,一级缓存常驻内存,存放当前活跃session数据,二级缓存可以持久化,存当前不活跃session数据,这样可以平衡性能和成本。 2. 我们需要细粒度的埋点和监控,只有定制自研才能做到。 3. 实现一个ASP.NET state server protocol+缓存并不复杂,我们完全可以在2~3月内搞定上线,如果引入redis,当然也可以架构设计出来一套类似系统,但是时间成本不会少多少,同时还是需要实现state server protocol,而且我们还需要监控维护redis。 4. session server对携程这样体量的公司来说,太重要,不能出问题,定制自研我们的把控力会更大,可以做到全程白盒子,不留黑盒子。

2020-07-30
6
不忘初心
老师,假如后端存储使用了redis,那session server本地的二级缓存还有必要吗?

作者回复: 如果不采用二级缓存,全部基于redis,也可以实现SessionServer,只是需要采用不同的架构设计。 SessionServer开发于2014年,当时的redis集群技术还不成熟,另外携程当时也没有专门的redis运维团队。 我们自研的SessionServer也很轻量,开发工作量也不大,而且可以做精细化埋点监控,项目也挺成功的。

2020-08-04
3
Johar
波波老师,请教一下异步将session写入数据库失败,并且该服务器故障,会造成数据丢失,怎么处理的?另外就是说到某个session服务器故障后,sessionclient未感知前,也会访问失败,是否是通过多次重试的机制实现高可用?

作者回复: 你好,我们做分布式系统设计的时候,一般会做一个假设,就是每次出现故障的时候,假设一次只出现一个故障,不会两个故障同时发生(虽然理论上可能,但是几率极小)。所以我们假定session写入数据库失败,和该Session服务器同时又故障这两个故障不同时发生。如果不做这样的假设,那么还有可能超过两个以上同时故障的情况发生,这样就没完没了。 即便session写入数据库失败,和该服务器又故障同时发生了,那会造成session数据丢失(假设这期间有session写入操作),但是只是一个很小的时间窗口,SessionClient会很快重试其它SessionServer,也就是说数据丢失很少,概率也很小,所以我们认为这是可以接收的。 sessionClient如果访问SessionServer失败,它会重试一定次数,超过一定阈值再切换到其它SessionServer做数据恢复。

2020-09-26
2
BigBang
老师,可持久化缓存和内存有啥区别

作者回复: 可持久化缓存的数据可以存在磁盘上,磁盘的容量一般比内存大很多。

2020-07-30
2
tenyears
cookie里面存有后端服务器IP等地址会不会有安全隐患

作者回复: 1. 这个ip是内部的,外网访问不到 2. 实际系统对cookie中的ip信息有加密处理, 所以没有特别的安全隐患。

2021-02-09
1
丁小明
老师,是否可以将sessionid和服务器映射关系元数据存储在每个服务器节点上呢,并且客户端也缓存一份这样就不需要前端浏览器参与了。如果服务器扩容或者缩容重新同步元数据,客户端访问节点如果不存在,在重定向请求

作者回复: 存在服务器端,服务器端就变成有状态了,有状态系统很难升级维护,非常容易出错。 服务器端的开发原则是尽量无状态,这样比较容易扩展,不容易出错。如果必须有状态,那么优先考虑集中状态。如果你搞成了需要状态同步的话,复杂性和出错概率会大大提升。

2020-11-18
1
飞翔
老师sessionserver 是异步写入到数据库中 这时候sessionserver 挂了 不是还是会有数据丢失嘛

作者回复: 你学得很仔细,异步写入有一个小的时间窗口,可能在用户更新还没有被写入后台DB前,SessionServer正好挂了,这个时候更新会丢失。 实际使用中SessionSession自己挂概率非常小,即使发生也只是非常小的影响(异步写入时间窗是秒级)。另外,我们后面考虑后台用redis,SessionServer同步写穿透到redis,这样数据就不会丢失了。

2020-08-05
1
写点啥呢
请问老师,session client是如何确定后端服务挂掉的呢。如果仅是瞬间网络不可用,会不会出现类似“脑裂”的情况?比如多个seesion服务都有一个session id。服务是如何处理这种情况的?

作者回复: 如果service client访问session server异常,并且重试3次还是异常,就可以判断后端服务挂掉,然后它就会重新选择1台可用的session server(从eureka获取可用session server ip列表),进行session数据的恢复处理流程。 因为这个设计没有引入raft之类分布式仲裁协议,所以不会出现脑裂。

2021-05-17
美好时光海苔
老师,请教一个问题,在跨数据中心HA 摇摆策略中的例子,用户第二次请求从 DC2 web server -> Session Server B (位于DC1), 这种情况是否需要考虑 latency 延时呢? 在刚开始老师你提到了 latency 的要求是 99% 小于 10ms, 这种跨数据中心的请求能保证低于10ms吗? 因为课程中似乎没有提到GSLB 有状态,所以如果假设用户请求有一半都会forward到DC2, 那这种跨跨数据中心的延迟是不是会大大降低我们 定的 latency SLA

作者回复: 1. 一般同城的跨IDC可以使用光线链路(例如后面提到的波分多路复用光纤),性能就像两个IDC在局域网内,性能完全没有问题。 2. 电信的GSLB一般有策略状态,一般一个地区的IP都会被路由到同一个IDC,不会经常摆来摆去的,除非出现特殊情况(比如某个IDC的入口挂了),这个时候GSLB才会摆到另一个IDC。

2020-12-28
Geek_27d75a
老师,浏览器Cookie中包含了SessionServe IP等信息安全吗?如果客户端浏览器禁止了Cookie呢

作者回复: 携程网站要求客户端浏览器启用cookie,否则Session不能正常工作。 有些客户端浏览器虽然禁用了Cookie,但只是cookie不能持久化话,内存中还是有的,除非浏览器关闭,那么Cookie就没有了,下次必须重新登录获取Session。

2020-10-04
2
收起评论