跟读练习: System Design: How to Build an API Rate Limiter - 通过视频学习英语口语

正在创建课程...
1
Let's design an API rate limiter for an application that takes thousands of requests per second.
2
User journey is simple.
3
User can make API calls to your server to do something.
4
Each user is allowed to make 100 API calls per minute.
5
If a user makes more than 100 calls per minute, then your server will not process those API calls.
6
Most engineers approach this problem with a counter.
7
For each user, you store user ID, count of API calls, and current minute.
8
Every time a request is made by user, you increase this count, and you will reject the requests once it passes 100 requests.
9
This implementation is good enough for internal API calls, but let's take two specific examples why this solution is not good.
10
Let's say user Alan is a burst user, and makes 100 API calls in first two seconds.
11
Then he will get rejected for the next 58 seconds.
12
Alan will be able to make calls when next minute starts.
13
And our second user, John, sends 100 API requests, but these requests are sent at the last second of the current minute.
14
The next second clock will reset to new minute, and John can send another 100 requests.
15
Basically, John sent 200 requests in 2 seconds, because according to Counter, these 100 requests belong to different minutes.
16
Basically, users will experience different behavior of APIs based on when they make the API call.
17
There is a fundamental issue with the approach we just discussed.
18
The Counter is watching the clock instead of watching the user.
19
Let's see a better approach.
20
So, we will give every user a bucket that holds 100 tokens.
21
Every API request from user takes one token out, and we will keep filling the bucket at a rate of 100 tokens per minute, which is approximately 1.67 tokens per second.
22
For simplification, let's assume we will fill two tokens per second.
23
If user doesn't make any API call, the bucket will remain at 100, and we don't need to fill.
24
If the bucket is empty, we will reject the request.
25
This token bucket approach is what Stripe, GitHub, and most API gateways actually use for tracking API calls.
26
Now let's take a look at Alan and John's requests again, and see how this bucket system will work.
27
Alan drains all 100 tokens in 2 seconds.
28
Then Alan has to slow down.
29
Bucket fills about 2 tokens per second.
30
That's why he can now make 2 calls per second.
31
John, who is making 100 API calls at the end of the minute, will also need to wait for Bucket to fill, because once he makes 100 requests in a second, Bucket will get empty.
32
So he can also make about 2 per second, as Bucket fills with time.
33
Next question is, how do we store these buckets?
34
We just need to store the token count, and the time of the last refill, so that you can add tokens per second.
35
But what if your app works at large scale, and you have 20 different servers accepting API calls.
36
Two requests for the same user can land on two servers in the same millisecond.
37
Therefore, you keep the bucket outside the servers, in one common shared storage.
38
This storage needs to be fast, and that's why we usually use Redis.
39
When any of these 20 servers processes any API call, we change the count at this common Redis.
40
To make this crystal clear in your mind, you need to remember that request limit is not just one number.
41
It's two numbers.
42
First, how much a user can burst in one go, and second, how fast they can go after the burst.

本课的词汇与口语要点

这节 C1 级别的口语课以视频“System Design: How to Build an API Rate Limiter”为素材。 视频中反复出现的词有:Api, user, request, bucket, token。 这段视频共有 42 个句子、594 个单词可供跟读。 讲话部分时长为 2:47。 说话人语速较快,每分钟约 213 个词,会出现较多连读和弱读。 82% 的单词属于英语最常用的 3,000 词,其余的词建议在练习前先学一下。

视频中的重点词汇

视频中最难的 11 个单词,附发音和释义:

单词发音释义
bucket 名词/ˈbʌkɪt/水桶, 吊桶
token 名词/ˈtoʊkən/代幣 /代币, 籌碼 /筹码
server 名词/ˈsɝvɚ/服務器 /服务器, 伺服器
burst 动词/bɜːst/爆裂, 破裂
crystal 名词/ˈkɹɪstəl/結晶 /结晶
belong 动词/bɪˈlɒŋ/屬於 /属于
fundamental 形容词/ˌfʌn.dəˈmɛn.təl/基本
implementation 名词/ˌɪmplɪmənˈteɪʃən/履行
reset 动词/ɹiːˈsɛt/重置
millisecond 名词/ˈmɪlɪˌsɛkənd/毫秒
simplification 名词/ˌsɪm.plɪ.fɪˈkeɪ.ʃən/簡單化 /简单化, 簡化 /简化

视频中出现的短语动词

单词释义
slow down 动词減速 /减速, 放慢

视频中的语法

说话人最常用的结构,并附上视频中的原话:

结构视频中的用法
条件句 if + 从句,will/would + 动词 — 条件及其结果If the bucket is empty, we will reject
被动语态 be + 过去分词 — 强调发生了什么,而不是谁做的is allowed · is made · are sent

需要注意的发音

  • “sh” 和 “zh” 音: implementation /ˌɪmplɪmənˈteɪʃən/, simplification /ˌsɪm.plɪ.fɪˈkeɪ.ʃən/
  • 长单词——注意重音位置: fundamental /ˌfʌn.dəˈmɛn.təl/, implementation /ˌɪmplɪmənˈteɪʃən/, millisecond /ˈmɪlɪˌsɛkənd/, simplification /ˌsɪm.plɪ.fɪˈkeɪ.ʃən/

中文母语者容易读错的音:

  • 词尾辅音 — 要读清楚,后面不要加元音: bucket /ˈbʌkɪt/, burst /bɜːst/, clock /klɑk/, reset /ɹiːˈsɛt/, millisecond /ˈmɪlɪˌsɛkənd/
  • /r/ 和 /l/ 的区别: crystal /ˈkɹɪstəl/, refill /ˈɹiː.fɪl/

如何用这段视频练习

  1. 先完整听一遍视频,不要开口,记下不认识的单词。
  2. 先用 0.75 倍速逐句跟读,熟练之后再回到正常速度。
  3. 录下自己的声音并与原声对比,特别注意 bucket, token, server 这类单词。

什么是跟读法?

跟读法 (Shadowing) 是一种有科学依据的语言学习技巧,最初开发用于专业口译员的培训,并由多语言者Alexander Arguelles博士普及。这个方法简单而强大:您在听英语母语原声的同时立即大声重复——就像是一个延迟1-2秒紧跟说话者的影子。与被动听力或语法练习不同,跟读法强迫您的大脑和口腔肌肉同时处理并模仿真实的讲话模式。研究表明它能显着提高发音准确性,语调,节奏,连读,听力理解和口语流利度——使其成为雅思口语备考和真实英语交流最有效的方法之一。

影子跟读法: 阅读完整分步指南 →