Python の小さなバグが 1 億 6,000 万ドルの企業を壊滅させた

2011 年、ベンチャーキャピタリストで元 Netscape 創設者のマーク・アンドリーセンは、「ソフトウェアが世界を飲み込んでいる」と述べ、すべての人に警告しました。それ以来、すべてのプログラム可能なドアが徐々に開いていきました。しかし、百花繚乱のソフトウェア主導の製品の背後には、すべてを崩壊させる可能性が非常に高いバグが存在することがよくあります。

最近、あるテクノロジーブロガーが、初期の頃に実際に起こったバグ事件について共有しました。これは、「壊滅的な」ソフトウェア バージョンのリリースが、かつては Reddit に匹敵し、ついには一度はそうなったテクノロジー Web サイトである Digg の崩壊に間接的につながったためです。最大1億6000万ドル相当の資産が50万ドルで買収された。

写真

ソフトウェア エンジニアのウィル ラーソンは、個人的な経験者として、2018 年に「Digg の v4 の立ち上げ: 必要性から生まれた楽観主義」を執筆し、Digg の開発と個人参加の経験全体をレビューしました。予想外にも、2 年間の改訂と書き直し、そして 1 か月のバグ探しを経て、最終的な問題は Python の機能に関連するものでした。 。このように、私もこの記事を通じて、最前線で戦っている開発者の落とし穴を避けたいと思っています。

 1. 背景

Digg という会社は、テクノロジーに焦点を当てたニュース サイトとして 2004 年に設立されました。当時の他のニュース Web サイトとは異なり、Digg ではユーザーが収集したニュースやその他のインターネット コンテンツを投稿用に集約することができ、内部アルゴリズム メカニズムを通じてそのニュースを Web サイトのホームページにクロールして表示しました。

写真

ウィキペディアより

この利点の 1 つは、Digg がユーザーに記事をフィルタリングする権利を与え、最も関心のある重要な記事を除外できることです。その後、サブスクリプションを通じて、サブスクリプション数の多い記事が自動的にホームページに推奨されるようになります。それを見る人々。現在ではこの斬新なアプローチも多くのユーザーに参加感を与え、Diggの規模は徐々に拡大してきました。

もちろん、すべてのものには二面性があり、「大木は風を呼ぶ」とも言われます。

ウィル・ラーソン氏は2018年のブログ投稿で、「この1年はDiggにとって非常に困難な年だった。私が入社する前日にCEOが退職し、上級エンジニアが謎の形で会社を去り、彼らを連れ去った。友人たちは会社を去り、会社の生産性が低下したこと、詐欺集団が当社のアルゴリズムを回避し、投票と購読を利用し、当社 Web サイトのトップページへのアクセスを販売し、悪用を防ぐために適時にアルゴリズムを変更するよう当社を脅迫したこと、当社の開発者環境プロビジョニング ツールが壊れて誰もいなかったことそれらを修正する方法を知っていたので、最近退職した同僚のゾンビ VM に新入社員を再割り当てしました。」

発展性の高い企業がなぜこのような状況に陥ったのかというと、企業内部の戦略上の問題もあれば、外部の競争環境も関係しているはずです。Will Larson氏によると、外部要因の1つは、Googleが2011年にPandaの「スパム対策」アルゴリズムを導入したことに関連しているという。

当時、Google Panda の主な目的は、低品質でスパムのようなページやウェブサイトをランクダウンし、高品質のコンテンツがそれにふさわしい適切なランクを獲得できるようにすることでした。

Google Pandaのアルゴリズム自体は高品質のウェブサイトに適していますが、ウィル・ラーソン氏は、「当時、DiggはGoogle Pandaのアルゴリズムアップデートによってすでに壊れていました。検索のアップデートが反映されるまでに1か月かかったので、Diggの運命もまた起こったのです」と述べました。大逆転: 最初の唯一の利益を上げた月から、Web サイトへの月間トラフィックが半減するまで低迷しました。ある月には、会社は 5 年間の収益性のピークに達しました。翌月には、会社はフリーフォールに陥りました。弱い立場から資本を調達しようとしている。」

再生するためにも、現状を変えるためにも。Digg はサイトを v3.5 に書き直すことを決定し、Digg v4 をリリースする予定です。

しかし、あっという間に 2 年が経過し、Digg は多くの変更により新バージョンの延期を繰り返してきました。しかし、Digg v4 は、同社がインターネット巨人の戦場に戻る唯一のチャンスであり、これを逃せば、時代全体を逃すことになる可能性があります。その後、社内で協議した結果、まだ準備が整っていなかった Digg v4 を緊急にリリースすることを決定しました。

 

写真

Digg v4 オフィス サイトを書き換え、出典 Will Larson ブログ

誰もが知っているように、この性急な決定はまた、性急な結末を迎えることになる。

 2. Python 関数のデフォルト引数の失敗例

徐々に問題が見え始めました。

当時午前10時頃、開発チームにいつから新バージョンへの切り替えを開始するのかとの質問があり、エンジニアは「すでにV3サーバーの再構築を始めています」と答えたが、容量が少ないため、開発チームは新バージョンへの切り替えを開始することを決定した。既存のすべてのサーバーを再イメージ化し、新しいソフトウェア スタックで再構成します。

