これがTwitterでは会話が成り立たない理由
昨日、StripeのエンジニアがRedisで起きた障害について詳細なレポートを公開した。とてもありがたいことだ。Hacker Newsのスレッドで私は、diskless replication(http://antirez.com/news/81)が実装されたことで、マスター・スレーブ構成を組んでいる人にとって永続化はもはや必須ではなくなったと説明した。これは設計上の制約を変えるものだ。ディスクを介さないレプリカ同期が可能になった今、Stripe(元?)のような、永続化をオフにしたレプリカセットを使うユースケースを、より安全な形でサポートする価値がある。これは現在進行中の取り組みだ。
同じ投稿の中で、Stripeのエンジニアは、Redisで問題が起きたユースケースについてはPostgreSQLに切り替えると述べていた。PostgreSQLは確かに素晴らしいデータベースだし、SQLのデータモデルとオンディスク型のデータベースで済むのであれば、毎秒膨大で複雑な処理を捌くために設計されたRedisよりそちらを使った方が良い場合は多い。Stripeのエンジニアはまた、99パーセンタイルを計測したところ、Redisと比べてPostgreSQLの方が良い結果だったとも書いていた。そこで@aphyrがツイートでこう書いた。
「同期PostgresレプリケーションをAZ間で行った方が、非同期のRedisより99パーセンタイルのレイテンシが低くなることに注目」
そして私はこう返した。
「何が起きているかをより正確に把握するために、平均レイテンシも見ると役に立つかもしれない。EC2上で動くRedisで起こりうるレイテンシのスパイクに、99パーセンタイルは大きく影響されると思うので」
言いたかったのは、平均も合わせて見れば、99パーセンタイルがレイテンシのスパイクによって台無しにされているかどうかが分かるということだ。そしてそのスパイクは多くの場合、解決可能なものだ。たいてい話はシンプルで、平均は非常に低いのに99パーセンタイルだけが悪い場合、Redis自体がたとえば重い処理やブロッキング操作のせいで遅いのではなく、一部のクエリだけがEC2特有のよくある問題――特定のインスタンスでのforkにかかる時間や、リモートディスクのI/Oなど――のせいで遅くなっている可能性が高い。そうした問題は対処できることも多い。たとえばforkのレイテンシ問題が起きないインスタンスタイプも存在するからだ。
ところがTwitterのITコミュニティの半分にとって、私の発言は平均レイテンシを99パーセンタイルに代わる正しい指標として推奨したものとして受け取られた。
「平均はレイテンシの指標として最悪だ。私が見てきたレイテンシにベルカーブに従うものなど一つもない。平均なんて無意味だ」
「数学がどうなっているか、分散システムでテールレイテンシがなぜ重要なのか、あなたは明らかに理解していない。もう話すことはない」
「まったくだ。問題は、平均は外れ値に対して頑健ではないということだ」
えっと、誰が平均が良い指標だと言ったのだろう? 私が提案したのは、大きな外れ値があるかどうかを検出するために平均を見ようということだった。普通のやり取りになるはずだったのに、10分もすると私のTwitterは「世界におけるレイテンシの新しい指標として平均を推すなんて馬鹿だ」と言ってくる人たちで埋め尽くされていた。最初にリツイートされれば、どんどん増えていく。別のNoSQLデータベースの著名な開発者までわざわざTwitterで説教してくる始末だ。私は、99パーセンタイルと平均の両方があればカーブの全体像がよりよく分かり、問題がEC2上のRedisのスパイクにあるのかどうか判断できると書いたのだと返信したが、不思議なことに元のツイートが削除され、私のツイートはさらに文脈を失ってしまった。私の3つのツイートはこうだ。
- 「言いたかったのは、ネットのノイズの中ではもう役に立たないかもしれないけれど、平均がなぜ(…)を理解するのに役立つということだ」
- 「99パーセンタイルが悪い。もし平均はとても良いのに99パーセンタイルが悪いなら、いくつかの極端に悪いサンプルがあると疑うことができる」
- 「これはRedisでは有用だ。適切な設定をすれば、悪いレイテンシのサンプルを大幅に改善できることがあるからだ」
どうなったと思う? 2つ目のツイート――「なぜ99パーセンタイルが悪いのかを理解するために」という続きだったもの(悪いというのは、良い数値を示していないという意味で)を切り離し、文脈を無視して「99パーセンタイルは悪い」とだけ読む人まで現れた。
昔はUsenetで何日も議論したものだが、少なくとも大抵は、ある主張に対して新しい主張が返され、といった具合に、まともな議論と呼べるだけの十分な文章と文脈があった。今回のは違う。憎悪とエンジニアリング入門101の増幅でしかない。99パーセンタイルが正しい指標で平均はダメな指標? ならたとえ平均に触れるのが理にかなった文脈であっても、決して口にするな。さもないと1万件のクソリプが飛んでくる。
これにどう対処すればいいのか。幸い私は個人的にこうしたことにあまり影響されない質だが、仕事としてRedisで何が起きているかを伝えるためにTwitterを使っている以上、ここがまともな仕事の場ではないことは明らかだ。たとえばレイテンシの話。私はレイテンシをとても重視しているので、長年にわたって改善に多くの労力を費やしてきた(diskless replicationもその一つだ)。なぜレイテンシのスパイクが起きるのか、起きているのかを理解するためのモニタリング機能もある。Redisは異なる実行パスを監視することで、内部で何が起きているかを人間が読めるレポートとして提供できる。これだけのことをやってきたのに、返ってくるのは間違ったメッセージが100万回リツイートされるという結果で、何の役にも立たない。ほとんどの人は自分で判断するためにツイートを追ったりはしない。現実はこの時点で書き換えられてしまう。私は平均パーセンタイルが良いと言い、ロングテールを見るべきことを分かっていない、と。次にレイテンシについて語るとき、多くの人にとって私はそれについて考えがはっきりしていない人物ということになる。そんな人間の話ややっていることなど、誰が信用するだろうか。
一方でTwitterは人間にとってのRSSでもあり、私が愛してやまないこと――これまで丁寧に育ててきたオープンソースプロジェクトに取り組むこと――について、多くの人に最新情報を届けるには極めて有用だ。だから実行可能な形を考えている。もっとブログを書き、Redisのメーリングリストをもっと使い、Twitterは読みたい人が読めるようにリンクを貼るためだけに使う。そうすれば関心のある人たちが議論し、実際に有意義な議論ができるだろう。
Redisについては、快適に使ってくれているユーザーのためにも、問題を抱えているユーザーのためにも、やるべきことがたくさんある。Twitterで不毛な非会話に時間を費やすよりも、コードを書くことに時間を使った方がずっと良いと感じている。議論するのは好きだが、これはただの徒労だ。
記事をランダムに読む