如果你写过 Flask 或 Django 的增删改查,但被问到「微博首页那条时间线是怎么拼出来的」「发一条推文之后,为什么关注你的人几秒内就能刷到」,多半会卡住。这门课要补的正是这个缺口:不是再教你写一个博客,而是把 Twitter 这类读多写多、关系复杂的后端系统拆开,让你看清每个环节的取舍。

它更适合哪类人

课本身从零搭起,但它并不是「第一门 Python 课」。如果你还没写过路由、没连过数据库,跟起来会吃力。真正能吃到红利的是三种情况。

  • 做过单体 CRUD 项目,但系统从没承受过「一个用户关注几千人、首页要聚合几千条内容」这类压力,想知道瓶颈出在哪。
  • 准备后端岗位面试,被问过限流、缓存穿透、消息丢失、ID 生成方案,答得含糊,需要拿一个具体项目把答案落地。
  • 工作中只负责某个模块,对整条链路——请求进来、鉴权、写库、发事件、异步处理、返回——缺少完整视角。

如果你已经能独立设计分库分表、熟练调优过线上集群,这门课对你偏基础,省下时间更划算。

课程围绕的几个真实难点

Twitter 类系统的复杂度不在接口数量,而在于同一份数据要同时满足写入快、读取快、关系还乱。课里会把这些问题一个个摊开。

身份与关系是起点:用户、会话、关注与被关注怎么建模,关注关系这张表在双向查询下怎么不至于把数据库拖垮。接着是内容本身——推文怎么存、时间线是推模式(发的时候写进每个粉丝的收件箱)还是拉模式(刷的时候现查关注列表),两种做法的代价分别落在写侧还是读侧。这个权衡是整门课最值得反复琢磨的部分。

再往后是工程上真正会咬人的地方:热点数据用缓存挡在前面,随之而来的是一致性和失效策略;发推后触发的通知、计数更新等动作丢进消息队列,把同步链路拆成异步;对外接口要限流,防止单个客户端把配额吃光;分页不能靠 offset 一路翻到底,得换成游标。这些不是名词罗列,而是跟着项目一步步加进去的。

学的时候建议怎么练

看代码讲解很容易产生「我懂了」的错觉。每讲完一个机制,先别急着往后翻,把实现自己写一遍,哪怕只写最朴素的版本。比如时间线,先用最笨的「刷的时候查关注列表再聚合」跑通,再按课程思路改成推模式,两边都跑一遍,你才会对读写放大有体感。

缓存和消息队列这两块尤其要动手制造故障:手动清掉缓存看系统能不能扛住,把消费端停掉再启动,观察消息是丢了、重复了还是堆积了。教材里的方案在正常路径上都对,只有异常路径能暴露你有没有真的理解。分页、限流这类边界逻辑,记得写用例覆盖「第一页」「最后一页」「并发翻页」几种情况。

学完应该能回答的问题

  • 一条推文从提交到出现在粉丝首页,中途经过了哪些组件,哪一步最可能成为瓶颈?
  • 关注关系、推文、时间线各自的存储选型依据是什么,为什么不用一张表解决?
  • 缓存和数据库的数据不一致窗口有多大,你打算怎么把它压到可接受范围?
  • 消息队列丢消息或重复消费时,业务上如何保证计数、通知不出错?
  • 接口限流按用户还是按 IP,令牌桶和漏桶在你的场景里该选哪个?
  • 翻页到很深的页码时性能为什么骤降,游标分页解决了什么、又牺牲了什么?

能把这些讲清楚,比项目本身能不能跑起来更有价值。跑通只是及格线,讲得出取舍才算过关。

九章算法Twitter 后端系统 - Python 项目实战2022

课程详情

课程概述

本课程将带领学员从零开始,基于 Python 技术栈搭建一个类似 Twitter 的后端系统。通过实战项目,学员能深入理解后端开发的核心概念和关键技术,掌握从需求分析、架构设计到代码实现、测试部署的完整流程。无论你是刚入门的编程新手,还是想提升后端开发技能的程序员,都能从本课程中获得实用的知识和宝贵的实战经验。

课程亮点

  • 实战驱动:以真实的 Twitter 后端系统为原型,所有知识点都围绕项目开发展开,让学员在实践中快速掌握技能。
  • 技术全面:涵盖 Python 后端开发的多个重要技术,包括 Web 框架、数据库设计与操作、缓存机制、消息队列等。
  • 架构清晰:详细讲解系统架构设计思路,帮助学员树立良好的架构思维,学会如何设计可扩展、高性能的后端系统。
  • 代码精讲:对关键代码进行逐行解析,让学员理解代码背后的逻辑和原理,提高代码编写能力。

课程内容

  • 需求分析与系统设计:详细分析 Twitter 后端系统的核心功能需求,进行系统架构设计。
  • Web 框架与基础搭建:介绍 Python 常用的 Web 框架,并选择合适的框架进行项目搭建。
  • 数据库设计与操作:设计数据库表结构,学习使用 ORM 框架进行数据库操作。
  • 核心功能实现:实现用户系统、推文功能、关注与粉丝、点赞与评论等功能。
  • 性能优化:讲解数据库索引优化、查询优化等提高数据库性能的方法,介绍缓存机制和消息队列的应用。
  • 测试与部署:介绍单元测试、集成测试的方法,讲解系统部署的流程,包括服务器环境配置、代码部署等。

项目技术栈

  • 编程语言:Python
  • Web 框架:Flask / Django
  • 数据库:MySQL / PostgreSQL
  • ORM 框架:SQLAlchemy
  • 缓存:Redis
  • 消息队列:RabbitMQ
  • 测试框架:pytest
  • 部署工具:Docker

学习收获

  • 掌握 Python 后端开发的核心技术和实战技能。
  • 理解后端系统的架构设计理念。
  • 熟悉数据库设计与优化、缓存机制、消息队列等后端开发常用技术的应用。
  • 获得一个完整的实战项目经验。

课程目录

01 第一章【直播】先导课程
  1. 先导课程 九章算法 - YouTube
02 第二章【互动】必备的 Python 基础知识训练(上)
  【Twitter课】2.1 如何 Import
  【Twitter课】2.2 字符串 String
  【Twitter课】2.3 序列 Sequence
03 第三章【互动】必备的 Python 基础知识训练(中)
  【Twitter课】3.1 列表 List
  【Twitter课】3.2 元组 Tuple
  【Twitter课】3.3 字典 Dict
  【Twitter课】3.4 条件分支 If
  【Twitter课】3.5 循环 Loop
  【Twitter课】3.6 循环中的 else
  【Twitter课】3.7 推导式 Comprehension
04 第四章【互动】必备的 Python 基础知识训练(下)
  【Twitter课】4. 1 Function
  【Twitter课】4. 2 Class
  【Twitter课】4. 3 Class Namespace
  【Twitter课】4. 4 Class Advanced
  【Twitter课】4. 5 Exception
  【Twitter课】4. 6 Decorator
  【Twitter课】4. 7 Decorator in project
05 第五章【互动】必备的数据库基础知识训练
  【Twitter课】5.1 数据库基本概念
  【Twitter课】5.2 SQL
  【Twitter课】5.3 表单设计
  【Twitter课】5.4 数据库的增加和查找
  【Twitter课】5.5 数据库的修改和删除
  【Twitter课】5.6 数据库的索引
06 第六章【互动】Web 基础知识
  【Twitter课】6.1 HTTP URL
  【Twitter课】6.2 HTTP 请求报文
  【Twitter课】6.3 Cookie
  【Twitter课】6.4 HTTP 响应报文
  【Twitter课】6.5 DNS域名解析系统
07 第七章【互动】Web Framework 介绍及常用 Linux 和 Git 命令
  【Twitter课】7.1 Frontend
  【Twitter课】7.2 Backend httpp, server, web
  【Twitter课】7.3 Linux command
  【Twitter课】7.4 Git
08 第八章【直播】理论课:初始开发环境搭建、Restful API 与 Unit Tests
  【Twitter课】8.【直播】理论课:初始开发环境搭建、Restful API 与 Unit Tests
09 第九章【互动】实践课:开发环境搭建与项目初始化
  【Twitter课】9.1 Git Repo, Vagrant & Pycharm
  【Twitter课】9.2 First Pull Request
  【Twitter课】9.3 Create Django Project
  【Twitter课】9.4 Django Rest Framework
10 第十章【互动】实践课:手把手 Coding 与常见问题答疑
  【Twitter课】10. 1 Login Status
  【Twitter课】10. 2 Logout
  【Twitter课】10. 3 Login
  【Twitter课】10. 4 Signup
