問題タブ [scaling]
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.
.net - .NET 上のサービス層のスケーリング戦略
私は、多くのモジュール式 Web アプリケーションで構成される Web 製品に取り組んでいます。さまざまなコンポーネントが独自のアプリに分割されていますが、エンド ユーザーには 1 つのアプリケーションのように見えます。
この理由の一部は、複数のアプリケーション サーバー間で簡単に水平方向にスケーリングできるようにするためです。
データ層の水平スケーリングを容易にするために、データベースの前に Web サービス層を使用することを計画しています。このレイヤーは N 台のマシンにスケールアウトでき、その各インスタンスはキャッシュを個別に処理します。
これは、アプリケーションがサービス層のロード バランサーを呼び出し、その呼び出しをサービス インスタンスに割り当て、そのキャッシュを使用してデータを返すか、データベースに接続してデータをクエリするという考え方です。これは、アプリケーション コードを大幅に変更することなく、スケールアウトするための最も簡単な将来を見据えたソリューションのようです。
ただし、いくつかの質問があります。ユーザー セッションをサービス レベルで永続化して、各アプリケーションがトークンで認証されるようにしたいのですが、すべてのサービス マシンでセッション データを維持する方法がわかりません。単一障害点。
これをやってのける方法についてのアイデアはありますか?アーキテクチャに関する他のアイデアはありますか? 1 日に数百万件のヒットを処理できる可能性のあるサイトを設計するプロジェクトを行った人は他にいますか?
編集:アイデアさえありませんか?:(
amazon-ec2 - Amazon EC2 での負荷分散?
Amazon EC2 で数日間HAProxyと格闘してきました。これまでの経験は素晴らしいものでしたが、ソフトウェア ロード バランサーからより多くのパフォーマンスを引き出すことに行き詰まっています。私たちは正確には Linux ネットワーキングの達人ではありません (通常、私たちは .NET ショップです) が、適切な ulimit の設定を試み、カーネル メッセージと tcpdumps に不規則性がないかどうかを調べて、これまでのところ独自のものを保持してきました。ただし、これまでのところ、約 1,700 リクエスト/秒の横ばい状態に達しており、その時点でクライアントのタイムアウトが大量に発生しています ( httperfを使用して微調整してきました)。この目的のために)。同僚と私は最新の Stack Overflow ポッドキャストを聞いていました。Reddit の創設者は、サイト全体が 1 つの HAProxy ノードで実行されており、これまでのところボトルネックにはなっていないと述べています。あっ!どういうわけか、多くの同時リクエストが表示されないか、何かひどく間違っているか、または EC2 の共有の性質が Ec2 インスタンスのネットワーク スタックを制限している (私たちは大きなインスタンス タイプを使用しています)。Joel と Reddit の創設者の両方が、ネットワークが制限要因になる可能性が高いことに同意しているという事実を考慮すると、それが私たちが目にしている制限である可能性はありますか?
どんな考えでも大歓迎です!
編集実際の問題は、実際にはロードバランサーノードではなかったようです! この例では、実際には httperf を実行しているノードが原因でした。httperf はリクエストごとにソケットを構築および破棄するため、カーネルでかなりの量の CPU 時間を消費します。リクエスト レートを高くすると、TCP FIN TTL (デフォルトでは 60 秒) がソケットを長く保持しすぎ、ip_local_port_range のデフォルトがこの使用シナリオに対して低すぎました。基本的に、クライアント (httperf) ノードが絶えず新しいソケットを作成および破棄してから数分後、未使用のポートの数が不足し、この段階で後続の「リクエスト」がエラーになり、1 秒あたりのリクエスト数が少なくなり、大量のポートが生成されました。エラーの。
nginx も検討しましたが、RighScale と連携しており、HAProxy 用のドロップイン スクリプトがあります。ああ、それが絶対に必要であることが証明されない限り、[もちろん]コンポーネントを切り替えるには締め切りがきつすぎます。幸いなことに、AWS にいることで、nginx を並行して (保証されている場合) 使用して別のセットアップをテストし、後で夜通し切り替えることができます。
このページでは、各 sysctl 変数についてかなり詳しく説明しています (この場合、ip_local_port_range と tcp_fin_timeout は調整されています)。
c# - .NET にはどの Memcached クライアント ライブラリを使用すればよいですか?
C# / ASP.NET で memcached を使用できるようにするソリューションがいくつかあることに気付きました。
memcacheddotnet
enyim.com Memcached クライアント
ベイト
どちらを使用する必要がありますか? enyim ポートの方が活発に開発されているようですが、皆さんが推奨するものを見たかったのです。
database - 比較: DB 全文検索と検索エンジン (Lucene)
stackoveflow.com の観点から (スケーリングを目的とした Web サイト プロジェクトを構築する 2 ~ 3 人のエンジニアのチーム)、開発プロセスの早い段階で、データベース ベースではなく Lucene/Autonomy に基づく検索を構築するために労力を費やすことは理にかなっていますか?全文検索。
長所/短所:
Nutch や Autonomy などの成熟した Lucene 実装では、後の段階で Lucene に移行するコスト (これは避けられません) はごくわずかです。
大量の場合、増加する検索インデックスを維持するために追加のインデックス サーバーを追加すること (たとえば、nutch) は比較的簡単です。
Lucene の実装では、ほとんどの場合、インメモリ インデックスを管理するために追加のサーバーが必要になります (スケーリング プロセスのかなり早い段階で)。
drawing - wxWidgets: wxBitmap::ConvertToImage() を回避または高速化する方法はありますか?
滑らかなグラフィックを得るために、係数 2 でオーバーサンプリングして描画し、後で縮小します。
だから私がやっていることは、 wxMemoryDC の wxBitmap でオーバーサンプリングされたものを描画し、 DCにコピーする前に縮小することです。以下のコードは問題なく動作しますが、bitmapOversampled.ConvertToImage(); は非常に遅いです。
wxBitmap から wxImage に、またはその逆に変換せずに同じことを達成する方法はありますか?
javascript - Ajax化するかどうか?
Ajax が Web アプリをデスクトップ アプリのように機能させる方法は本当に気に入っていますが、大量のサイトでのヒット数が心配です。私は現在、イントラネット ベースのデータベース アプリを開発しています。一度に 2 ~ 4 人しかアクセスできません。私は思いっきりAjaxしていますが、Ajaxはどれだけ多すぎるのだろうかと思いました。
ヒット数が Ajax を使用することで得られるメリットを上回るのはどの時点ですか? 理論的には、更新が必要な部分のみを更新しているため、ページ全体の更新と比較して、実際にはそうなるようには見えません。
大量のサイトで Ajax を使用したことがある人がいるかどうか、またそれをどのような用途で使用したか知りたいです。スケーリングの問題が発生しますか?
scaling - 非軸整列スケーリング
これを行うための良い方法を見つけることは、しばらくの間私を困惑させました:私がその中にポイントのセットを持っている選択ボックスを持っていると仮定してください。コーナーをドラッグすることで、ボックス内のポイント(間の距離)をスケーリングできます。軸合わせボックスの場合、これは簡単です。コーナーをアンカーポイントとして(各ポイントからこのコーナーを引き、スケーリングしてから、もう一度ポイントに追加します)、各ポイントxとyにボックスが大きくなった係数を掛けます。
しかし、ここで、x軸とy軸に位置合わせされていないボックスを取り上げます。このボックスの角をドラッグするときに、このボックス内のポイントをどのようにスケーリングしますか?
scaling - 練習するためのスケーリング演習
スケーリング手法(memchached、SQL最適化、シャーディングデータベース)を練習するための演習をオンラインで見つけようとしていましたが、これらの手法の説明しか見つかりませんでした。それらを試すプロジェクトは見つかりませんでした。
スケーリング手法に関するスライドとのこのリンクは、スケーラビリティを非常にうまく達成するためのいくつかのツールをまとめたものであるため、興味深いものです。
この種の活動のためのプロジェクトオイラーのようなサイトはありますか?または、人々がこの問題と戦う方法を学ぶための少なくともいくつかの演習(明らかな速度低下、同時実行性の問題、微妙なバグがあるダウンロード可能なASP.NET/PHPサイトなど)はありますか?
sql-server - Web用のSQLServerのスケールアウト(シングルライターマルチリーダー)
マルチリーダーシングルライター方式でSQLServerをスケールアウトした経験のある人はいますか。読めない場合は、読み取り集中型Webアプリケーションの適切な代替案を提案できません。
c++ - CPU をむさぼり食わずに大量の処理を行うにはどうすればよいですか?
質問のタイトルが良くないことはわかっています。説明させてください。
自然言語を xml に変換する大量のテキスト処理を行っています。これらのテキスト ファイルはかなり高速にアップロードされ、キューに入れられます。そこから、テキストを xml に変換し、関連する部分をデータベースにロードするためにパーサーを呼び出すバックグラウンド ワーカーに 1 つずつプルされます (ブースト スピリットを使用)。
パーサーは、これらを一度に約 100 個実行できます。バックグラウンドワーカーにレートリミッターを設定して、キューを頻繁にポーリングするだけにしているため、パフォーマンスが低下しています。http リクエストが減少し始めているため、現在、複数のバックグラウンド ワーカーをスローすることはできません。バックグラウンド ワーカーと Web サーバーが同じマシン上に存在し、CPU使用率が 80 ~ 95% に達しているためだと思いますが、その上でより多くのRAMを使用することもできます。
これをより適切にスケーリングする必要があります。あなたならどうしますか?
いくつかの質問への回答:
私たちはAmazon Webサービスを使用しているため、安価な追加のハードウェアを購入することは、新しいAmazonインスタンスを生成することとは少し異なります.負荷の量でインスタンスを自動生成するコードを誰かが実行したのでしょうか?
ファイルをキューに詰め込むだけのhttpサーバーがあるため、影響を受ける唯一の理由は、CPUが大量の解析関連のものを処理するのに忙しいためです。
パーサー自体では使用していませんが、バックグラウンド ワーカーのレートを既に制限しています。
私はまだナイスを試したことはありませんが、過去に使用したことがあります-それについていくつかのベンチマークを書き留める必要があります
パーサーは Web サーバーから完全に分離されています。Web/アプリケーション サーバーとして nginx/merb があり、バックグラウンド ワーカーとして c++ を呼び出す rake タスクがありますが、それらは同じマシン上に存在します。