This is why I can’t have conversations using Twitter

Salvatore Sanfilippo

これがTwitterで会話ができない理由だ

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

昨日、StripeのエンジニアがRedisで起きた問題について詳細なレポートを書いた。とてもありがたいことだ。Hacker Newsのスレッドで私は、ディスクレスレプリケーション(http://antirez.com/news/81)ができたことで、マスター・スレーブ構成のレプリカセットを持つ人にとって永続化はもはや必須ではなくなったと説明した。これで設計上の制約が変わる。ディスクレスでのレプリカ同期が可能になった今、Stripeの(元?)ユースケースのような、永続化を無効にしたレプリカセットを、より安全な形でしっかりサポートする価値がある。これは現在進行中の取り組みだ。

同じ投稿の中でStripeのエンジニアは、Redisで問題が起きたユースケースについてはPostgreSQLに切り替えると述べていた。PostgreSQLは確かに素晴らしいデータベースだし、SQLのデータモデルとオンディスクのデータベースで済むのであれば、毎秒大量の複雑な処理を捌くために設計されたRedisよりも、そちらを使った方が良い場合は多い。Stripeのエンジニアはまた、99パーセンタイルを計測したところ、Redisと比べてPostgreSQLの方が良い結果だったとも述べていた。そこでツイートで@aphyrはこう書いた。

同期PostgresレプリケーションがAZ間でさえ、非同期Redisより低い99パーセンタイルレイテンシを出すことに注目」

そして私はこう返信した。

「何が起きているのかをよりよく理解するために、平均レイテンシも見てみると有用かもしれない。RedisをEC2上で動かした場合に起こりうるレイテンシのスパイクに、99パーセンタイルは大きく影響されると思うので」

つまり、平均値も併せて見れば、99パーセンタイルがレイテンシのスパイクによって台無しにされているかどうかがわかり、その多くは解決可能なものだということだ。たいてい話はシンプルで、平均は非常に低いのに99パーセンタイルだけが悪い場合、Redis自体が、例えば重い処理やブロッキング操作のせいで遅くなっているわけではなく、一部のクエリだけがEC2特有のよくある問題――特定のインスタンスでのforkにかかる時間、リモートディスクのI/Oなど――のせいで遅くなっている可能性が高い。そういったものは対処できることが多い。例えば、forkのレイテンシ問題が起きないインスタンスタイプも存在するのだから。

ところがTwitterのIT界隈の半数にとって、私の発言は、99パーセンタイルよりも平均レイテンシこそが正しい指標だと主張したように受け取られた。

「平均はレイテンシの指標として考えうる限り最悪だ。私が見てきたレイテンシでベルカーブに従うものなど一つもない。平均はナンセンスだ」
「あなたは数学がどう機能しているか、なぜ分散システムでテールレイテンシが重要なのかを明らかに理解していない。これで話は終わりだ」
「その通り。問題は、平均は外れ値があると頑健ではないということだ」

えっと、誰が平均は良い指標だなんて言った? 私が提案したのは、大きな外れ値があるかどうかを検出するために平均を見るということだ。本来は普通のやり取りになるはずだったのに、10分もすると私のTwitterは「平均をレイテンシの新たな世界的指標として推すなんて馬鹿だ」と言ってくる人たちで埋め尽くされた。最初のリツイートが出ると、どんどん増えていく。著名な別のNoSQLデータベースの開発者まで、わざわざTwitterで私に説教する時間を見つけた。私は、99パーセンタイルと平均の両方があればカーブの全体像がよりよく分かり、問題がEC2上のRedisのスパイクにあるのかどうかが分かると書いたのだと返信したが、なぜか元のツイートが削除され、私のツイートはさらに文脈を失ってしまった。私の3つのツイートはこうだ。

  1. 「言いたかったのは、ネット上のノイズの中ではもう役に立つか分からないけど、平均はなぜ(…)かを理解するのに役立つということだった」
  2. 「99パーセンタイルが悪いということだ。もし平均は非常に良いのに99パーセンタイルが悪いなら、少数の非常に悪いサンプルを疑うことができる」
  3. 「これはRedisでは有用だ。適切な設定をすれば、悪いレイテンシのサンプルを大幅に改善できることがあるのだから」

どうなったと思う? ツイート#2だけを切り取った人までいた。それは「なぜ99パーセンタイルが悪いのかを理解するために」(「悪い」というのは良い数値を出していないという意味で)という文の続きだったのに、文脈を無視して「99パーセンタイルは悪い」とだけ読まれたのだ。

昔はUsenetで何日も議論したものだが、少なくとも大抵は、ある主張に対して別の主張が返ってくるという形で、まともな議論をするのに十分なテキストと文脈があった。これはそうではない。憎悪とエンジニアリング入門の増幅でしかない。99パーセンタイルこそが正しい指標で平均はダメな指標? なら、たとえ平均について語るのが理にかなった文脈であっても、決して平均の話をするな。さもないと1万件のクソリプが飛んでくる。

これにどう対処すべきか? 私の良いところは、個人的にはこういうことにあまり影響されないことだが、Redisで何が起きているかを伝えるために仕事としてTwitterを使っている以上、ここはもはや実行可能な仕事環境ではないことも明らかだ。例えばレイテンシについて。私はレイテンシをとても気にかけているし、長年にわたって改善のために多くの努力をしてきた(ディスクレスレプリケーションもその一つだ)。レイテンシのスパイクがあるのか、なぜあるのかを理解するためのモニタリング機能もある。Redisは異なる実行パスを監視することで、内部で何が起きているかを人間が読めるレポートとして提供できる。そうした多大な作業の末に返ってくるのが、間違ったメッセージが100万回リツイートされるという結果では、何の助けにもならない。ほとんどの人はツイートを追って自分で判断したりはしない。現実はこの時点で書き換えられてしまう。私は「平均パーセンタイルは良い」と言い、ロングテールを見るべきだと分かっていない人間だ、と。次にレイテンシについて語るとき、多くの人にとって私はそれについて曖昧な考えしか持っていない人間ということになり、私が何を話しているのか、何をやっているのか、誰が分かるというのか?

同時に、Twitterは人間にとってのRSSでもあり、私が愛してやまないこと、つまりこれまで大切に育ててきたオープンソースプロジェクトの活動について、多くの人に最新情報を届けるのに極めて有用だ。だから、どうすれば実行可能な形にできるかを考えている。もっとブログを書き、Redisのメーリングリストをもっと使い、Twitterは興味のある人が読めるようにリンクを貼るためだけに使う、というのが一つの手かもしれない。そうすれば興味のある人たちが議論し、本当に有用な議論ができる。

Redisについては、楽しく使ってくれているユーザーのためにも、問題を抱えているユーザーのためにも、やるべきことがたくさんある。Twitterで不毛な非会話をするよりも、コードを書くことに時間を使う方がずっと良いと感じている。議論するのは大好きだが、これはただの徒労でしかない。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント