Anything else?
Lock contention is a big thing for us right now.
As I was saying with this Cassandra stuff--
Whenever you vote on a link in a popular subreddit,
it has to lock on that subreddit's listing.
An example of that biting us recently--
we have these queue processors,
and all they do is they
get that queue item that says that
somebody's cast a vote.
So you basically have a set of machines that are reading from this. >>Right.
So all these apps are writing what happened to the queue? >>Right.
Then you've got a bunch of machines
that are reading from the queue.
And what they do is, they sit there.
They pull that out, and then they say, okay, that means I have to update these listings,
and I have to record the vote in postscribes and cassandra.
And they go through all of this stuff,
and that involves a lot of the locking in here right now.
And so we had a lot of these queue processors up for votes,
and we get a lot of votes simultaneously,
so we need a lot of them,
but we had too many, it turned out,
and they were all fighting each other for those locks.
Just having the number of those queue processors
actually sped up queue processing in general.
You need enough queue processors to actually handle the depth of the queue,
but if you have too many,
they spend too much time fighting each other.
And one of the ways we're working on that
is we're getting rid of the locking in the cassandra stuff.
And we're trying to get rid of locks as much as possible in general.
Locking--
It's a common theme.
In python itself
when we first switched to Amazon we had this weird issue where
Python's multi-threading--running two threads at once,
running two pieces of your program at the same time,
is not state of the art--
would be a nice way of putting it.
Python was spending so much time locking its data structures
so two threads could access the same data structure at the same time
that it was actually slowing down the
computer's ability read traffic over the network,
which was causing it to spend more time
switching between threads.
It created this weird network/CPU thrashing issue.
Where the way we solved that at the time was we just made python single threaded,
and we'd only handle one request at the same time.
I think you guys are probably still doing that.
Yeah, we very rarely use threaded processes.
The ad servers use threads, but other than that
we just have lots of separate processes.
You guys use lots of processes on 1 machine,
and the OS then can do the task switching for you.
The OS is Linux; these days, is pretty good at it.
And they spend a lot of their time waiting
for something in the back end.
Well, this is really great. Thank you so much for coming.
One thing I'd like to point out is that
everything we've talked about here, the main things--
memcache, Zookeeper, Cassandra, Hadoop, AMQP, NGINX, HAProxy--
This is all free software.
It's pretty wild how far you can get without paying for anything.
The things that you have to pay for are
the computers to run this stuff, but all of the software
and all of the code behind all of the software is online and free.
Also, the vast majority of reddit's code is also open source and online,
so if you wanna look at this stuff--
What's the URL for that? >>Github.com/reddit.
I'm gonna make a hole right in the middle of our picture here.
If you go into this code,
we switched to git at some point,
and my name isn't on a lot of this code anymore,
but if you go in there, you will see
a lot of the code we've written in this class for
hashing and passwords and all of that stuff--
It exists in reddit somewhere.
It's really common stuff.
It's cool, and you can see all of this stuff's also on the reddit mailing list,
where people discuss these architecture changes and that sort of thing.
Thanks again. Good job.
Watching you guys grow Reddit has been really cool.
There were some dark days, and you guys have really done an amazing job growing that site.
It's really impressive. >>Well, it wouldn't be where it is without you.
All right guys, thanks very much for watching, and we'll see you in the next one.
¿Algo más?
La disputa sobre Lock es un gran asusto para nosotros ahora mismo.
Como estaba diciendo antes sobre Cassandra...
Siempre que votes en un enlance en una subReddit popular,
tiene que encerrarse en esta lista subReddit.
Es un ejemplo que nos atañe actualmente,
tenemos estos procesadores de cola,
y todo lo que hacen es
es poner en cola este ítem
que dice que alguien ha emitido un voto.
- Básicamente tienes un grupo de máquinas que lo leen aquí. - Exacto.
- ¿Así que estas apps escriben lo que le ocurrió a la lista? -Sí.
Así tienes un montón de máquinas
que están leyendo de la lista.
Y lo que hacen, es asentarse aquí.
Lo extraen y después dicen: vale, esto significa que tengo que actualizar estas listas,
y tengo que grabar los votos Postscribes y Cassandra.
Después van a través de todo esto,
y esto conlleva mucho de lo del bloqueo aquí por ahora.
Y así tenemos muchos de estos procesadores de listas para votos,
recibimos muchos votos simultáneamente,
por lo que necesitamos mucho de ellos,
pero tenemos demasiado, lo que resulta,
en una lucha entre ellos por estos bloqueos.
En números de estos procesadores de listas
realmente aumenta la velocidad del procesamiento de listas en general.
Necesitas suficientes procesadores de listas para poder soportar la profundidad de la lista,
pero si tienes demasiados,
utilizan demasiado de su tiempo en luchas entre ellos.
Y una cosa de las cosas en que estamos trabajando
es que nos estamos librando de los bloqueos en Cassandra.
Y estamos intentando liberarnos de estos bloqueos lo más posible en general.
Asegurando...
Es una tema común.
En Python mismamente
cuando nos conectamos por primera vez en Amazon tenemos este problema raro
donde Python está enhebrando dos hilos a la vez,
operando dos partes de tu programa al mismo tiempo,
no es declarado por el Art...
sería una forma interesante de ponerlo.
Python ha estado tanto tiempo asegurando sus estructuras de datos
de tal forma que dos hilos pueden acceder a la misma estructura de datos al mismo tiempo
esto realmente reduce la habilidad
del ordenador en leer el tráfico de la red,
lo que estaba causando la necesidad de pasar más tiempo
cambiando entre hilos.
Creó esta red/CPU rara en este tema.
La forma en que solucionamos esto a la vez fue que simplemente hicimos Python enhebrado,
y solo soportamos una solicitud a a la vez.
Creo que vosotros seguís haciéndolo.
Sí, rara vez utilizamos procesos de enhebrado.
Los servidores de anuncios utilizan hilos, pero otros
nosotros simplemente tenemos muchos procesos separados.
Vosotros utilizáis muchos procesos en una máquina,
y el OS puede hacer la tarea cambiándolo por ti.
El OS es Linux; bastante bueno en esto.
Y utilizan mucho de su tiempo esperando
algo de la segunda parte.
Bueno, este es realmente bueno. Muchas gracias por venir.
Una cosa que me gustaría señalar
es que todo lo que hemos hablado aquí, las cosas principales:
memcache,Zookeeper, Cassandra, Hadoop, AMQP, NGINX, HAProxy...
Todo es software libre.
Es increíble lo lejos que puedes llegar sin pagar nada.
Las cosas por las que tienes que pagar
son los ordenadores para que funcionen todas estas cosas, pero todo el software
y todos los códigos detrás del software está en línea y gratuitamente.
También, la mayoría de los códigos Reddit son fuentes abiertas y en línea,
así que si quieres ver estas cosas...
- ¿Cuál es la URL para esto? - Github.com/reddit.
Voy a hacer un agujero justo en el medio de nuestra imagen aquí.
Si vas dentro este código,
cambiamos a Git en algún momento
y mi nombre ya no está en muchos de estos códigos para siempre,
pero si vas aquí dentro, verás
muchos de los códigos que hemos escrito en esta clase
para las funciones de hash, contraseñas y todas estas cosas
Esiste en algún lugar de Reddit.
Es algo común.
Está guay, y puedes ver todo esto también en la lista de correo de Reddit,
donde la gente debate sobre estos cambios de arquitectura y cosas similares.
Gracias de nuevo. Buen trabajo.
Ver crecer Reddit ha estado muy interesante.
Ha habido días negros, y vosotros habéis hecho un trabajo espectacular haciendo crecer este sitio.
-Es increíble. -Bueno, no habría podido ser sin ti.
De acuerdo, gracias por vernos y nos vemos en la siguiente.
他に何かありますか？
今 大きな問題はロックコンテンションです
Cassandraの話をした時も言いましたが
人気のあるsubredditのリンクに投票しようとすると
いつもsubredditリストで ロックしてしまう現象が起きます
最近の例を挙げましょう
誰かが投票したキューを
キュープロセッサが受け取ります
読み取り用のマシンがあって
これらのアプリがキューの状況を書き出していて
さらに他の多数のマシンがキューを 読み出しているのですね
このマシンはキューを取り出して
リストを更新し 投票があったということを
PostgreSQLとCassandraに記録しようとします
この過程のどこかで
ロックが多発しているのです
同時にたくさんの投票が行われるので
投票用のキュープロセッサを 多数用意しているのですが
これが多すぎたためお互いに競合し合って ロックを起こしてしまったのです
キュープロセッサの数を制限すると
処理が速くなりました
速度のため数は必要だが 多すぎると今度はお互いに
競合して時間を使ってしまうんですね
この問題を解決するために
今はCassandraのロックをできるだけ
排除しようと努力しています
ロックは普遍のテーマですね
Python自体にも問題があって
以前Amazonのサービスに変えた時マルチスレッドで
同時に2本のプログラムを走らせると問題が出たのです
Pythonはデータ構造をロックするのに時間を要し
2つのスレッドが同じデータ構造に アクセスすると
ネットワーク上のトラフィックを読み込む コンピュータの能力を遅くします
それによりスレッドを切り替えるのに時間を要します
それでネットワークとCPUの スラッシング問題を起こすのです
これはPythonをシングルスレッドにして
リクエストを一度に1つずつ 処理するようにしたら解決しました
今でもそのようになっているはずです
スレッドを使うことはあまりないですね
アドサーバがスレッドを使うくらいです
1つのマシンで多くのプロセスを実行させるんですね
OSが切り替えをしてくれるんです
Linuxはそういう処理が得意ですね
バックエンドでの実行を待つのに時間を使います
今日はありがとうございました
あと1点つけ加えます
今日話題に上った主なもの すなわち
memcached、Zookeeper、Cassandra Hadoop、AMQP、NGINX、HAProxyなどは
すべてフリーソフトです
無料でこれだけのことができるのです
お金をかけるのはハードのみでよく
ソフトウエアはネット上で無料で公開されています
Redditのコードも大部分はオープンソース化され
オンラインでアクセス可能です
URLは github.com/reddit です
ここに書きますね
サイトには今は 私の名前は残っていないでしょうが
このレッスンで見てきたコードを見つけられるでしょう パスワードやハッシュなどが
存在しているはずです 一般的に使えます
メーリングリストでも情報が得られます
アーキテクチャの変更などが記述されているはずです
ありがとうございました
Redditの成長はすばらしいですね
大変な時代を乗り越えて 成長させたことはすばらしいです
あなたの功績ですよ
今回はこれで終わりです 次回お会いしましょう
Algo mais?
Contenção de travamentos é algo muito importante para nós agora.
Como eu dizia a respeito disso com o Cassandra --
sempre que você vota em um link em um subreddit popular,
ele tem que travar na listagem daquele subreddit.
Um exemplo disso que tem nos inquietado recentemente --
temos esses processadores de lista de espera,
e tudo o que fazem é
pegar aquele item da lista de espera que diz que
alguém deu um voto.
Então, você tem basicamente um conjunto de máquinas que leem a partir disso. >>Certo.
Então todos esses aplicativos escrevem o que aconteceu à lista? >>Correto.
Então você tem um monte de máquinas
que leem a partir da fila.
E o que elas fazem? Elas ficam lá.
Elas puxam isso e então dizem: OK, isso quer dizer que eu tenho de atualizar essas listas
e registrar o voto em Postscribes e Cassandra.
E repassam todas essas coisas
e isso envolve muito do travamento que estamos vendo aqui.
E assim, tínhamos muitos desses processadores de lista sendo votados,
e recebemos muitos desses votos simultaneamente,
então precisamos de muitos deles,
mas acabamos percebendo que eram demasiados,
e estavam todos brigando entre si por esses travamentos.
Só de saber a quantidade desses processadores de lista de espera
já acelerava o processamento de lista em geral.
Vocês precisam de suficientes processadores de lista para de fato gerir a profundidade da lista,
mas se tiverem demasiados,
passam tempo demais disputando entre si.
E uma das formas de lidarmos com isso
é nos livrando do travamento nas coisas do Cassandra.
E também tentando, tanto quanto possivel, nos livrar de travamentos em geral.
Travamento --
É um tema comum.
No próprio Python,
quando mudamos para a Amazon pela primeira vez, tivemos esse problema estranho
do multi-threading do Python--rodar dois threads de uma vez,
rodando dois pedaços do seu programa ao mesmo tempo,
não é o ideal --
para usar um jeito simpático de dizer.
O Python perdia tanto tempo travando suas estruturas de dados
para que dois threads pudessem acessar a mesma estrutura de dados ao mesmo tempo
que estava, de fato, reduzindo
a capacidade do computador de ler o tráfego pela rede,
o que fazia com que perdesse mais tempo
revezando entre threads.
Acabou criando esse estranho problema de thrashing da rede e da CPU.
Para solucionar isso na época, nós simplesmente tornamos o Python "single-threaded",
e processaríamos apenas uma solicitação de cada vez.
Acho que vocês provavelmente ainda estejam fazendo isso.
Sim, é muito raro usarmos processos com threads.
Os servidores de publicidade usam threads, mas ao invés de fazermos assim,
temos apenas vários processos separados.
Vocês usam vários processos em uma máquina,
e o sistema operacional pode fazer o revezamento de tarefas.
O sistema é Linux; hoje em dia, muito bom em lidar com isso.
E eles gastam muito do seu tempo esperando
por algo que está fora de uso.
Bem, isso é realmente excelente. Muito obrigado por ter vindo.
Uma coisa que eu gostaria de destacar é que
tudo o que conversamos aqui, as principais coisas --
memcache, Zookeeper, Cassandra, Hadoop, AMQP, NGINX, HAProxy --
Tudo isso é software livre.
É fantástico o quanto se pode fazer sem pagar por nada.
As coisas pelas quais você têm de pagar
são os computadores para rodar essas coisas, mas todo o software
e todo o código por trás desse software está online e é gratuito.
A grande maioria do código do Reddit também é open source e está online,
então, se quiserem dar uma olhada nessas coisas --
Qual é a URL para isso? -- Github.com/reddit.
Vou apagar aqui bem no meio do nosso desenho.
Se vocês entrarem nesse código,
nós mudamos para git num dado momento
e meu nome já não consta em grande parte desse código,
mas se vocês forem lá, verão
muito do código que escrevemos nessa classe
para o hashing e as senhas e tudo o mais --
Está lá no Reddit em algum lugar.
São coisas bem comuns.
É legal e vocês podem ver todas essas coisas também na mailing list do Reddit,
onde as pessoas discutem essas mudanças na arquitetura e coisas assim.
Obrigado novamente. Belo trabalho.
Ver como vocês expandiram o Reddit é muito legal.
Houve dias difíceis e vocês realmente fizeram um trabalho magnífico expandindo aquele site.
É realmente impressionante. -- Bem, não estaria onde está sem você. -- Obrigado.
É isso aí, pessoal. Muito obrigado por assistirem e nos vemos na próxima.