サヌバヌの砎壊に関するハッカヌゲヌムのバック゚ンドがどのように䜜成されたか



サヌバヌの砎壊を䌎うレヌザヌク゚ストがどのように手配されたかを匕き続きお䌝えしたす。ク゚ストの解決に関する前回の蚘事から始たりたす。



合蚈で、ゲヌムのバック゚ンドには6぀のアヌキテクチャナニットがあり、この蚘事で分析したす。



  1. ゲヌムメカニズムを担圓したゲヌム゚ンティティのバック゚ンド
  2. VPSのバック゚ンドおよびサむトデヌタ亀換バス
  3. バック゚ンドリク゚ストゲヌム芁玠からサむト䞊のarduinoおよびハヌドりェアぞのトランスレヌタ
  4. リレヌ制埡を担圓したアルドゥむヌノは、翻蚳者からコマンドを受け取り、実際の䜜業を行いたした。
  5. 実際のデバむスファン、花茪、フロアランプなど。
  6. フロント゚ンド-プレむダヌがデバむスを制埡するFalconサむト自䜓


それぞれを芋おいきたしょう。



ゲヌム゚ンティティのバック゚ンド



バック゚ンドはスプリングブヌトアプリケヌションずしお実装されたした。いく぀かのレストコントロヌラヌ、Web゜ケット゚ンドポむント、およびゲヌムロゞックを備えたサヌビスがありたした。



コントロヌラは3぀しかありたせんでした。



  • メガトロン。Megatronの珟圚のペヌゞは、電源投入の前埌にGETリク゚ストを介しお送信されたした。レヌザヌはPOSTリク゚ストを介しお発射されたした。
  • , . , ID .
  • , - .


Websocket゚ンドポむントは、ガゞェットランプ、花茪、文字を制埡するために䜿甚されたした。これは、デバむスの珟圚のステヌタスをすべおのプレヌダヌに同期的に衚瀺するために遞択されたした。デバむスがオンかオフか、アクティブかどうか、壁に珟圚衚瀺されおいる文字の色です。レヌザヌをオンにするタスクを少し耇雑にするために、同じadmin / adminログむンずパスワヌドを䜿甚しおガヌランドずレヌザヌに認蚌をスロヌしたした。



プレむダヌはガヌランドをオンにし、レヌザヌで同じこずを行うこずでそれをテストするこずができたす。



䞍必芁な遞択でプレむダヌを苊しめないために、このような些现なログむンずパスワヌドのペアを遞択したした。



タスクをもう少し面癜くするために、mongodbのオブゞェクトIDが郚屋のデバむス識別子ずしお䜿甚されたした。



ObjectIdにはタむムスタンプが含たれおいたす。2぀のランダムな倀。1぀はデバむス識別子に基づいお取埗され、もう1぀はそれを生成するpidプロセスずカりンタヌ倀に基づいお取埗されたす。定期的に、さたざたなpidプロセスからIDを生成したかったのですが、共通のカりンタヌを䜿甚しお、レヌザヌデバむスのIDの遞択がより面癜かったのです。しかし、結局、誰もがカりンタヌの倀だけが異なる識別子で始めたした。おそらく、これによりステヌゞが単玔になりすぎお、objectId識別子の構造を分析する必芁がなくなりたした。



バック゚ンドリク゚ストからの翻蚳者



タむマヌを凊理し、ゲヌムの抜象化から物理モデルに倉換するPythonスクリプト。たずえば、「フロアランプをオンにする」→「リレヌN2をオンにする」などです。



スクリプトはRabbitMQキュヌに接続し、キュヌからArduinoに芁求を枡したした。たた、ラむトの䞊列スむッチオンのロゞックも実装したした。䞀郚のデバむスずずもに、ラむトがオンになりたした。たずえば、Megatronに最初に電力が䟛絊されたずき、ステヌゞラむトで照らされおいたした。シヌン党䜓の映画撮圱のための光のデザむンは、プロゞェクトの共同プロデュヌサヌであり、プロダクションデザむナヌのIlya Serovの玠晎らしい䜜品に぀いおの別の話であり、別の投皿で説明したす。



翻蚳者は、タむマヌでシュレッダヌを開始し、画像をテレビに送信するロゞックも担圓したした。シュレッダヌを開始するためのタむマヌ、叫び声を䞊げるカピバラ、ゲヌム終了時の広告です。



メガトロントヌクンを生成するロゞックがどのように配眮されたか



テストショット



25秒ごずに、新しいトヌクンが生成されたした。これを䜿甚しお、10/255の電力で10秒間レヌザヌをオンにするこずができたす。Megatronコヌドを䜿甚しおgithubにリンクしたす。



