問題タブ [high-load]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
314 参照

design-patterns - データベース機能分解のパターン?

次の問題があります。私たちのエンタープライズアプリケーションにはMySQLのデータベースがあり、その構造が複雑になりすぎているようです。100を超えるテーブルがあります(7年間開発されています)。

ただし、ほとんどのテーブルは他のテーブルとはまったく関係がありません。誰もが使用する一般的なテーブル(辞書)がいくつかありますが(そのようなテーブルは約20個)、それだけです。このデータベースをより高速で信頼性の高いものにする方法について疑問が生じました。

私はデータベースの分解についてたくさん読みました。つまり、さまざまなドメインに関連するテーブルをさまざまなデータベースに配置します。たとえば、運送状やその他の紙関連のものはすべてPapersというデータベースに配置され、顧客とその注文に関連するものはすべてClientsというデータベースに配置されます。

ここに2つの問題があります。

  • ユーザーは、エンタープライズアプリケーションが単一のドメインで動作していることを確認する必要があります。開発者は、データベースを操作するコアをある方法で変更して、複数のデータベースに対応できるようにする必要があります。
  • 共通のテーブルが問題を引き起こします。それらは単一のデータベースに保持する必要があり、分解後にすべてのデータベースに複製することはできません。したがって、クエリSELECT * FROM A JOIN Bを作成するにはどうすればよいですか?AとBは異なるデータベース(異なるサーバー上)にありますか?

どちらの質問も実際には同じ問題に対処しています。この問題を解決するための一般的なエンタープライズパターン(GoFなど)はありますか?特にJavaEEに適したパターンに興味があります。

0 投票する
2 に答える
11322 参照

nosql - Redisは、高負荷時に定期的に応答を停止します

単純なredisサーバーのセットアップを使用して、PHPアプリケーションにいくつかの値を格納しています。昨日、PHPセッションバックエンドとしてredisを使用するためにphpredisモジュールをインストールしました。これにより、redis DBフォームのリクエスト率が100から2000に、DBサイズが60Mbから200Mbに増加しました。

そしてこの後、redisは10番目のリクエストごとに利用できるわけではありません-ただ応答しません。ログファイルには、これを説明できるものは何も表示されません。

50%以上のメモリが空いています。redisが使用するリソースは次のとおりです。

これの原因は何でしょうか?たぶん私はより高い負荷のためにいくつかのredis設定を微調整する必要がありますか?

これが私のredis.confです:

0 投票する
0 に答える
3476 参照

linux - php-fpm での CPU 使用率が高い

私たちのWebプロジェクトには非常に奇妙な問題があります。

を使用しております:

2 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
12 GB メモリ
1 秒あたり約 20 ヒットがあります。1 秒あたり 4 ~ 5 のリクエストは重いです。これは検索リクエストです。
別のマシンにインストールされたnginx + php-fpm (5.3.22)
MySQL サーバーを使用します。
ほとんどの場合、負荷平均は 10 未満で、CPU 使用率は約 50%
です。場合によっては、CPU 使用率が約 95% になり、その後、負荷平均が 50 以上になります!!!
ここで負荷平均と CPU 使用率を確認できます (ここで画像を送信することに対する私の評判は低いです)
負荷平均
CPU 使用率

状況を正常化するには、php-fpm をリロード ( /etc/init.d/php-fpm reload) する必要があります。
これは 1 日に 4 ~ 5 回発生する可能性があります。
この状況を調べるために strace を使用しようとしました。
長いログでごめんなさい!このコマンド strace -cp PID
PID の出力は、ランダムな php-fpm プロセス ID です (100 個の php-fpm プロセスを開始します)。
この 2 つは、CPU 使用率が高い瞬間をもたらします。

はい、out スクリプトは多くの情報を読み取ります。これは正常です。
しかし、なぜ munmap は非常に長く機能するのでしょうか??!! そして、問題がある場合は、常に munmapが一番上にあります!
比較のために、これは通常の状況でランダムな php-fpm プロセスをトレースした結果です。