11 第十一章【互动】实践课:Debug 工具安装与 Bug Fix 练习
  【Twitter课】11. 1 Django DebugTool Installation
  【Twitter课】11. 2 Bug Fix Training 2
  【Twitter课】11. 3 Bug Fix Training 3
  【Twitter课】11. 4 Bug Fix Training 4
  【Twitter课】11. 5 Bug Fix Training 5
12 第十二章【直播】实践课:Django ORM 理论与练习
  【Twitter课】12 实践课:Django ORM 理论与练习   九章算法
13 第十三章【直播】理论课:核心模块 Tweet, Frendship, NewsFeed 的实现
  【Twitter课】13 理论课:核心模块 Tweet, Frendship, NewsFeed 的实现   九章算法
14 第十四章【互动】实践课:Tweet 模块
  【Twitter课】14.1 Initial Tweet Model
  【Twitter课】14.2 Tweet List API
  【Twitter课】14.3 Create Tweet API
  【Twitter课】14.4 Create Composite Index
  【Twitter课】14.5 Tweet Unit Tests
15 第十五章【互动】实践课:Friendship 模块
  【Twitter课】15. 1 Friendship Model
  【Twitter课】15. 2 Followers & Following API
  【Twitter课】15. 3 Follow & Unfollow
  【Twitter课】15. 4 Friendship Tests
16 第十六章【互动】实践课:Newsfeed 模块
  【Twitter课】16. 1 NewsFeed Model & Admin
  【Twitter课】16. 2 NewsFeed Fanout
  【Twitter课】16. 3 NewsFeed 你好是吧API & Tests
17 第十七章【直播】Tweet 后端核心模块答疑串讲
  【Twitter课】17 Tweet 后端核心模块答疑串讲 九章算法
18 第十八章【直播】理论课:评论,点赞
  18 理论课:评论,点赞 九章算法
19 第十九章【互动】实践课:评论模块 Comment
  【Twitter课】19. 1 Comments Model and Admin
  【Twitter课】19. 2 Comments你好是吧 Create
  【Twitter课】19. 3 Comments Update and Destr
  【Twitter课】19. 4 Comments List I
  【Twitter课】19. 5 Tweet Retrieve API with Commes
20 第二十章【互动】实践课:点赞模块 Like
  20 1 Likes Model and Admin处理过的
  20.4
  【Twitter课】20. 1 Likes Create API
  【Twitter课】20. 2 Likes Cancel API
  【Twitter课】20. 3 Insert Likes to other APIs
21 第二十一章【直播】理论课:通知与图像上传
  21 理论课:通知与图像上传处理过的
22 第二十二章【互动】实践课:通知模块
  【Twitter课】22. 1 Install Notifications
  【Twitter课】22. 2 Notifications API Part1
  【Twitter课】22. 3 Notifications API Part 2   update
23 第二十三章【互动】实践课:用户资料模块与 Amazon S3 配置
  【Twitter课】23. 1 UserProfile Model and Admin
  【Twitter课】23. 2 Amazon S3 Django settings
  【Twitter课】23. 3 Amazon S3 Web Settings
24 第二十四章【互动】实践课:用户资料模块 API 实现与图像上传模块
  【Twitter课】24 .2 Tweet Photos Model and Admin
  【Twitter课】24. 1 UserProfile API
  【Twitter课】24. 3 Tweet Photo Uploads API
25 第二十五章【直播】答疑课:通知与图像上传模块答疑串讲
  【Twitter课】25  答疑课:通知与图像上传模块答疑串讲   九章算法
26 第二十六章【直播】理论课:翻页 Pagination 与缓存 Cache
  【Twitter课】26 理论课:翻页 Pagination 与缓存 Cache 九章算法
27 第二十七章【互动】实践课:好友列表翻页
  【Twitter课】27 1 Friendships PageNumberPagination
28 第二十八章【互动】实践课:Timeline 与 NewsFeed 翻页
  【Twitter课】28. 1 Tweets EndlessPagination
  【Twitter课】28. 2 NewsFeeds EndlessPagination
29 第二十九章【互动】实践课:接入缓存 Cache
  29.1 Following Cache处理过的
  【Twitter课】29. 2 User Cache
  【Twitter课】29. 3 Tweet Cache
30 第三十章【直播】理论课:使用 Redis 对 Tweets, NewsFeed 进行缓存
  【Twitter课】30 理论课:使用 Redis 对 Tweets, NewsFeed 进行缓存 九章算法
31 第三十一章【互动】安装 Redis 和使用介绍
  【Twitter课】31 安装 Redis 和使用介绍 九章算法
