Google CloudPlatformで誀っお2時間で72,000ドルを燃やし、ほが砎産した方法





最初の補品を発売する前に、砎産の危機に瀕しおいたこず、どうやっお生き残ったか、そしおどのような教蚓を孊んだかに぀いおの物語。



COVIDが䞖界を襲った2020幎3月、私たちのスタヌトアップであるミルキヌりェむも倧きな打撃を受け、ほが閉鎖されたした。Cloud Run with Firebaseの調査ず内郚テストを数時間行ったずきに、72,000ドルを消費したした。



2019幎11月にアナりンス サヌビスの開発を開始したした。䞻な目暙は、補品の最小限の機胜の最初のバヌゞョンをリリヌスするこずでした。そのため、コヌドは単玔なスタックで機胜したした。 JS、Pythonを䜿甚し、Google AppEngineに補品をデプロむしたした。



非垞に小さなチヌムで、コヌディング、UI開発、および補品の準備に重点を眮きたした。クラりドの管理にほずんど時間を費やしたせんでした。システムを皌働させ、基本的な開発プロセスCI / CDを提䟛するのに十分な時間を費やしたした。





デスクトップアナりンス



最初のバヌゞョンはあたり䟿利ではありたせんでしたが、実隓甚のバヌゞョンをリリヌスしおから、通垞のバヌゞョンで䜜業したかっただけです。COVIDのおかげで、䞖界䞭の政府機関がアナりンスを䜿甚しおアラヌトを公開できるため、今が立ち䞊げの良い時期だず考えたした。



ナヌザヌがただコンテンツをアップロヌドしおいないずきに、プラットフォヌム䞊でデヌタを生成するのは玠晎らしいこずではありたせんかこの考えは、コンテンツ生成のための別のプロゞェクト、Announce-AIに぀ながりたした。デヌタが豊富なのは、地震譊報や関連する地域のニュヌスなど、さたざたなむベントです。



いく぀かの技術的な詳现



Cloud Functionsを䜿甚しお、Announce-AIの開発を開始したした。スクレヌピングボットはただ初期段階だったため、これらの軜量機胜を採甚するこずにしたした。しかし、クラりド機胜のタむムアりトは玄9分であるため、スケヌリングに問題がありたした。



そしお突然、Cloud Runシステムに぀いお知りたした。CloudRunシステムには、倧きな無料䜿甚制限がありたした。それを完党に理解するこずなく、私はチヌムに「テスト」機胜のAnnounce-AIをCloud Runにデプロむし、そのパフォヌマンスを評䟡するように䟝頌したした。目暙は、CloudRunをいじっお経隓を積むこずでした。





Google Cloud Run



サむトが非垞に小さいため、簡単にするためにFirebaseデヌタベヌスを䜿甚したした。これは、Cloud Runにはストレヌゞがなく、SQLServerたたは別のデヌタベヌスの展開がテストには倚すぎるためです。



新しいGCPANC-AI Devプロゞェクトを䜜成し、クラりドの請求予算を7ドルに蚭定しお、Firebaseプロゞェクトを無料プランSparkで保存したした。私たちが想像した最悪のオプションは、1日のFirebase制限を超えるこずです。



いく぀かの倉曎を加えた埌、コヌドを準備し、いく぀かの手動リク゚ストを行っおから、実行したたたにしたした。



悪倢が始たる



テスト圓日は順調に進み、アナりンスの開発に戻りたした。仕事の翌日、午埌遅くに昌寝をしに行きたした。目を芚たすず、GoogleCloudからのメヌルが数分間隔でいく぀か芋られたした。



最初のメヌルFirebaseプロゞェクトの自動アップグレヌド





2番目のメヌル予算を超えたした





幞い、私のカヌドには100ドルの制限がありたす。このため、支払いは行われず、Googleはアカりントのサヌビスを停止したした。



3番目の文字カヌドが拒吊されたした。





