問題タブ [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.
postgresql - Postgres のチューニングとスケーリング
現在、100 個のテーブルを持つ Postgres データベースがあり、そのうち 20 個は 5,000,000 行を超えており、マスター DB サーバーは Debian 32MB RAM 8 プロセッサで実行されています。
マスター DB に加えて、Slony を使用して複製されたスレーブ DB があります。
私たちのアプリケーションは、SQL クエリに Java と Hibernate フレームワークを使用し、c3p0 を接続プールとして使用します。
私たちの問題は、現在、ピーク時に 30 前後、トラフィックが少ない時間に 4 前後の高負荷が予想されることです。現在、選択ステートメントのマスターとスレーブ間の負荷分散は使用していません。
Postgres マスター DB の構成は次のとおりです。
自動バキュームがオンになっています。
c3p0 Hibernate 接続プールの構成は次のとおりです。
私たちが直面している大きな問題の 1 つは、select クエリが非常に複雑で、多数の結合や共用体さえあることです。
実際のシステムを調整、スケーリングし、高負荷を回避するためのソリューションは何ですか?
ハードウェアをアップグレードしますか? マスターとスレーブ間の負荷分散? 構成が悪い?
slony よりも優れた負荷分散レプリケーション システムに関する提案はありますか?
ソフトウェアを開発していないため、SQL ステートメントの最適化はできません。
c - mmapされたアドレスが正しいかどうかを確認します
私は、FreeBSD8.0とLinuxでも実行されるべき高負荷のデーモンを書いています。デーモンの主な目的は、識別子によって要求されたファイルを渡すことです。識別子は、dbへの要求を介してローカルファイル名/ファイルサイズに変換されます。次に、順次mmap()
呼び出しを使用して、。を使用してファイルブロックを渡しますsend()
。
ただし、dbのファイルサイズとファイルシステムのファイルサイズが一致しない場合があります(realsize <dbのサイズ)。この状況では、すべての実際のデータブロックを送信し、次のデータブロックがマップされると、mmapはエラーを返さず、通常のアドレスだけを返します(errno変数もチェックしました。mmap後はゼロになります)。そして、デーモンがこのブロックを送信しようとすると、セグメンテーション違反が発生します。(この動作は、FreeBSD 8.0 amd64で確実に発行されます)
stat()
私は、電話でサイズを確認するために、開く前に安全なチェックを使用していました。ただし、実際の生活では、まれな状況でセグメンテーション違反が発生する可能性があることがわかります。
だから、私の質問は、ポインターを逆参照する前に、ポインターがアクセス可能かどうかを確認する方法がありますか?gdbでコアを開いたとき、gdbは指定されたアドレスが範囲外であると言います。おそらく誰かが提案できる別の解決策があります。
java - 例外をログに記録するコストと比較して、例外を作成するコスト
java例外を発生させる(またはThrowableのネイティブfillInStackTrace()を呼び出す)コストと、log4jでログに記録するコスト(ファイル内、本番ハードドライブを使用)にかかるコストを比較してみてください...
例外が発生したときに、それらが重要である必要がない場合でも、それらを頻繁にログに記録する価値があるかどうかを自問してみてください...(私は高負荷環境で働いています)
ありがとう
web-applications - 最小のレイテンシー、最小のオーバーヘッドのアプリケーション サーバー?
多数の非常に小さなメタデータ要求を送信するためのネットワーク インターフェイスを持つアプリケーションを設計しています。アプリケーション コード自体は非常に高速で、基本的にメモリにキャッシュされたデータを検索してクライアントに送信します。
Linux ボックスで実行されているネットワーク アプリケーション サーバーで得られる絶対最小レイテンシはどれくらいですか? これは、認証なしで gigE で実行される内部アプリになります。C、C++、または Python を優先して、考慮されるすべての言語/フレームワーク。プロトコルについても同様ですが、HTTP が適しています。
ruby-on-rails - トラフィックの多いFacebookアプリ(ゲーム)のホスティング
現在、トラフィックの多いFacebookアプリケーションを開発しています。すべてのトラフィックは1か月以内に発生し、予想されるユーザー数は500.000〜1.000.000になります。その月の後、ゲームは終了し、勝者が出ます。そのため、アプリはアーカイブされます。
現在、Ruby on Railsを使用してアプリケーションを開発し、トラフィックを処理できるホスティングオプションを探すことを計画しています。問題はユーザーではなく、ピーク値です。短い時間枠内で毎日約500.000件のリクエストが発生します(最悪の場合は3分以内としましょう)。
アプリケーションのユーザー数は500.000〜1.000.000で、ピークは午後1時(タイムゾーンGMT + 1)で、ほとんど(ユーザーの最大80%)がほとんどのリクエストを送信すると予想されます。リクエストは6月11日から7月11日までです。その後、アプリ/ゲームは終了/終了します。
現在、積極的なキャッシュメカニズムを開発しています。現在、負荷を処理する2つまたは3つの小さなアプリ/ウェブサービスについて考えています。
負荷は次のように分散されます:a)メインアプリケーション、キャッシュされたデータ(11画面、各200k)b)投票:毎日午後1時まで(タイムゾーンGMT + 1)-すべてのユーザーが約10kのデータを送信して投票し、同時ピークが高い値!
質問:
- 推奨される特定のアプリケーション設定はありますか?
- 推奨できるホスティングパートナーはありますか?
ありがとう!
algorithm - 過去 24 時間、過去 7 日間、過去 30 日間、過去 365 日間に最も閲覧された情報などをマイニングするためのデータを保存および収集する方法は?
このオプション ( NOT IN REAL TIME )を使用して並べ替えを提供するトラフィックの多いプロジェクト (チューブ サイト) があるとします。ビデオの数は約 200K で、ビデオに関するすべての情報は MySQL に保存されます。1日の動画再生数は約1.5KK。手段として、ハードディスク ドライブ (テキスト ファイル)、MySQL、Redisがあります。
そのような情報をどのように保存すればよいですか?
最初のアイデアは、すべての訪問をテキスト ファイルに記録することです (たとえば、 visits_20080101_00.logなど、1 時間ごとに 1 つのファイル)。各時間の開始時に、前の 1 時間のビデオごとのビューを計算し、この情報を MySQL に挿入します。次に、合計 (過去 24 時間) を再計算し、表の統計を更新します。毎日の初めに同じことをしなければなりませんが、過去 7 日間、過去 30 日間、過去 365 日間を再計算します。正しい計算を行うには、各ビデオの過去 365 日間の情報を保存する必要があるため、この方法は私にとって非常に貧弱に思えます。
他に良い方法はありますか?おそらく、これには別の楽器を選択する必要がありますか?
ありがとうございました。
mysql - MySQL:複数の読み取り専用アーキテクチャで整合性を確保する方法
シナリオの説明は簡単ですが、複雑な答えがある場合があります。
書き込み専用のmysqlデータベースが1つある場合を想像してみてください。次に、約5つまたは6つの読み取り専用データベースがあります。書き込みデータベースには、特定のインベントリのカウントがあります。この特定の在庫アイテムを数十万人のユーザーが叩きのめしていますが、数量は限られています。議論のために、10項目と言います。
10個のアイテムのみが販売されるようにするための最良の方法は何ですか?読み取り専用スレーブが更新される時間の間に200ミリ秒のデルタさえある場合、カウントの整合性が古くなり、所有していない在庫を販売することはできませんか?
この問題をどのように解決/スケーリングしますか?
caching - 高負荷の Web サイトで memcached の期限切れアイテム (TTL による) を処理するにはどうすればよいですか?
1 秒あたり 600 リクエストのピークがある場合、TTL の期限切れのために memcache がアイテムをフラッシュすると、かなり悪影響があります。ほぼ同時に、200 のスレッド/プロセスがキャッシュが空であることを検出し、DB 要求を起動してキャッシュを再びいっぱいにします。
これらの状況に対処するためのベストプラクティスは何ですか?
ps この状況を表す用語は何ですか? (トピックに関するより良いGoogleの結果を得る機会を与えてくれます)
php - リモート ゲートの待機中にリソースを解放する (PHP、Apache、Nginx)
私のphpスクリプトは、リモートゲートの応答を通常20秒ほど待ちます。これにより、Apache httpd スレッドが MySQL 接続を開いた状態でメモリ内に存在し、最終的に MaxClients 値を超えます。リモート ゲートが応答するまでアイドル状態のリソースを解放する方法。
1つの解決策は次のとおりです。1)リモートゲートリクエストを実行し、ユーザーを特定のURLテストに更新するページにリダイレクトします。2)nginx構成ファイルにそのURLのルールを書き込みます。特定のファイルが存在する場合は、apacheを実行してデータを表示します。ページを更新します。3) リモートゲート要求はデータをファイルに保存します
そのため、リモートゲートにリクエストを行うスクリプトからApacheをリンク解除し、可能な限り小さくすることができます。リモートリクエスト中は、サーバーはそのスクリプトのみで使用され、nginx からの軽いリクエストです。
良い解決策かもしれませんが、このアプローチの欠点を知りたいです。そして、もっと良い方法があるかもしれません。
java - WorkManager と高負荷
私は、ネットワークを介して何百ものデバイスとやり取りするアプリケーションに取り組んでいます。コミットされる作業のタイプには、多くの同時スレッドが必要です (主に、それぞれがネットワークの対話を必要とし、個別に行うためですが、他の理由もあります)。現時点では、対話するデバイスごとに約 20 ~ 30 のスレッドが必要な領域にあります。
簡単に計算すると、これは数千スレッド、最大 10,000 スレッドにもなります。スレッド切り替えなどの CPU ペナルティを別にすると、CentOS 64 ビットで実行されている Java 5 はいくつのスレッドを処理できるでしょうか? これは単に RAM の問題ですか、それとも他に考慮すべきことはありますか?
ありがとう!