跟读练习: How Uber Scaled from One Server to 150 Million Reads Per Second - 通过视频学习英语口语

选择练习模式

每种模式都会打开全屏练习室。

134 句
如果句子过短或过长,请点击 Edit 进行调整。
1
In 2009, Uber was starting with a Python mullet.
2
One application, one growing business.
3
By 2019, Uber reported more than 15 million trips a day.
4
And in 2025, its caching infrastructure reported over 150 million cache database row reads per second at peak.
5
So how does a system grow at that scale?
6
Let's build it step by step.
7
Imagine you are building Uber you start with one application
8
and a postgres database and this is called monolith
9
and all your main application features live inside one application
10
and early days that's not a bad thing it's easier to build test
11
and deploy code but now more rides are booing trips more drivers are sending updates
12
and your application has work to do if the application and database share one machine they compete for the CPU and RAM.
13
The database run queries, the application handle request and both need resources.
14
One solution is to move the database onto its own server.
15
Now the application and database have separate resources.
16
You can scale them independently but there is a catch.
17
They now communicate over a network and the database can still become a bottleneck.
18
Meanwhile your application is also getting more traffic.
19
So let's scale your application first the simplest option is to give your application server more cpu
20
and memory and this is called vertical scaling it can work well
21
when you are just starting out you don't need to redesign everything just
22
because traffic increases but one machine has limits and
23
if it fails your application may become unavailable
24
so instead of making one server bigger you can add more servers
25
and that is horizontal scaling now you have multiple servers handling request
26
but there's a new question when the request arrives
27
which server should handle it
28
so you put a load of answer in front of replication server
29
it distributes incoming requests across them it can use strategies like round robin
30
or lease connection
31
and health checks can help it avoid sending traffic to unhealthy server
32
now one server failing does not necessarily take down the whole application
33
but there is a other problem imagine a user logs in replication store their session on the first server
34
then the user's next request reaches a different server
35
that server may not have the session so how does it know
36
that you are logged in one option is to store session in a shared system such as redis
37
now any application server can retrieve the session
38
and other option is to use a token such as gwd
39
that carries signed claims that can reduce the need to look up a session on every request.
40
But remember, tokens don't eliminate every kind of server -side state.
41
The key idea is simple.
42
Don't make one application server the only place where information needed by the next request exists.
43
We've added application servers, but all of them still depend on database.
44
And every request does not necessarily need to read fresh data from it.
45
Some data gets requested repeatedly, and that is where caching comes in.
46
Imagine a request needs a piece of data.
47
First, the application checks the cache.
48
If the data is there, it returns it and that is cache hit.
49
If it is missing, the application fetches it from database
50
and can put it in the cache and that is a cache miss.
51
The next request may get the data without querying the database again.
52
But caching introduces a problem.
53
What happens when the original data changes?
54
The cached copy might become stale.
55
You can use techniques such as time to live or TTL to expire entries.
56
You can also use invalid cache data when the underlying data changes.
57
Strategies like write -through or write -around handle writes differently.
58
And there is no single strategy that's best for every workload.
59
Uber has built caching infrastructure called CacheFront.
60
In August 1995, Uber reported that it handled more than 150 million cache row reads per second at peak.
61
Notice what that number means.
62
It's cache database row reads handled by that infrastructure.
63
And it does not mean every database read across
64
Uber was subbed from the cache.
65
Caching can remove a lot of repeated work, but it does not solve every database problem.
66
Some applications read data far more often than updated.
67
For those workloads, you can introduce read replicas.
68
The primary database handle writes, replica receive copies of the data then application can send suitable read queries to those replicas
69
that take some read traffic away from the primary
70
but there is an important catch replication can take time the primary might have the latest update
71
while the replica is still catching up and this is called replication lack
72
so if a request need the fresh data you may need a read from the primary.
73
Replica help with re -capacity but they don't automatically solve right bottlenecks or storage limits.
74
Now imagine your trip data keeps growing.
75
Eventually one database may struggle to store and serve everything efficiently.
76
Uber ran into storage challenges with the Postgres -packed trip data in its early growth period.
77
It developed a system called SchemaLess on top of MySQL.
78
This brings us to another scaling technique.
79
It is called Sharding.
80
Instead of storing all the data on one database, you split it across multiple database groups.
81
For example, imagine dividing trips into groups based on hash of the trip identifier.
82
One group stores some trips, another group stores others.
83
The application needs a way to work out which group contains the requested trip.
84
And that is the basic idea.
85
This example explains sharding.
86
It is not a claim about Uber's exact partitioning algorithm okay
87
so sharding lets you distribute data and workload
88
but now your application need to know where each record live
89
and the workload might not be evenly distributed imagine one shard receiving far more requests than the others
90
that shard can become a bottleneck even when the rest are healthy
91
and this is also called a hot shard so sluting the data helps but it also makes data management more complicated.
92
Okay, so there is one more challenge.
93
As the developer team grow, more developers work on the same application.
94
A change in one area might affect other.
95
Deployment can become much harder to coordinate.
96
One response is to split the application into small services.
97
And Uber documented its move toward a microservice architecture in 2015.
98
So imagine this.
99
Payments, pricing, and trips matching as separate services.
100
These are illustrative examples of how an application can be divided.
101
Each service can have its own code base and deployment process.
102
Teams can work more independently, but now one user request might depend on several services working together.
103
And that creates a different kind of problem.
104
Okay, inside one application, calling a function is usually straightforward.
105
For example, a fare calculation function might take the trip details as input and return the calculated fare.
106
But when one service calls another service over a network, things change.
107
The other service might be slow or it might be unavailable or the network request might time out.
108
Now you need to handle failure across service boundaries.
109
Okay, so when an application has many services, finding the cause of slow request gets hard.
110
Was the delay in pricing, was it payments or was one service waiting on another?
111
So Uber developed Yaeger, a distributed tracing system to help engineer follow requests across services.
112
Tracing helps you to see where time is spent and where request is failing.
113
Without that visibility, debugging a distributed system becomes much harder.
114
Ok, as the services multiply, service discovery and communication also becomes more complicated.
115
A service needs to find the service it wants to call.
116
And the system need to handle those connections reliably.
117
So Uber developed Hyperband as a part of its service communication infrastructure.
118
So engineers also used general resilience patterns such as timeouts, retries and circuit breakers.
119
But those patterns need careful configuration.
120
Retries for example can make an overload service even busier.
121
So by July 2020, Uber had described an architecture with around 2200 critical microservices organized into 70 domains.
122
These 70 domains were not 70 services.
123
They were broader grouping used to organize services.
124
And that is important lesson here.
125
Microservices can be more independent but also create more dependence, more network calls, more operational complexity.
126
So just look at the progression.
127
You start with one application, then you separate the database, you add application servers, you share session state, you introduce caching and read applicas,
128
you shard the data, and eventually you split the application into services.
129
Each decision solves a problem, but each decision also introduces a new trade -off.
130
That's how production systems grow.
131
Not by adding every technology from the beginning, but by identifying the bottleneck, choosing a solution, and understanding the new problem that solution create.
132
When you are designing a system, don't just ask, what technology should I use?
133
Ask, what problem am I solving and what trade -off am I accepting?
134
Save this for your next systemline interview and follow for more.