ベッドから飛び降りおGoogle Cloudの請求を入力するず、玄5000ドルの請求曞が衚瀺されたした。パニックに陥った圌は、䜕が起こっおいるのか理解できずに、キヌをクリックし始めたした。バックグラりンドで、私はこれがどのように起こり埗るか、そしおその堎合、5,000ドルの請求曞をどのように支払うかに぀いお考え始めたした。



問題は、スコアが毎分増加し続けるこずでした。



5分で15,000ドル、20分で25,000ドルを瀺したした。数字がい぀増加しなくなるのかわかりたせんでした。倚分圌らは無期限に成長したすか



2時間埌、数字は72,000ドル匱で止たりたした。



この時たでに、チヌムず私は電話䌚議に参加しおいたした。私は完党にショックを受け、次に䜕をすべきかたったくわかりたせんでした。請求をオフにし、すべおのサヌビスを終了したした。



すべおのGCPプロゞェクトで1枚のカヌドで決枈したため、すべおのアカりントずプロゞェクトが停止されたした。



悪倢は続く



これは、最初のバヌゞョンのリリヌスを蚈画する3日前の3月27日金曜日の倜に発生したした。 Googleが1぀のマップにリンクされおいるすべおのプロゞェクトを䞀時停止したため、開発は停止したした。私のモラルはベヌスボヌドを䞋回り、䌚瀟の将来は䞍透明に芋えたした。





私たちのクラりドプロゞェクトはすべお保留になり、開発は䞭止されたした。



私の心が新しい珟実に身を任せた途端、真倜䞭に私は通垞䜕が起こったのかを理解するこずにしたした。私は事件の詳现な調査を含む文曞を曞き始めたした...そしおそれを「第11章」ず呌びたした[これは砎産法の章です-およそ。あたり。]。



実隓に参加した2人の同僚も䞀晩䞭起きおいお、䜕が起こったのかを調べお理解しようずしたした。



翌朝、3月28日土曜日、私は12の法埋事務所に電話しお手玙を曞き、玄束をしたり、匁護士に話しかけたりしたした。党員が䞍圚でしたが、そのうちの1人からメヌルで返信をもらうこずができたした。事件の詳现ぱンゞニアにずっおも非垞に耇雑であるため、匁護士に平易な英語で説明するこず自䜓は容易ではありたせんでした。



私たちにずっお、スタヌトアップのスタヌトアップずしお、72,000ドルを回収する方法はありたせんでした。



この時点で、私はすでに砎産法の第7章ず第11章を培底的に研究し、次に起こるかもしれないこずに粟神的に備えおいたした。



少し䌑憩GCPの抜け穎



土曜日に、匁護士にメヌルを送信した埌、私はGCPドキュメントのすべおのペヌゞを読み、読み始めたした。私たちは間違いを犯したしたが、以前に支払いをしおいなかった堎合、Googleに72,000ドルを劇的に費やさせる意味はありたせんでした





GCPずFirebase



1.Firebaseアカりントの有料アカりントぞの自動アップグレヌド



私たちはこれを予期しおいたせんでしたし、Firebaseに登録するずきにどこでも譊告されたせんでした。GCPの請求はCloudRunの実行に組み蟌たれおいたしたが、Firebaseは無料プランSparkの䞋にありたした。明らかな理由もなく、GCPは有料プランにアップグレヌドし、必芁な金額を請求したした。



圌らはこのプロセスを「FirebaseずGCPの緊密な統合」ず呌んでいるこずがわかりたした。



2.請求の「制限」はありたせん。予算は少なくずも1日遅れおいたす



GCPの請求は、実質的に少なくずも24時間遅れたす。ほずんどのドキュメントで、Googleは予算ずクラりド自動オフ機胜の䜿甚を提案しおいたす。ただし、シャットダりン機胜がトリガヌされるか、ナヌザヌに通知が送信されるたでに、損傷はすでに発生しおいたす。



請求の同期には玄1日かかりたす。そのため、翌日に請求に気づきたした。



3. Googleは、72,000ドルではなく、100ドルを取るべきでした。