次に、レヌザヌを1分間冷华したした。この時点では、レヌザヌは䜿甚できず、ショットの新しい芁求を受け入れたせんでした。



このパワヌはロヌプを燃やすのに十分ではありたせんでしたが、どのプレむダヌもメガトロンから撃ち、レヌザヌビヌムが動いおいるのを芋るこずができたした。



MD5ハッシュアルゎリズムを䜿甚しおトヌクンを生成したした。そしお、スキヌムは、MD5からのMD5 +カりンタヌ+戊闘トヌクンの秘密であり、テストトヌクンの秘密はありたせんでした。



MD5は、私たちの支揎者であるPavelによっお䜜成された商甚プロゞェクトぞの参照です。ほんの数幎前、このプロゞェクトはMD5を䜿甚し、プロゞェクトアヌキテクトに、これはレガシヌ暗号化アルゎリズムであるず䌝えたずき、MD5からMD5を䜿甚し始めたした。私たちが最倧のNoobプロゞェクトを䜜るこずに決めたので、圌はすべおを芚えおいお、少し参考にするこずにしたした。



コンバットショット



メガトロンの戊闘モヌドは1003Wレヌザヌパワヌです。これは、重りを保持しおいたロヌプを燃やしお氎族通を壊し、サヌバヌを氎で満たすのに2分間で十分です。



プロゞェクトのgithubにいく぀かのヒントを残したした。぀たり、トヌクン生成コヌドです。これにより、テストトヌクンず戊闘トヌクンが1぀のカりンタヌむンゞケヌタヌに基づいお生成されるこずを理解できたした。戊闘トヌクンの堎合、カりンタヌ倀に加えお、最埌の2文字を陀いお、この芁点の倉曎の履歎にほが完党に残された゜ルトも䜿甚されたす。



このデヌタを知っおいるず、塩の最埌の2぀のシンボルを繰り返すこずができ、実際、Lostの数字が16桁のシステムに倉換されお䜿甚されおいるこずがわかりたした。



次に、プレむダヌはテストトヌクンを分析するこずによっおカりンタヌ倀をキャッチし、次のカりンタヌ倀ず最埌のステップで遞択した゜ルトを䜿甚しお戊闘トヌクンを生成する必芁がありたした。



カりンタヌは、テストショットごずおよび25秒ごずに単玔にむンクリメントされたした。私たちはこれに぀いおどこにも曞いおいたせん、それは小さなゲヌムの驚きだったはずです。



captchaずの盞互䜜甚のためのサヌビス



ゲヌムの䞖界では、これはファンをオンにしおヒント付きのフリップチャヌトを開くためにロヌドする必芁があったのず同じキャプチャでした。カメラの隣に負荷監芖機胜付きのラップトップがありたした。







サヌビスは、珟圚の負荷ずしお監芖に衚瀺するもの枩床ずCPUファンを蚈算したした。メトリックはタむムベヌスデヌタベヌスに枡され、grafanaでレンダリングされたした。



過去5秒間に50を超えるキャプチャ衚瀺の芁求を受信した堎合、修正+ランダムなステップ数によっお負荷が増加したした。蚈算では、2分で100の負荷を埗るこずができたした。



実際、サヌビスには、最終的なゲヌムで衚瀺されたよりも倚くのロゞックがありたした。CPUファンの回転のみが衚瀺されるようにモニタヌを配眮したした。



ク゚ストの開始時に、圌らはSokolのWebサむトからGrafanaにアクセスできるようにしたいず考えおいたした。ただし、バック゚ンドアプリケヌションレポヌトのspringbootメトリックも含たれおいたため、クリヌンアップする時間がなかったため、アクセスを閉じるこずにしたした。そしお圓然のこずながら、ク゚ストの開始時に、䞀郚のプレヌダヌは、アプリケヌションがスプリングブヌトフレヌムワヌクで䜜成されおいるず掚枬し、䞀郚のサヌビスの名前を掘り起こしたした。



ホスティングおよびデヌタバス



バック゚ンドからサむト、RabbitMQが起動されたVPSサヌバヌに情報を転送するためのツヌル。



バック゚ンドずデヌタバスはVPSに保持されおいたした。そのパワヌは、画面に衚瀺されおいるコンピュヌタヌず同等でした。2ギガバむトのRAMを備えた2コアVPSです。ピヌク負荷は数日間しか蚈画されおいなかったため、リ゜ヌスの料金が適甚されたした。これは、VPSの短期間の負荷を蚈画しおいるクラむアントが行うこずです。するず、予想以䞊に負荷が高くなり、固定料金の方が有利であるこずがわかりたした。ク゚ストを行う堎合は、タヌボラむンの料金を遞択しおください。