下载应用

流利口语所需的一切

AI 发音评分逐句打分
音标练习掌握每个音
词汇学习建立你的词库
词汇游戏边玩边学
FOR YOU

推荐视频

本课的词汇与口语要点

这节口语课以视频“How Uber Scaled from One Server to 150 Million Reads Per Second”为素材。 视频中反复出现的词有:application, database, server, request, Uber。 这段视频共有 134 个句子、1507 个单词可供跟读。 讲话部分时长为 9:46。 说话人语速自然,每分钟约 154 个词,接近日常对话。 只有 79% 的单词属于英语最常用的 3,000 词,词汇难度较高。

视频中的重点词汇

视频中 15 个值得学习的单词,附发音和释义:

单词发音释义
database 名词/ˈdeɪtəˌbeɪs/數據庫 /数据库
server 名词/ˈsɝvɚ/服務器 /服务器, 伺服器
cache 名词/kæʃ/緩存 /缓存, 快取
distribute 动词/dɪˈstɹɪbjuːt/分配
replica 名词/ˈɹɛplɪkə/複製品 /复制品, 仿製品 /仿制品
infrastructure 名词/ˈɪnfɹəˌstɹʌkt͡ʃə/基礎設施 /基础设施
solve 动词/sɒlv/解決 /解决
introduce 动词/ˌɪntɹəˈdus/介紹 /介绍, 紹介 /绍介
query 名词/ˈkwɪɹ.i/問題 /问题, 質問 /质问
necessarily 副词/ˌnɛs.əˈsɛɹ.ə.li/必然地, 必定地
complicated 形容词/ˈkɑm.plɪˌkeɪ.tɪd/複雜 /复杂
technique 名词/tɛkˈniːk/技術 /技术, 技巧
architecture 名词/ˈɑː.kɪˌtɛk.t͡ʃə/建築 /建筑, 建築學 /建筑学
log 名词/lɔɡ/圓木 /圆木
domain 名词/ˌdəʊˈmeɪ̯n/領域 /领域