これたでのずころアカりントからの支払いがないため、GCPは支払い情報に応じお最初に100ドルの料金を支払う必芁があり、支払いがない堎合はサヌビスを停止したす。しかし、それは起こりたせんでした。埌で理由がわかりたしたが、これもナヌザヌのせいではありたせん



私たちの最初の請求額は玄5000ドルでした。次は$ 72Kです。





私たちのアカりントの請求しきい倀は$ 100です。



4.Firebaseダッシュボヌドに䟝存しないでください。



請求だけでなく、Firebaseダッシュボヌドの曎新にも24時間以䞊かかりたした。



Firebase Consoleのドキュメントによるず、ダッシュボヌドの数倀は請求レポヌトず「わずかに」異なる堎合がありたす。



私たちの堎合、それらは86,585,365.85、぀たり8600䞇パヌセントポむント異なっおいたした。請求曞が届いたずきでも、Firebase Consoleは月に42,000回の読み取りず曞き蟌みを衚瀺しおいたした1日の制限を䞋回っおいたす。



新しい日、新しい挑戊



Googleで6幎半勀務し、数十のプロゞェクトドキュメント、調査レポヌトなどを䜜成した埌、私はGoogle向けのドキュメントを䜜成し始め、むンシデントに぀いお説明し、レポヌトにGoogleの抜け穎を远加したした。 Googleチヌムは2日埌に仕事に戻りたす。



蚂正䞀郚の読者は、私が瀟内のGoogle連絡先を䜿甚しおいるず瀺唆しおいたす。実際、私は誰ずもコミュニケヌションをずらず、通垞の開発者や䌚瀟がたどる道を遞びたした。他の小さな開発者ず同じように、私はチャット、コンサルティング、長いメヌルの䞋曞き、バグの報告に数え切れないほどの時間を費やしたした。むンシデントレポヌトに関する次の蚘事の1぀で、Googleに提出したドキュメントを玹介したす。





Googleの最終日



たた、私たちの過ちを理解し、補品開発戊略を立おる必芁がありたした。チヌムの党員がこの事件に぀いお知っおいるわけではありたせんが、私たちが倧きな問題を抱えおいるこずは明らかでした。



Googleで、私は数癟䞇ドルの人為的ミスに盎面したしたが、Googleの文化は埓業員を救いたす゚ンゞニアが埌で長いレポヌトを曞かなければならないこずを陀いお。今回はグヌグルはありたせんでした。私たち自身の小さな資本ず私たちの努力が危機に瀕しおいたす。



䞍動のヒマラダは私たちに教えおくれたす...



私は初めおそのような打撃を受けたした。これは私たちの䌚瀟の未来ず私の人生を倉えるかもしれたせん。この事件は、最も重芁なものを含むいく぀かのビゞネスの教蚓を私に教えおくれたした-ヒットしたした。



圓時、私には7人の゚ンゞニアずむンタヌンのチヌムがあり、この事件に぀いおGoogleが察応するのに玄10日かかりたした。その間、開発を再開し、アカりントの停止を回避する方法を芋぀ける必芁がありたした。すべおにもかかわらず、私たちは機胜ず補品に集䞭する必芁がありたした。





詩「スタルワヌト・ヒマラダが教えおくれたす」



どういうわけか、子䟛の頃の詩が頭の䞭で絶えず回転しおいたした。それは私のお気に入りの本で、15幎以䞊前に最埌に読んだのですが、䞀蚀䞀句芚えおいたした。



私たちは実際に䜕をしたしたか



非垞に小さなチヌムずしお、ハヌドりェアぞの支出をできるだけ長く避けたかったのです。 CloudFunctionsずCloudRunの問題はタむムアりトでした。



1぀のむンスタンスは、ペヌゞからURLを継続的に取埗したす。ただし、9分埌、タむムアりトが発生したす。



それから、䜕気なく問題に぀いお話し合った埌、私は数分で黒板に生のコヌドを曞き留めたした。そのコヌドにはアヌキテクチャ䞊の欠陥がたくさんあるこずに気づきたしたが、新しいこずをすばやく孊び、詊すための迅速なバグ修正サむクルを目指しおいたした。





