Prática de Shadowing: How Uber Scaled from One Server to 150 Million Reads Per Second - Aprenda a falar inglês com vídeo

Escolha um modo de prática

Cada modo abre uma sala de prática em tela cheia.

134 frases
Se as frases estiverem muito curtas ou longas, clique em Edit para ajustá-las.
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.

Baixar aplicativo

Tudo o que você precisa para falar fluentemente

Pronúncia com IANota em cada frase
Prática de IPADomine cada som
VocabulárioMonte seu banco de palavras
Jogo de vocabulárioAprenda brincando
FOR YOU

Vídeo recomendado

Vocabulário e dicas de fala para esta lição

Esta aula de conversação usa o vídeo “How Uber Scaled from One Server to 150 Million Reads Per Second”. As palavras que mais se repetem: application, database, server, request, Uber. Este vídeo tem 134 frases e 1507 palavras para praticar shadowing. A fala dura 9:46. O falante fala em ritmo natural, cerca de 154 palavras por minuto, próximo de uma conversa do dia a dia. Apenas 79% das palavras estão entre as 3.000 mais comuns do inglês, por isso o vocabulário é exigente.

Vocabulário principal deste vídeo

15 palavras do vídeo que vale a pena aprender, com pronúncia e significado:

PalavraPronúnciaSignificado
database substantivo/ˈdeɪtəˌbeɪs/banco de dados, base de dados
server substantivo/ˈsɝvɚ/servidor, server
cache substantivo/kæʃ/esconderijo
distribute verbo/dɪˈstɹɪbjuːt/distribuir, parcelar
replica substantivo/ˈɹɛplɪkə/réplica, cópia exata
infrastructure substantivo/ˈɪnfɹəˌstɹʌkt͡ʃə/infraestrutura
solve verbo/sɒlv/resolver, solucionar
introduce verbo/ˌɪntɹəˈdus/apresentar
query substantivo/ˈkwɪɹ.i/pergunta
necessarily advérbio/ˌnɛs.əˈsɛɹ.ə.li/necessariamente
complicated adjetivo/ˈkɑm.plɪˌkeɪ.tɪd/complicado
technique substantivo/tɛkˈniːk/técnica
architecture substantivo/ˈɑː.kɪˌtɛk.t͡ʃə/arquitetura
log substantivo/lɔɡ/tora
domain substantivo/ˌdəʊˈmeɪ̯n/domínio

Phrasal verbs que você vai ouvir

PalavraPronúnciaSignificado
work out verbo/ˌwɝk ˈaʊt/calcular

Gramática neste vídeo

As estruturas que o falante mais usa, com as palavras exatas do vídeo:

EstruturaNo vídeo
Voz passiva be + particípio passado — o foco está no que acontece, não em quem fazis called · are logged · was subbed
Present perfect have/has + particípio passado — uma ação passada que ainda importa agoraWe've added · has built

Pronúncia para ficar de olho

O falante usa 6 contrações e formas reduzidas, como don't, we've. Diga-as na forma curta, do jeito que você ouve.

  • Os sons de “th”: algorithm /ˈælɡəɹɪðm̩/, unhealthy /ʌnˈhɛl.θi/, monolith /ˈmɑn.əˌlɪθ/
  • Os sons de “sh” e “zh”: cache /kæʃ/, operational /ˌɑ.pəˈɹeɪ.ʃə.nəl/, configuration /kənˌfɪɡ.əˈɹeɪ̯.ʃən/, progression /pɹəˈɡɹɛʃən/, calculation /ˌkælkjuˈleɪʃn̩/
  • Palavras longas — acerte a sílaba tônica: 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ɚ/

Sons difíceis para falantes de português:

  • Consoante final — sem acrescentar um “i” depois: distribute /dɪˈstɹɪbjuːt/, complicated /ˈkɑm.plɪˌkeɪ.tɪd/, technique /tɛkˈniːk/, log /lɔɡ/, depend /dɪˈpɛnd/
  • /l/ final — a língua toca o céu da boca, não vira “u”: unavailable /ˌʌnəˈveɪləbəl/, meanwhile /ˈmiːnwaɪl/, operational /ˌɑ.pəˈɹeɪ.ʃə.nəl/, vertical /ˈvɝ.tɪ.kəl/, horizontal /ˌhoɹəˈzɑn.təl/
  • /h/ — um sopro suave, diferente do “r”: horizontal /ˌhoɹəˈzɑn.təl/, unhealthy /ʌnˈhɛl.θi/, hash /ˈhæʃ/

Como praticar com este vídeo

  1. Ouça o vídeo inteiro uma vez sem falar e anote as palavras que você não conhece.
  2. Comece na velocidade 0,75×, faça shadowing frase por frase e volte à velocidade normal quando ficar fácil.
  3. Grave a sua voz e compare com o original, prestando atenção a palavras como database, server, cache.

O que é a Técnica de Shadowing?

Shadowing é uma técnica de aprendizado de idiomas com base científica, originalmente desenvolvida para o treinamento de intérpretes profissionais. O método é simples, mas poderoso: você ouve áudio em inglês nativo e repete imediatamente em voz alta — como uma sombra seguindo o falante com 1-2 segundos de atraso. Pesquisas mostram melhora significativa na precisão da pronúncia, entonação, ritmo, sons conectados, compreensão auditiva e fluência na fala.

Técnica de shadowing: leia o guia completo passo a passo →