そして、その munmap が上にないことがわかります。
現在、この問題を解決する方法についてのアイデアはありません:(
次の潜在的な問題を調べましたが、答えは「いいえ」です:

  • 追加のユーザー アクティビティ
  • 長いスクリプトの実行 (数秒)
  • スワップの使用

手伝ってもらえますか?

0 投票する
2 に答える
2936 参照

ios - ターンベースのマルチプレイヤー ゲーム サーバーの構築

マルチプレイヤーゲームを作り始めたのですが、経験がないのでいろいろ試してみたのですが、何かがおかしいと感じました。そのため、どのプラットフォーム/ツール/言語/技術を使用するのが最適かについてのアドバイスが本当に必要です。Photon、AppWrap、Skiller、Gamooga などは信じていません。私は、それらが大きくスケールし、価格が高すぎたり、私のニーズに対して大きすぎたりするとは思わない.

最初に、単純化されたゲーム セッション プロセスについて説明します。

  1. ゲーム セッションを開始する 3 人のプレーヤー
  2. 各プレイヤーは質問を受け取り、10 秒以内に回答する必要があります。
  3. プレイヤーが答えたとき、彼は他のプレイヤーによってすでに与えられた答えを見ることができるべきであり(もしあれば)、与えられたらすぐに答えを見ることができるべきです。基本的に、他のクライアントはリアルタイムで回答を受け取る必要がありますが、それは私たちが回答した後でのみです (チートを避けるため)。タイムアウトになった場合、答えなかった人はスコアを獲得せず、次の質問に進みます。
  4. 勝者を決定し、次の質問に進みます。N ラウンド後にゲーム セッションを終了します。

次に、考慮したいくつかの要件について説明します。

  • ゲームは iOS/Android/Web で実行する必要があります。これはHTTPベースにするしかありません。
  • 私は本当に楽しかった Google Cloud Endpoints を探しました。iOS/Android/JS SDK があり、Google Cloud Platform には Google BigQuery があり、その他多くの優れた機能があります。しかし、リアルタイムの回答配信が必要なため、それが適切かどうかはわかりません (Channel API はありますが、iOS 用のクライアント SDK はありません。人々はそれほど良くないと言っています)。
  • Then I looked for Node.js and long polling (AFNetworking on client side) but it is so hard to manage. I need to serve game state updates to clients (and I need to send deltas). That way I need to track all changes individually for each player. And when player connects I should check if there any changes already; if it is then send right away; if it isn't then listen for 'change' event and then send. In the end code looks so awkward and hard to understand and I don't know how to make it right. There is socket.io which should make things better on the server side but again no iOS SDK for client.

I don't know where to go from here. Any help would be very appreciated.

0 投票する
1 に答える
1503 参照

java - 高負荷Javaサーバー

マルチプレイヤーゲームを作っています。今、Androidデバイスをサーバーに接続するテクノロジーを選択しようとしています。クライアントは Android で動作し、ゲームは MMORPG です。サーバーをJavaで書きたいと思います。今のところ、私はそれについて3つのアイデアしか持っていません:

1) プレーン Java とソケットを使用したマルチスレッド環境の作成。これにより、ゲームクライアントとサーバー間の全二重接続がより簡単になります。しかし、次の懸念があります。

1.1) ゲームは多数のオブジェクトを持つ MMORPG であり、たとえば 5000 人が同時にプレイしている場合、そのようなソリューションがどのようにスケーリングされるかわかりません。Java マシンで実行できるスレッドの数は? どうすればそれを概算できますか?1 つのスレッドが各ソケットを読み取り、1 つのスレッドがソケットに書き込みを行っている場合 (つまり、1 人のプレイヤーに対して 2 つのスレッド)。

1.2) プレイヤーの数が増えた場合、自分で作成した jar アーカイブを拡張して複数のサーバーに配布するにはどうすればよいですか? たぶん、それを行うための特別なトリックがありますか?

1.3) 多くのプログラミング オーバーヘッド - ソケット API は非常に低レベルです。

2) HTTP 要求を処理するためのサーブレット インターフェイスを作成します。

2.1) 各プレイヤーが自分のセッションを持っている限り、セッション (および承認) を簡単に制御できます。

2.2) は、Java EE EJB などに接続できます。システム レベルのプログラミングに伴う多くの複雑さが解消されます。そのため、ビジネス ロジックの作成に専念できます。

2.3) HTTP を使用するすべてのタイプのクライアント (モバイル デバイス + ブラウザー) にサービスを提供できます。

2.4) 高速 - 1 つのサーブレット コンテナーでも 1 秒あたり数千のリクエストを処理できるため、非常に高速です。

2.4) しかし、このアプローチは全二重通信を提供できません。更新を確認するために、1 秒ごとにリクエストを送信する必要があります。ゲームはターン制であるため、1 秒の遅延はゲームに大きな影響を与えませんが、それでも大量のトラフィックが生成されます。プレイ人数が多い場合は可能ですか?COMET テクノロジーについて聞いたことがありますが、サーバーが多くのメッセージを連続してプッシュする必要がある場合でも、毎回リクエストを送信する必要があるようです + このテクノロジーはまだ十分に確立されていません。

3) ソケットを作成し、JMS を介して Java EE サーバーに接続します。

3.1) クライアントとサーバー間の全二重通信を可能にし、Java EE のすべての優れた機能を提供するため、クールです。後で、サーブレット インターフェイスを介してブラウザに拡張できます。

3.2) ある種のオーバーエンジニアリングのようです。それは本当に人々がそれをする方法ですか?つまり、それは正しい方法ですか?正気の開発者がそんなことをするだろうか?

選択の参考になれば幸いです。私はそのような仕事をした経験があまりありません。そして、ベストプラクティスに固執したいと思います。

