6

エンタープライズ レベルの PHP アプリケーションを実行しています。これは、上司がアップグレードを拒否し、機械が常に 2 ~ 3 のシステム負荷 (そう、Linux) で実行されているインフラストラクチャ上で何千人ものユーザーがオンラインになっているブラウザ ゲームです。とにかく、それは本当の問題ではありません。実際の問題は、一部のユーザーがサーバーがロードされるまで待機し (プライム タイム)、マウス クリッカーを持ってきて、同じ送信ボタンを 10 ~ 20 回クリックし、サーバーがまだ動作している間に同時に 10 ~ 20 の要求を送信することです。最初のリクエストを生成するため、キャッシュとデータベースは更新されません。

現在、各リクエストに2分間有効な出力変数があり、基本的にmemcache内のフラグである「ミューテックス」ロックがあり、見つかった場合はスクリプトの実行をさらにブロックしますが、マウスクリッカーはで非常に多くのリクエストを行いますそれらがほぼ同時に実行されるのは、私にとって大きな問題です。

この問題に対処している StackOverflow 関係者の大半は、お元気ですか。Cookie/セッションにフラグを立てることを考えていましたが、サーバーが過負荷になると同じ問題が発生すると思います。最適化は不可能です。ソースは 7 年前のもので、非常に最適化されており、ほとんどのページでクエリが実行されず (キャッシュから実行されています)、特定のユーザー入力でデータベースにクエリを実行するだけです。

はい、実際のオブジェクトのない手続き型コードです。マシンは PHP 5 を実行しますが、コード自体は PHP 4 に近いものです。古いものであることはわかっていますが、この混乱全体を書き直すリソースを惜しむことはできません。ええ、私は基本的に古い穴にパッチを当てています。しかし、私が知る限り、これはロードされた PHP Web サイトの一般的な問題です。

PS: 送信時に JavaScript を使用してボタンを無効にすることはできません。本当の詐欺師は上級ユーザーです。そのうちの 1 人は、ボット クリッカーを作成し、それを Google Chrome 拡張機能としてパックしました。私がどう対処したかは聞かないでください。

4

4 に答える 4

1

これは、何よりもレガシー コード ベースを更新する方法に触れているように感じます。ある種の並行処理を実装するのは良いことですが、古いコード ベースが実際の問題です。

技術的負債について説明しているこのビデオを強くお勧めします。

それを見て、まだしていない場合は、技術的負債とは何かをビジネス用語で上司に説明してください。彼はおそらくこれを理解するでしょう。コードが適切に管理されていない (負債が返済されている) ため、非常に高いレベルの技術的負債があることを説明します。物事を改善するために小さな段階的な繰り返しを使用して、これに対処する方法を彼/彼女に提案してください。

于 2014-01-23T21:38:25.457 に答える
1

あなたのコードの外で解決策を探します。

どのサーバーを使用しているかはわかりませんが、apache には mod_evasive などのモジュールがいくつかあります。

ファイアウォールで IP からの 1 秒あたりの接続を制限することもできます

于 2013-05-29T13:53:23.597 に答える
0

IP 接続を制限すると、プレイヤーが怒るだけです。古いスタイルのコードを使用して、いくつかの有名なオープンソース ゲーム クローンの多くを修正し、書き直しました。たとえば、ここを見てください http://www.xgproyect.net/2-9-x-fixes/9407-2-9-9-cheat-buildings-page.html

とにかく、パフォーマンスについては、セッション内のコードは、現在のスレッドが閉じられるまで他のすべてのスレッドをブロックすることに注意してください。そのため、セッション内のすべてのコードを inglobe するように注意してください。また、セッションに重いデータを含めないでください。

スクリプトについて: 私のゲームでは、CSRF 保護の一種である、データベースに保存されたランダム ID を追加してリンクを自動的に書き換える php モジュールがあります。人間のユーザーは変更されたリンクをクリックするため、変更は表示されませんが、スクリプトは古いリンクを要求しようとし、いくつかの試行の後、禁止されます! 他のスクリプトは DOM を使用するため、ページの周りに無駄な DIV を挿入するのを簡単に回避できます。

編集: https://github.com/facebook/hiphop-php/wikiでアプリをブーストできます

于 2013-09-13T10:48:51.710 に答える