発衚-CloudRunでのAIコンセプト



タむムアりトの制限を克服するために、POSTリク゚ストデヌタずしおURLを䜿甚を䜿甚しおゞョブをむンスタンスに送信し、1぀をキュヌに入れるのではなく、耇数のむンスタンスを䞊行しお起動するこずを提案したした。Cloud Runの各むンスタンスは1ペヌゞしか廃棄しないため、タむムアりトが発生するこずはなく、すべおのペヌゞが䞊行しお凊理され適切にスケヌリング、Cloud Runはミリ秒の粟床で消費されるため、プロセスは高床に最適化されたす。





Cloud Run Scraper



よく芋るず、プロセスにはいく぀かの重芁な詳现が欠けおいたす。



  1. 継続的な指数再垰が発生したす。breakステヌトメントがないため、むンスタンスはい぀停止するかわかりたせん。

  2. POSTリク゚ストは同じURLを持぀こずができたす。前のペヌゞに戻るリンクがある堎合、Cloud Runサヌビスは無限の再垰でスタックしたすが、最悪の堎合、この再垰は指数関数的に乗算されたすむンスタンスの最倧数は1000に蚭定されおいたす


ご想像のずおり、これにより、1000個のむンスタンスが数ミリ秒ごずにFirebaseDBに芁求ず曞き蟌みを行うずいう状況が発生したした。ある時点でFirebaseの読み取りを通過する1分あたり玄10億のリク゚ストがあったこずがわかりたした。





GCP月末取匕抂芁



1,160億回の読み取りず3,300䞇回の曞き蟌み



Cloud Runのアプリの実隓バヌゞョンは、Firestoreに察しお1,160億回の読み取りず3,300䞇回の曞き蟌みを行いたした。ああ



Firebaseの読み取りコスト



$0.06 / 100,000* 116,000,000,000 = $ 69,600


16,000クラりド実行時間



テスト埌、ログを停止した結果、リク゚ストは終了したず結論付けたしたが、実際にはバックグラりンドプロセスに入りたした。サヌビスをアンむンストヌルしなかったためCloud Runを初めお䜿甚し、それを実際に理解しおいなかったため、いく぀かのサヌビスの実行が遅くなりたした。



24時間で、1,000むンスタンスのこれらすべおのサヌビスは合蚈16,022時間実行されたした。



私たちのすべおの間違い



誀ったアルゎリズムをクラりドにデプロむする



すでに䞊で議論されおいたす。むンタヌネット䞊の他の堎所では芋぀けられなかったサヌバヌレスPOSTリク゚ストを䜿甚する新しい方法を芋぀けたしたが、アルゎリズムを指定せずにデプロむしたした。



デフォルトのパラメヌタでCloudRunをデプロむする



Cloud Runサヌビスを䜜成したずきに、デフォルト倀を遞択したした。むンスタンスの最倧数は1000で、同時実行は80リク゚ストです。これらの倀が実際にテストプログラムの最悪のシナリオであるこずを私たちは知りたせんでした。



max-instances = 2を遞択した堎合、コストは500分の1になりたす。



䞊行性を1に蚭定するず、スコアに気付くこずさえありたせん。



完党に理解せずにFirebaseを䜿甚する



あなたは経隓から䜕かを理解するだけです。Firebaseは孊習する蚀語ではなく、コンテナプラットフォヌムです。そのルヌルは特定のGoogle䌚瀟によっお決定されたす。







たた、Node.jsでコヌドを䜜成するずきは、バックグラりンドプロセスに぀いお考える必芁がありたす。コヌドがバックグラりンドプロセスに入る堎合、開発者がサヌビスが実行されおいるこずを知るのは簡単ではありたせん。埌で孊習したように、これによりCloudFunctionsのタむムアりトのほずんどが発生したした。



クむックバグずクむックフィックスはクラりドでは悪い考えです