切り替えは正式に進行中ですが、何か奇妙なことが起こります。切り替え中、新しいサイトは実際には表示されませんでした。運用チームは急いでメンテナンスページを公開し、チーム全体が考え込んでしまいました。なぜなら、彼らにはロールバック計画がないからです。そこで、1 人のエンジニアが、おそらく唯一可能な選択肢である、切り替えを続けることを提案しました。

1 時間後、完全な切り替えが完了し、古い Web サイトのページが Digg v4 バージョンに置き換えられたとき、スタッフ全員も安堵のため息をつきました。

しかし、私が喜んでから間もなく、ほとんどのページが読み込めないことに誰もが気づきました。当初、研究開発チームは問題が Cassandra クラスタであることを特定したため、Cassandra を保護するためのライトスルー キャッシュとして memcache の使用を拡大しました。

数時間後、訪問者ページに問題はありませんが、ログインしたユーザーには依然として MyNews などのエラー ページが表示されます。このページは「パーソナル センター」に似ており、各記事とユーザーのやり取りの記録が表示されます。パーソナライズされたニュースページ。苦境に立たされた研究開発チームは、ログインしたユーザーのデフォルト ページを TopNews に変更し、ユーザーがログイン後に Web サイトを利用できるようにしました。

翌日までに、MyNews は完全にアクセスできなくなり、サイトは 4 時間ごとにダウンしました。それ以外にも、他にも多数の小さな問題が発生し続けています。

そこで、彼らはもう一度、MyNews ページをゼロから作成するという大胆な決断を下しました。当初、チームは Cassandra のキャッシュが memcache を突破し、関連機能を破壊していると考えました。その後、それを Redis で書き直し、シャード化された Redis クラスターを実装し、元のクラスターを新しい開発環境に正常に移行しました。

残念ながら、研究開発チームは依然として 4 時間ごとに各プロセスを手動で開始する必要があります。

簡単に言うと、問題の根本原因が見つかっていないにもかかわらず、短期的なサポートのために面倒な代替手段が使用されていることを意味します。予想外なことに、チームはこのバグを追跡するのに 1 か月かかりました。

幸いなことに、私はついに問題を発見しました。Digg の API サーバーは、Python バックエンド レイヤーである Bobtail (フロント エンドは Bobcat) への API 呼び出しを行う Python Tornado サービスです。最も頻繁にアクセスされるエンドポイントの 1 つは、名前または ID でユーザーを取得することです。名前または ID による取得をサポートしているため、デフォルトでは両方のパラメーターが空のリストになります。

def get_user_by_ids(ids=[])

ただし、Python は関数が最初に評価されるときにのみデフォルトの引数を初期化します。つまり、関数が呼び出されるたびに同じリストが使用されます。

この場合、呼び出されるたびに、ユーザーの ID と名がデフォルトのリストに追加されます。数時間後、リストはリクエストごとに数万人のユーザーを取得し始め、memcache クラスターを圧倒し、ページのクラッシュを引き起こすことさえありました。

それは簡単な例を通して直接見ることができます。

def f(l=[]):
  l.append(1)
  print(l)

f()
f()
f()
输出
[1]
[1, 1]
[1, 1, 1]

 3. 最後に

結局のところ、Digg チームはバグを修正し、Digg v4 は完全に正常に起動しました。この事件から 1 週間後、Digg は最後の CEO を迎え、その 1 か月後、Digg は第 3 ラウンドの人員削減を開始し、1 年後、Digg は Chartbeat の親会社 Beatworks に 50 万ドルで買収されました。

Digg が評価額 1 億 6,000 万ドルのインターネットの寵児でもあり、「ビジネスウィーク」の表紙を飾り、Google も 2 億ドルで買収する計画を立てていたとは誰が想像したでしょうか。誰もが知っているように、この改訂の失敗が Digg の人気を急速に失い、内部管理上の問題があったため、Digg はすぐに追い抜かれました。それ以来、起業家精神にあふれたスター企業は没落した。

Will Larson は記事の最後に、「Digg V4 は、悲惨な打ち上げの例として時々使われます。暗黙の教訓は、これをリリースすべきではないということです。私もかつてはこの意見に同意していましたが、今では、打ち上げという私たちの決断は正しいと思います」と書いています。それは正しいです。なぜなら、トラフィックが大幅に減少しており、毎月多額のお金を失っているからです。何か素晴らしいものを公開するか、何か悪いものを公開するかのどちらかを選択できるとしたら、私たちは何か素晴らしいものを公開する傾向があるでしょうが、最後のスイングを選んだのは我々だ」

さらに、彼は「あのようなレベルのチームがどうやってあのような愚かなプレーをやり遂げたのか、今でも分からない」とも語った。

結局のところ、これはプログラマーの技術的な失敗から得られた痛ましい教訓です。多くのネチズンも、「動的型はしばらくクールだ、コードリファクタリングは火葬場だ」とコメントした。

参考リンク

https://lethain.com/digg-v4/?ContinueFlag=0a23bc7c424c6abc75f97cbaaa2d55ff

https://weibo.com/u/1642628345

 

おすすめ

転載: blog.csdn.net/y1282037271/article/details/129200351