视频中出现的短语动词

单词发音释义
look up 动词/ˌlʊk ˈʌp/仰, 上看
work out 动词/ˌwɝk ˈaʊt/計算 /计算, 算出

视频中的语法

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

结构视频中的用法
被动语态 be + 过去分词 — 强调发生了什么,而不是谁做的is called · are logged · was subbed
现在完成时 have/has + 过去分词 — 过去发生但与现在仍有关联的事We've added · has built

需要注意的发音

说话人用了 6 次缩略和弱读形式,例如 don't, we've。请按听到的简短形式来说。

  • “th” 音: algorithm /ˈælɡəɹɪðm̩/, unhealthy /ʌnˈhɛl.θi/, monolith /ˈmɑn.əˌlɪθ/
  • “sh” 和 “zh” 音: cache /kæʃ/, operational /ˌɑ.pəˈɹeɪ.ʃə.nəl/, configuration /kənˌfɪɡ.əˈɹeɪ̯.ʃən/, progression /pɹəˈɡɹɛʃən/, calculation /ˌkælkjuˈleɪʃn̩/
  • 长单词——注意重音位置: infrastructure /ˈɪnfɹəˌstɹʌkt͡ʃə/, necessarily /ˌnɛs.əˈsɛɹ.ə.li/, complicated /ˈkɑm.plɪˌkeɪ.tɪd/, architecture /ˈɑː.kɪˌtɛk.t͡ʃə/, developer /dɪˈvɛləpɚ/

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

  • /v/ — 不要读成 /w/,上齿轻触下唇: server /ˈsɝvɚ/, solve /sɒlv/, developer /dɪˈvɛləpɚ/, divide /dɪˈvaɪd/, unavailable /ˌʌnəˈveɪləbəl/
  • 词尾辅音 — 要读清楚,后面不要加元音: database /ˈdeɪtəˌbeɪs/, cache /kæʃ/, distribute /dɪˈstɹɪbjuːt/, solve /sɒlv/, introduce /ˌɪntɹəˈdus/
  • /r/ 和 /l/ 的区别: replica /ˈɹɛplɪkə/, necessarily /ˌnɛs.əˈsɛɹ.ə.li/, differently /ˈdɪf.ə.ɹənt.li/, operational /ˌɑ.pəˈɹeɪ.ʃə.nəl/, repeatedly /ɹɪˈpiːtɪdli/

如何用这段视频练习

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

什么是跟读法?

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

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