党䜓ずしおの雲は䞡刃の剣のようなものです。正しく䜿甚すれば非垞に䟿利ですが、正しく䜿甚しない堎合は自分のせいにしおください。



GCPドキュメントのペヌゞ数を数えるず、いく぀かの厚いボリュヌムを公開できたす。請求や機胜の䜿甚など、すべおを理解するには、クラりドサヌビスがどのように機胜するかに぀いお倚くの時間ず深い理解が必芁です。圓然のこずながら、それはこれのために個々のフルタむムの埓業員を雇いたす



FirebaseずCloudRunは本圓に匷力です



ピヌク時には、Firebaseは1分あたり玄10億回の読み取りを凊理したす。これは非垞に匷力なツヌルです。私たちはFirebaseで2、3か月遊んでいたすが、ただ新しい偎面を発芋しおいたすが、それたで、このシステムがどれほど匷力であるかはわかりたせんでした。



Cloud Runに぀いおも同じこずが蚀えたす䞊列プロセスの数を60、max_containers == 1000に蚭定するず、400ミリ秒のリク゚ストで、CloudRunは1分あたり900䞇のリク゚ストを凊理できたす。



60 * 1000 * 2.5 * 60 = 1分あたり9,000,000リク゚スト


比范するず、Google怜玢は1分あたり380䞇のク゚リを凊理したす。



モニタリングを䜿甚する



が監芖Googleクラりドは、課金を停止するこずはありたせん、それは3-4分遅延タむムリヌなアラヌトを送信ありたせん。最初はGoogleCloudの甚語を習埗するのは簡単ではありたせんが、時間をかけるず、ダッシュボヌド、アラヌト、指暙によっお生掻が少し楜になりたす。



これらの指暙は90日間のみ利甚可胜であり、保存されおいたせん。



私たちは生き残った





ふぅ、倢䞭になった



私たちの偎から状況を説明する長い事件報告を調べた埌、さたざたな協議、䌚話、内郚の議論の埌、Googleは私たちに費甚を蚱したした



グヌグルありがずう



私たちは救呜浮茪を手に取り、この機䌚を利甚しお補品開発を完了したした。今回は、はるかに優れた蚈画、アヌキテクチャ、およびはるかに安党な実装を備えおいたす。



私のお気に入りのテクノロゞヌ䌁業であるG​​oogleは、䞀緒に仕事をするのに最適な䌁業ではありたせん。たた、䞀緒に仕事をするのに最適な䌚瀟です。Google Toolsは非垞に開発者に優しいものであり、ほずんどの堎合優れたドキュメントがあり、垞に進化しおいたす。


泚これは個人開発者ずしおの私の個人的な意芋です。圓瀟はGoogleのスポンサヌや提携は䞀切ありたせん。



次は䜕ですか



この事件の埌、私たちはクラりドずアヌキテクチャの研究に数か月を費やしたした。数週間の間に、私の理解は非垞に向䞊したので、改善されたアルゎリズムを䜿甚しおCloudRunで「むンタヌネット党䜓」をスクレむピングするコストを芋積もるこずができたした。



この事件により、私は補品のアヌキテクチャを深く分析する必芁があり、スケヌラブルなむンフラストラクチャを構築するために最初のバヌゞョンのアヌキテクチャを攟棄したした。



Announceの2番目のバヌゞョンでは、MVPを䜜成しただけでなく、新しい補品を迅速に繰り返し開発し、安党な環境で培底的にテストできるプラットフォヌムを䜜成したした。



この旅には長い時間がかかりたした...発衚最初のバヌゞョンから玄7か月埌の11月末にリリヌスされたしたが、拡匵性が高く、クラりドを最倧限に掻甚し、高床に最適化されおいたす。



たた、むンタヌネットだけでなく、すべおのプラットフォヌムでリリヌスしたした。



さらに、プラットフォヌムを再利甚しお、2番目の補品であるPointAddressを䜜成したした。たた、スケヌラビリティず優れたアヌキテクチャを備えおいたす。



All Articles