0 投票する
0 に答える
117 参照

redis - キーリストで値を選択する方法は?

たとえばentity:product:[id]、idが整数であるキー構造があります[0-n]

だから私はこれを使うことができますkeys entity:product:*が、このクエリがredisサーバーにどれだけの負荷をかけるかはわかりません。

別の解決策は

  1. entity:products の ID を格納する 1 つのリスト キーを作成します。

    /li>
  2. そして、(疑似コード)

    /li>

より良い方法は何ですか?何がより高速になり、何が redis サーバーへの負荷を軽減しますか?

0 投票する
2 に答える
2038 参照

php - 高負荷環境に適した APC ユーザーキャッシュ?

私たちは、中央キャッシュ サービス (redis) の各サーバーのローカル 2 層キャッシュとして、高負荷環境で APC ユーザー キャッシュを展開しようとしています。基本的に、Facebookが何をしたかを調べました(数年前):

http://www.slideshare.net/guoqing75/4069180-caching-performance-lessons-from-facebook http://www.slideshare.net/shire/php-tek-2007-apc-facebook

しばらくは問題なく動作しますが、負荷が高い状態で数時間経過すると、APC で問題が発生し、mod_php 全体で PHP が実行されなくなります。シンプルな PHP スクリプトでさえ応答しなくなりましたが、静的リソースは引き続き Apache によって配信されます。実際にクラッシュすることはなく、segfault もありません。APC の最新の安定版と最新のベータ版を試し、pthreads、スピン ロックを試しましたが、毎回同じ問題が発生しました。私たちは APC が消費できるメモリをはるかに多く提供しました。クラッシュの 1 分前には 2% の断片化があり、メモリの約 90% が空いていました。「クラッシュ」した場合、エラー ログには何も見つかりません。Apache を再起動するだけで解決します。スピン ロックの場合のみ、次のような php エラーが発生します。

PHP 致命的なエラー: 不明: 行 0 の不明でスタック スピンロック (0x7fcbae9fe068) が検出されました

これは、タイムアウトを使用しないため、pthreads では発生しない一種のタイムアウトのようです。

起こっていることはおそらく次のようなものです: http://notmysock.org/blog/php/user-cache-timebomb.html

いくつかの数字: サーバーには 1 秒あたり約 400 の APC ユーザー キャッシュ ヒットと 1 秒あたり約 30 の挿入 (私が思うに多くのことです) があり、1 つのリクエストには約 20 ~ 100 のユーザー キャッシュ リクエストがあります。ユーザーキャッシュには約 300.000 の変数があり、すべて ttl を使用します (中央の redis のみに ttl なしで保存します)。

APC 設定は次のとおりです。

現在、スピン ロックでコンパイルされたバージョン 3.1.13-beta を使用しており、古い PHP 5.2.6 (これはレガシー アプリです。この PHP バージョンも問題になる可能性があると聞いたことがあります)、Linux 64 ビットで使用されています。

デバッグするのは非常に困難です。apc やシステムなどから 1 分ごとに取得できる限り多くのデータを収集する監視スクリプトを作成しましたが、クラッシュの 1 分前であっても、異常なことは何も確認できません。

ここで同様の問題をたくさん見てきましたが、今のところ、問題を解決する解決策を見つけることができませんでした. そして、私がそのようなものを読んだとき:

http://webadvent.org/2010/share-and-enjoy-by-gopal-vijayaraghavan

高負荷環境では、ローカル ユーザー キャッシュに APC を使用することが最善のアイデアであるかどうかはわかりません。ここでは既に memcached を使用しましたが、APC の方がはるかに高速です。しかし、それを安定させるにはどうすればよいでしょうか。

よろしく、 アンドレアス

0 投票する
1 に答える
102 参照

php - 高負荷の原因となるキャッシュの無効化

PHP スクリプトに対して 1 秒あたり 10K のリクエストがあるとします。

すべてのリクエストは、memcached (またはその他のキャッシュ ストレージ) のキャッシュをチェックしています。キャッシュが見つかった場合 - すべて問題なく、キャッシュ値が返されます。キャッシュが見つからない場合は、低速の SQL クエリを作成してキャッシュを埋めます。これは、最も一般的で単純なキャッシング スキームです。

このスキームは、リクエストが少なくなるまでうまく機能します。リクエストが多すぎるとすぐに、多数のリクエストがキャッシュに何も見つからず、キャッシュを補充しようとする状況に直面します。そのため、それらすべてが遅い SQL クエリの実行を開始し、負荷の影響が大きくなります。解決策は何ですか?

考えられる解決策として、次のシナリオが考えられます。キャッシュが無効であることが判明した最初のリクエストは、キャッシュの補充がすでに開始されていることを示すトリガーを作成し、別のリクエストは新しいキャッシュを待つか、古い (以前の) バージョンを使用する必要があります。

同様の問題をどのように解決しますか?