サヌバヌをDDoSaから保護するために、Cloudflareを䜿甚したした。



VPSは飛んでいる色ですべおに耐えたず蚀う䟡倀がありたす。



リレヌ制埡を担圓したアルドゥむヌノは、翻蚳者からコマンドを受け取り、実際の䜜業を行いたした。



これは、プロゞェクトのハヌドりェア郚分に関する次の蚘事のトピックです。バック゚ンドは、特定のリレヌを有効にする芁求を送信するだけです。たたたた、バック゚ンドはほずんどすべおの゚ンティティを認識しおおり、バック゚ンドからの芁求は「この゚ンティティを有効にする」ように芋えたした。サむトの初期テストのためにこれを行いたしたただすべおのArduinoずリレヌを収集しおいたせん。最終的にはすべおをそのたたにしたした。



フロント゚ンド



すぐにサむトを䜜成したした。1営業日かかり、予算を3䞇ドル節玄できたした。



圓初、私たちはサむトを゚クスポヌトしお、欠萜しおいたロゞックを投入するこずを考えおいたしたが、これを行うこずを犁じる䜿甚条件に遭遇したした。



ラむセンスに違反する準備ができおいなかったため、2぀の遞択肢がありたした。すべおを自分で䜜成するか、Tildaに盎接連絡しお、プロゞェクトに぀いお説明し、コヌドを倉曎する蚱可を求めるこずです。



私たちは2番目のオプションを遞択したしたが、圌らは途䞭で私たちに䌚っただけでなく、1幎間の無料のビゞネスアカりントを提䟛しおくれたした。これには非垞に感謝しおいたす。゜コルのりェブサむトのデザむンを圌らに芋せるこずは非垞に恥ずかしかった。



その結果、基本デバむスにリク゚ストを送信するためのjs-logicをフロント゚ンドにアタッチし、ゲヌム芁玠をオンたたはオフにするためのボタンのスタむルをわずかに倉曎したした。



サむトデザむン



別の章の䟡倀がある怜玢履歎。



昔ながらのサむトだけでなく、すべおの基本的なデザむンルヌルに違反する絶察に䞍快なサむトを䜜成したかったのです。同時に、信憑性を維持するこずも重芁でした。圌はENTのストヌリヌを壊さず、䜜者の倧げささを瀺す必芁があり、プレヌダヌはそのようなサむトが存圚し、クラむアントを連れおくるこずさえできるず信じなければなりたせんでした。そしお圌は持っおきたゲヌムの進行䞭に、りェブサむトの䜜成を2回䟝頌されたした。



最初は、自分でデザむンを行い、より倚くのGIFず光沢のある芁玠を取り入れようずしたした。しかし、10幎の経隓を持぀デザむナヌである私の倫は、圌の肩越しに芋お、圌を「良すぎる」ず华䞋したした。デザむンルヌルを砎るには、それらを知る必芁がありたす。







持続的な嫌悪感を匕き起こすいく぀かの色の組み合わせがありたす同じゞュヌシヌさの緑ず赀、灰色ずピンク、青ず茶色。その結果、基本色ずしお赀ず緑の組み合わせに決め、猫ず䞀緒にgifを远加し、写真ストックで゜コロフ自身の3〜4枚の写真を遞択したした。私にはいく぀かの芁件しかありたせんでした。䞭幎の男性で、フィット感の悪いスヌツを着お、数サむズ倧きく、「スタゞオでのプロの写真撮圱」のポヌズをずっおいたした。テストのために、圌らはそれを友達に芋せお、「どうですか」ず尋ねたした。



デザむンを開発する過皋で、私の倫は30分ごずに暪になり、ヘリコプタヌを飛ばし始めたした。Pashaは、フロント゚ンドを終了しおいる間、開発者のコ​​ン゜ヌルを画面の倧郚分で開こうずしたした。圌は目を離さなかったのです。



実際のデバむス



ファンずラむトは、゜リッドステヌトリレヌを介しお取り付けられおいるため、フルパワヌですぐにオンになるこずはありたせん。これにより、監芖ず䞊行しお電力の蓄積が発生したす。



しかし、これに぀いおは、ゲヌムのハヌドりェア郚分ずサむトの実際の構築に぀いお、次の投皿で説明したす。



乞うご期埅



サヌバヌの砎壊を䌎う探求に関する他の蚘事








All Articles