Skyforge Closed Betaの舞台裏





今日は、クローズドベータテスト(PTA)Skyforgeの最初の部分についてお話したいと思います。 これは最初のCBTではありませんが、最も広く普及しています。 プレイヤーのほとんどは会社の従業員や友人ではありませんが、テストの参加者からランダムに選択されたゲームのファンであり、アーリーアクセスキットを購入または獲得しました。 2月6日金曜日の夕方から週末の終わりまで、特別なベータ週末が開催され、その間、Mail.Ruにアカウントを持つすべてのユーザーがPTAにアクセスできます。 この投稿は本質的に物語であり、PTAの前後に発生したイベントに関する私の個人的な見解を伝えています。



PTAの準備



最初のSkyforgeテストは開発チーム内でのみ実施され、すべて自分で行いました。 時間が経つにつれて、ゲームはそれぞれより安定し、テストを許可された人の輪が拡大しました。 まず、Allods Teamの同僚にゲームを見せました。 それから-Mail.Ru Groupのゲーム部門へ。 次に-会社のチーム全体に。 この段階から、すべてのテストはすでに別のチーム、つまり運用チームによって実行されています。 外部テストはスタンドで行われ、CBTおよびその後のMBTの準備を行っていました。



クローズドベータテストの生産性を高めるために、インフラストラクチャを慎重に準備しました。 PTAサーバーで負荷テストを実施し、さまざまなメトリックの収集、クラッシュ受信、ログ分析などを構成しました。 そして、すべての準備が整ったら、シャッターを開いて最初の実際のユーザーを入れました。



最初の瞬間



プレイヤーが参加し始めるとすぐに、ユーザーの反応を確認し、サーバーのパフォーマンスを理解し、好奇心から逃れるために、すぐにTwitchでブロードキャストを探し始めました。 ほとんどのスタジオは、疑いを持たないゲーマーの放送を見ました。品質のディレクターでさえ、一般ユーザーとして彼にいくつかのアドバイスを与えました。 戦闘サーバーから最初のレポートを受け取り始めました-Webポータルでの認証の問題、クライアントのクラッシュ、個々のプレイヤーの接続エラー。 しかし、一般に、開始は成功しました。アカ​​ウントサーバーが管理し、ゲームメカニクスサーバーの速度は低下しませんでした。 しかし、これは驚くべきことではありません。なぜなら、鉄の力は、私たちのデータによれば、はるかに多くのユーザーにとって十分なはずだったからです。



ライブパッチ



SkyforgeサーバーがJavaで作成されていることは幸運です。 この言語は、アプリケーションを停止することなくコードをホットスワップするHotSwapメカニズムをネイティブにサポートします。 それらとパッチを実行する特別なユーティリティも作成しました。 このツールは、PTAの開始時に既に役に立ちました。 チャット用のカスタムアバターを読み込むときにバグがあることに気付いたとき、この機能についてコメントしました。







ユーザーにとって、アバターの喪失はほとんど気付かれませんでしたが、一部のサーバーでははるかに簡単になりました。 次のパッチでは、この機能はすぐにオフになりました。



原則として、スポットパッチングの手法は怖いと同じくらいクールであり、成功に対する完全な自信がなければ、それを使用しないほうが良いです。



顧客の問題



テストの観点から、幸いなことに、サーバーはクライアントよりもはるかに幸運でした。 サーバーが動作するハードウェア仕様を知っており、正確な環境を知っているので、設定を構成します。 クライアントはこの点ではるかに困難です。 開発中、クライアントを実行するPCの構成は10〜20種類あります。 これらは開発者自身のコンピューターです。 構成の数の公開後、数千になります。 そして、それらはそれぞれ独自の特性を持っている場合があります:エキゾチックなドライバー、ビデオカード、その他のコンポーネント。 したがって、新しいプレーヤーの最初の波は、大規模なクラッシュとパフォーマンスの問題の犠牲者でした。 しかし、ハードウェアとパフォーマンスに関する統計を収集するシステムのおかげで、必要な改善を迅速に行うことができました。 現在、チームのすべての作業は、安定性の向上とFPSの向上を目的としています。







このようなヒートマップ上で、オープンエリアのプレーヤーのFPSを評価します。



サーバーの問題



友人や家族の輪を越えてテストを行うと、サーバーチームは現実世界の奇妙なことに気付きました。 そのため、たとえば、ネットワークインフラストラクチャの特性により、数人のユーザーが苦しみました。新しい接続が新しい外部IPを取得しました。 したがって、プレーヤーが1つのカードから別のカードにテレポートすると、IPが変更されました。 そして、正直に言って、サーバーから切断しました。 この状況は無効と見なされました。 しかし、チケットを数回配達した後、同じゲームセッション内であまりにも妄想的であるため、IP検証をオフにする必要がありました。 残った他のユーザー検証チェック。



サーバーのアーキテクチャに関する記事を読むと多くの分散サーバーで構成されていることがわかります。各サーバーは独自のホストに存在し、特定の役割(承認サーバー、ゲームメカニクスサーバー、データベースサーバーなど)を実行します。 開発中、1台のサーバーの落下が致命的ではなく、ほとんどのユーザーが引き続きプレイできることを確認しようとしました。 しかし、現実は思ったよりも厳しいことが判明しました。







