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

全部留言(6)

  • 最新
  • 精选
Elective9095
okCache实现很巧妙,通过链表实现了o(1)复杂度的删除节点,同时通过哈希表避免了链表随机访问o(n)的时间复杂度。这里同时对okCache发现可以优化的点,对于链表的加锁操作可以细粒度化,比如,头节点和尾节点比较特殊,可以单独搞把cas锁,就是还没有想到如何保证数据的一致性,比如,删除指定节点,并添加到头节点这是一个原子操作,不允许中间状态。

作者回复: 是的,okCache还有优化空间,锁的粒度还可以细化。但是目前对于SessionServer来说,它的性能已经足够了,瓶颈已经不在Cache层,而是在网络传输/序列化层,所以单独优化okCache对提升SessionServer总体性能影响不大。

2020-08-07
1
人在江湖飘
老师 map来存放list中的节点,如果存在hash冲突怎么办呢?

作者回复: 看后面的代码样例: private Map<K, Node<K, V>> map; 这里的Node节点是作为值Value存在Map中的,前面的K是Key,如果Key有hash冲突,那么根据Java中的HashMap做法是会用链表法来存储key冲突的Value(也就是Node)。

2020-09-10
飞翔
老师 为啥guava cache 用deque实现呀 用双向列表 可以移动任何元素到末尾, deque只能前后端移除元素呀 我要有一个中间的元素要移除 deque实现 不就是o(n) 的时间复杂度了嘛?

作者回复: 请看代码实现: https://github.com/spring2go/okcache/blob/master/src/main/java/com/spring2go/okcache/impl/SegmentAccessQueue.java SegmentAccessQueue扩展自AbstractDeque,对很多方法进行了重载,实现复杂度是O(1)的。

2020-08-04
tt
听完这节课,是不是可以对SessionServer座如下理解? SessionServer的定位应该就是普通业务系统中的本地缓存,存放极热点的数据,后面还要接容量更大的集中式缓存。 只是正好因为在本章的上下文中,当前的“业务”是保存具有一定全局属性的会话,所以给“当前业务本地缓存”的设计带来了特殊性。

作者回复: SessionServer主要用于集中存放用户的Web Session会话数据。SessionServer的设计挑战在高性能/高可用/可扩展性。它的高性能设计采用内存LUR缓存 + 可持久化缓存两级缓存机制。后台DB的主要作用是备份,通过后台DB可以实现故障恢复,保障高可用性。SessionServer通过客户端浏览器cookie记住SessionServer IP地址的方式,可以实现简单的集群按需扩展。

2020-08-03
青阳
力扣算法题就是一个HashMap(O(1)判断是否存在),加上一个双向链表(O(1)的头尾添加和删除)实现
2022-07-12
白小龙
读代码的时候不刻意去看给谁赋值,而是把=理解为让指向会更容易理解
2021-01-28
收起评论