32 第三十二章【互动】使用 Redis 缓存用户推文
  【Twitter课】32 使用 Redis 缓存用户推文 九章算法
33 第三十三章【互动】使用 Redis 缓存新鲜事和限制长度
  【Twitter课】33. 1 Cache Newsfeeds in Redis
  【Twitter课】33. 2 Limit List Size in Redis
34 第三十四章【直播】理论课:冗余存储技术 Denormalization, 消息队列 Message Queue 与流器 RateLimiter
  34 答疑课:翻页 Pagination 与缓存 Cache 答疑处理过的
35 第三十五章【直播】理论课:冗余存储技术 Denormalization, 消息队列 Message Queue 与流器 RateLimiter
  理论课:冗余存储技术 Denormalization, 消息队列 Message Queue
36 第三十六章【互动】Denormalization 优化存储
  【Twitter课】36.1 Denormalization Model Change
  【Twitter课】36.2 Cache comments_count and likes_count
37 第三十七章【互动】Celery 的使用和 fanout 改进
  【Twitter课】37.1  Async Tasks & Celery Introduce
  【Twitter课】37.2 Run Celery & Fanout newsfeeds in Async Task
  【Twitter课】37.3 Optimize NewsFeeds Fanout
38 第三十八章【互动】RateLimiter 限流器的使用
  【Twitter课】38.1 How to RateLimit
  【Twitter课】38.2 Coding RateLimit
39 第三十九章【直播】理论课:NoSQL 数据库的安装与 Friendship 的 NoSQL 实现
  39 理论课:NoSQL 数据库的安装与 Friendship 的 NoSQL 实现处理过的
40 第四十章【互动】Hbase的介绍与手把手安装
  【Twitter课】40.1 Introduction to HBase
  【Twitter课】40.2 HBase Install Step by Step.
41 第四十一章【互动】HBase Field 与 Model
  【Twitter课】41.1 Hbase Connection
  【Twitter课】41.2 HbaseField.
  【Twitter课】41.3 HBaseModel
42 第四十二章【互动】扩展知识:从用户系统设计中学习数据库与缓存
  【Twitter课】 写多读少如何优化
  【Twitter课】 写多读少如何优化(1).mp4
  【Twitter课】Cache 如何优化 Database 数据读取
  【Twitter课】SQL & NoSQL 的选择标准
  【Twitter课】什么是缓存
  【Twitter课】以 Cassandra 为例的 NoSQL
  【Twitter课】好友关系的存储与查询
  【Twitter课】如何实现账户登录服务
  【Twitter课】拓展练习1:NoSQL 存单向好友关系
  【Twitter课】拓展练习2:NoSQL 存储 User 如何支持多个索引?
  【Twitter课】拓展练习3:共同好友
  【Twitter课】拓展练习4:LinkedIn 六度关系
  【Twitter课】用户系统设计 & QPS
43 第四十三章【互动】扩展知识:分布式数据库 Big Table
  8-5 BigTable读取优化 - BloomFilter
  B-Tree & B+Tree
  BigTable 的Sharding
  BigTable 的分布式锁
  GFS和Big Table的关系
  K路归并 & 外排序
  bigtable简介1
  bloom filter详解
  【Twitter】BigTable一个可行的读写过程
  【Twitter课】BigTable的基本设计
  【Twitter课】BigTable读取优化 - Index
44 第四十四章【直播】理论课:NewsFeeds 的 NoSQL 实现
  44 理论课:NewsFeeds 的 NoSQL 实现
45 第四十五章【互动】HBase 的单元测试和 HBase ORM
  【Twitter课】45.1 HBase Unit Tests
  【Twitter课】45.2 HBase Table Scan - part 1
  【Twitter课】45.3 HBase Table Scan - part 2
46 第四十六章【互动】使用 HBase 存储好友关系 Ⅰ
  【Twitter课】46.1 GateKeeper & Friendship Serializer Refactor.
  【Twitter课】46.2 Move Friendships to HBase - follow.
47 第四十七章【互动】使用 HBase 存储好友关系 Ⅱ
  【Twitter课】47.1 Move Friendship to HBase - unfollow.
  【Twitter课】47.2 Move Friendships to HBase - Pagination
48 第四十八章【互动】实践课:云平台部署与 Load Balancer
  48 理论课:云平台部署与 Load Balancer
  理论课:云平台部署与 Load Balancer(后面有问题的下半段).mp4
课件资料
  源码+资料+课件+习题