サーバーがラック全体に落ちる場合があります。 ポータルと複数のゲームメカニクスサーバーを備えたラックの電源が完全に切れたとき、私たちが初めて「幸運」でした。 プレイヤーはこのように振る舞うと考えました:エネルギーを失ったサーバーに不運だった人は静かにゲームに再び入り、さらにプレイを続けますが、故人のメカニックに残っている個人カードを渡す進行は失われました。 残念ながら、シャットダウンが異常であり、メカニックのホストが完全に消失したため、調整サーバーは切断に関するメッセージを受信しませんでした。 私個人にとって、これはTCPキープアライブの最も期待される動作ではありませんでした。 特定の(デフォルトでは非常に長い)タイムアウト後、キープアライブが非アクティブなTCP接続を介してパケットの送信を開始することが判明しました。 これは、すべてが正常であるときにチャネルが散らばらないようにするためです。 原則として、各接続のタイムアウト値を個別に設定することはできましたが、これにはダーティハックが必要になります。 したがって、私たちは、単純なピンポンサーバーポーリングメカニズムという決定を下すことに同意しました。 さらに、TCPキープアライブとは異なり、リモートテリトリーの管理者が誤って無効にすることはできません。また、フルGCシリーズなどでなくなったサーバーを無効にすることもできます。



このアイデアについて話し合った後、MBTの前に実装することに同意しました。 それでも、毎日ホストの電源が切れているわけではありません。







上記のチャートをリアルタイムで見たとき、アクティブユーザーの数が急激に減少したことは、営業日の終わりの兆候であると考えました。 しかし、メカニック数13のホストが倒れたことが判明しました。 しかし、すでにサーバーチームの重要な部分は、コンサバトリーでどこで何を改善できるか、ログを調査しています。 そしてここで、企業のパーティーの数時間前の年の最後の金曜日に、メカニックス番号13のホストが再び落ちます。 そして、新年を迎えて、仕事から離れて過ごしたい12日間の休暇。 不運なメカニズムをオフにすることにしました。 それ以来、このような事件はもうありません。 しかし、新年がより穏やかになり、個々の整備士の倒産が緊急のメンテナンスにつながらないように、同じ企業の夕方に修正の最初のバージョンを準備しました。 正直にテストしました。ローカルPCでサーバーの分散バージョンを起動し、機械部分から電源ケーブルを引き出しました。 Fixはワーカーとして認識され、2014年の最後の予防作業中に戦闘に入りました。 最後の年末年始は穏やかでした。



エラー107



107-これは、サーバーに接続する際のタイムアウトエラーのコードです。 残念ながら、このエラーはPTAに参加しているプレーヤーの間で広く人気を博しました。 そして、いくつかのかなり興味深い事実が一度に関連しています。



バグ、またはエラー107を引き起こすバグでさえ、長い間、PTAの開始の数か月前にネットワークエンジンに導入されました。 そして、タイムアウトで最初につまずくのはボットです。 しかし、その後、時間が足りなかったか、理由を理解できませんでしたが、ボットでは、結局、すべての種類のタイムアウトが単純にオフになりました。 その結果、残念ながらバグは戦場に到達しました。



さらに、複数のアクティブなユーザーが特定の問題の重要性の錯覚を作成する方法を目撃しました。 調査が示したように、エラー107は、サーバーとクライアントの両方で、約3ミリ秒の領域でpingを実行し、コードの処理を行うユーザーに対してのみ発生する可能性がありました。 残念ながら、この修正は状況を悪化させるだけでした。エラーの消失はごく少数のユーザーで見られましたが、非常に多くのプレイヤーで見られました。



これらは、3G / 4Gモデムおよび/または弱いPCを介してSkyforgeをプレイするユーザーでした。 この新しいバグをローカルで繰り返すことはできませんでした。 幸いなことに、ボットがあります。 それらにタイムアウトを含め、それらを処理するためのコードを修正し、すぐにエラー107のシャフトを取得しました。さらに、バグの修正はすでに技術的な問題でした。 戦闘の人気の修正を発行した後、エラー107は無効になりました。 現在、申し立ては1件のみです。



実際、エラー107にはいくつかの原因がありました。



エラー107のレッスンは、システム内の不完全に理解された動作を調査することがいかに重要であるかを再び示しました。 また、プレーヤー間の特定のエラーの広がりについて客観的な統計をとることがいかに重要か。 ところで、そのような統計は、MBTの開始までにすでに表示されるはずです。



テストに参加したプレイヤーの進捗状況に関するドライ統計:



X-登録総数

0.96 * X-Z1。 ダンキット島

0.84 * X-Z2。 イゾラの発掘

0.58 * X-Z3。 ランバーの森

0.37 * X-Z4。 ナオリ島

0.11 * X-Z5。 ミレンスキー洞窟



残念ながら、絶対値は公開できません。 私の謙虚な意見ではありますが、それらは価値があります。



結論の権利について



クローズドベータテストは、幅広い視聴者向けにゲームを開始する前の最も重要な手順の1つです。 私の意見では、私たちのチームはCBTの最終段階に威厳をもって対処しました。 CBTに参加し、参加しているすべてのユーザーに感謝したいと思います。あなたの報告はゲームの改善に役立ちます。 また、私はをストレスの週末に招待します 。 私は一緒に私たちが継ぎ目にサーバーをクラックできることを願っています:)



All Articles