長い記事は、まっすぐ焦点に行って、私と一緒に共有してください。
スパイクは何ですか?
「スパイク」は、特定の時点を促進業務の手段であり、システムレベルで反映、ユーザが数十プロモーション製品の限定された数を購入する第2の要求の数千の受信、Webシステムを指します。本質的には、スパイクシステム「である3高」システム、つまり、高い並行性、高パフォーマンス、高可用性分散システム。「高い同時実行」の観点から、この記事で、対処すべき主な問題点を見て。
同時読み取り、同時書き込みに対処するためにスパイク。すべてのデータを読み取るためにサーバーにユーザーを減らすために必要な意味で「同時読み取り」、および「同時書き込み」データの大規模な流れの下で一貫性を確保するため、データの正確性を確保するための主な必要性。
三つの側面上のスパイクシステムのフォーカス
スパイクシステムの一例の下には、3つの問題の主要な関心事スパイクシステムを見てみましょう。
高い同時アクセス
ユーザーは、スパイクビューの前にページを更新するために購入ボタンを取得するには、フォーカスを購入する際の同時購入をクリックし続け、コアは、システム・データへの高い同時読み取りアクセスで、以下は保護の手段により行うことができます。
アクセス傍受:ブラウザ/多層リバースプロキシインターセプトトラフィック/ウェブ層/サーバー層/データ層から、近いユーザー層へのインターセプトを訪問した背景への圧力を軽減しようとします。
シャント:、主にクラスタリング技術を通じて配布プロセス複数のマシン、同時実行性を向上させます。
静的および動的分離:可能な動的データおよび静的データの分離、およびデータが読み出され、CDN技術をキャッシュすることによって加速され、
第二に、データの正確性
スパイクは支払う、ページ、購入、在庫控除に買い、ブラウジング商品を含む業務プロセスのこのシリーズを伴います。同時売られ過ぎの発生を防止するために、データの正確性を保証するために、主要な在庫関連控除を書き込むれます。おそらく解決策は以下のとおりです。
あまり証券:同時実行のロックを高めるために、別々のホットホット商品データベースに、トランザクションを分析
ホット:ホットコアリアルタイムのデータ分析、およびシステムの最適化または隔離
非同期:それは購入要求の受け入れを意味し、非同期技術を扱います。キューに最初の購入要求は、このプロセスは非常に効率的で、顧客情報を返します。
限定的なダウングレード:要求制限、アクセス制御システム、下流依存サービスのダウングレードを、そのコアのリンクを確保
第三に、抗不正行為
購入はまたように列車の切符、ダフ屋とを購入するためには、そのようなプラグインとしてアークチケットを公平性を確保する必要があります。技術的な観点では、おそらく方法は以下のとおりです。
回答:購入の複雑さを増大させるために、要求を遅らせます。
キャッシュのチェック:キャッシュは、この項目はときに、ユーザーの購入要求プロセスが記録された購入かどうか確認してください。
システム設計の原則スパイク
図1に示すように、要求の受信数を最小限にします
レセプションでは、負担のブラウザ要求を増やす簡素化するか、ページサイズ(CSS / JS、画像など)、ページ装飾を削除マージしようとします。DNCSを減らすの解析を
できるだけ少ない2、バックグラウンドデータ
バックグラウンドデータは、ネットワーク伝送、圧縮および文字エンコーディングを増やすCPUを消費します。私たちは、背景に依存したデータやサービスをソートするために、不要なデータ交換を減らすために懸念のシリアライズ/デシリアライズする方法が必要です
図3は、経路が短いとしてコールであるべきです
分散型コール・コンプレックスは、通話リンクを短くする必要があります。依存第三者を減らすには、弱いに依存しようとすると、うまく評価を行うために
4、単一のポイントを持ってしないようにしてください
可用性と角度の安定性を、単一ポイントを排除する、サービスのステートレス、およびそのような動的機械構成として機械を、デカップリングのサービス状態、メモリの状態は、冗長性を通じて可用性を高めます。
「アクセスブロック」の高い同時実行
高い同時アクセス遮断主なアイデアは、次のとおりです。
ブラウザ/プロキシ/ウェブ層/サーバー層/多層ブロックのトラフィックデータレイヤを逆からは、無効な要求をフィルタリングするために、近いユーザーにできるだけ多くのアクセス層を傍受しようと最後が一番である「ファンネル」を聞かせて、有効な要求。一方、ユーザ要求が以前に処理されるが、それによって並行システムとQPSの程度を改善、RTを各要求を減少させます。
ブラウザのアクセス遮断
あなたは、このようなボタンのクリックが要求を受け入れるために、限られた時間のため、利用できないよう、製品レベルでのユーザーの行動を制限することができ、不要なクリックからユーザーを防ぎます。もちろん、悪質な購入を防ぐために、あなたはまた、このような以前の回答/キャッシュチェックの話として、抗不正行為に他の試みを、行う必要があります。
CDNの加速
CDNは、コンテンツ配信ネットワーク、すなわち、コンテンツ配信ネットワークの略です。簡単に言えば、別のサーバーに元のサーバー上のデータをコピーすることで、ユーザーがリソースへのサーバー最寄りのアクセスにアクセスします。欠点は、コンテンツの変更が徐々に有効にすることです。
リバースプロキシアクセス遮断
主に静的および動的分離、プロジェクトのWebパブリッシングの一環として、静的ファイルは、nginxのは、静的なファイルをホストすることにより、他のWebサービスは、圧力を下げます。
Webサービス層とアクセスレイヤ傍受
主動的なデータアクセス、キャッシング戦略は次のレベルへのデータアクセスを減少させるために使用することができます。キャッシュは、ローカルキャッシュとRedisの、memcacheのと他のキャッシュミドルウェアに分けることができます。
「転換」の高い同時実行
並行性を向上させ、クラスタリング技術、プロセス、複数のマシンを通じて主に分布するシャント。
DNSポーリング:ポーリングによってDNCS、nginxののクラスタリングながら、CDNを取得するための要求を直接分類アプリケーション/ブラウザ入口、静的データから。
nginxのロードバランシング:nginxのは、10Wの同時アクセスをサポートし、nginxのは、扱う複数のWebサーバーへのプロキシポリシーの設定要求、ルート要求をサポートしています。ポーリング、体重、ip_hash、公正、url_hashなど:nginxのは、負荷分散の戦略には、サポートしています
負荷分散アーキテクチャ戦略:ウェブ層は、サービス間の通話を発信できるだけでなく、サービスを呼び出して、各サービスは、複数のコピーを展開する必要があります。二つの最も一般的に使用されるフレームワーク技術、春の雲、ダボ、HSF、サービスの異なるインスタンスにルーティングされたクライアント・ロード・バランシング戦略を、使用して。
Redisのクラスタ:QPSの何千ものシングル数百のRedis、Redisのクラスタにより、複数のサーバにデータを割り当てる各マシンの負荷を軽減。
MySQLは読み取り及び書き込み分離:書き込み要求は、一般的に分割しない、また、シャント技術に関するデータベース書き込み要求を分散させることができます。読み取り要求、別の読み取りと書き込みの戦略の一般的な使用のために。Libraryアプリケーションだけでは、インデックスを設定する読書、読み取りパフォーマンスを向上させます。
「静的および動的分離」の高い同時実行
動的なページ:ページをレンダリングするために、リアルタイムのデータは、あなたが戻って呼び出す必要があり、遅い読み込み速度
静的なページ:ファイルがファイルシステムに格納され、頻繁に変更されないが、スピードを読んで非常にあります
静的、静的ページ、動的ページの代替として、効率を向上させるために。例えば、製品情報ページ、製品情報の静的なページの下に格納されているのリリース後、製品情報、必要なデータのみへのリアルタイムデータアクセス。
いくつかの懸念:
1、 静的データ・キャッシュ、ユーザーから最も近い場所に。このようなキャッシュのブラウザ、CDN、サービス側として
図2は、することができ、直接キャッシュ HTTP接続。キーは、彼らがそのようなデータ出力とURL、訪問者、時間、場所に関連するかどうかなど来場者に関連するパーソナライズされたデータとデータを、含まれているかどうかであり、それはクッキーやその他の個人データが含まれているかどうか。
頻繁に使用して3、nginxのWebサーバーとキャッシュ静的ファイル。Javaシステム自体は、多数の接続要求を扱うのが得意ではなく、キャッシュのWeb側nginxのしようとする必要があります
4、できるだけ動的データJSON技術。不要なデータ伝送と解析を削減
5は、キャッシュにも障害を考慮する必要があります/問題は、レート/ポストのアップデートの問題/移動データの統合を打つ;失敗する、例えば、一般的に3つの方法:タイムアウトの更新、定期的な更新、更新通知。
スパイクの「株式を切ります」
以下の在庫は、一般的に次の:単一在庫削減、在庫削減の支払い、源泉徴収株式を。
その中で、私はむしろ、「推薦受注マイナス在庫の商品は、より単純な論理をスパイクの売り手が株式の厳格な制限がありながら、スパイクに参加するため」、購入は以下の単一支払い後に成功していない状況下で、作ることです。
もちろん、「受注マイナス在庫」、インベントリデータが負にすることはできませんことを確認します。
いくつかの方法:
1、トランザクション判定減少インベントリを確保することであり、それ以外の場合はロールバックされ、負にすることはできません。
2、提供直接データベースフィールドのデータ、符号なし整数、直接エラーはゼロ未満です。
別々の3、ホット商品ホット図書館
4、同時ロック:ロックは、キューイングのように、同時の増加します
図5は、カウンタ:Webサービス層または複数の層を作るためのカウンタは、技術的なしきい値に達すると、直接返す失敗をスナップ。
6、貿易ルートの下:同じサービスとDBリンクに商品の同じカテゴリの購入経路、不要なロック競合を減らします。
実際には原則のいくつか:
1. Webデータを読み出し側にキャッシュされ、読み出しが無効なデータをフィルタリングします。
2.読み出しデータは、より強い整合性チェックではありません。
3.タイムスライスを作るために、書き込みデータに基づいて、フィルタ処理期限切れのリクエスト。
4.書き込み要求が制限保護、過負荷フィルタ要求を行うには、
強力な書き込みデータの整合性チェック5.はい、唯一の最後の有効なデータ検証。
スパイクの「ホットスポット」
ホットコアデータがリアルタイム分析のために必要とされる、ロードマップができスパイク異なる角度のサービス/システム/データから単離/制限/最適化すること、等:
静的ホットデータ:事前に予測します。売り手は、マーキング事前に登録します
ホットスポットの動的数データ:動作中のホットスポットシステムは、一時的に生成します
別のホットスポットはまた、全体的なビジネスのフォーカス制御系の分析成分を増やし、対応する制限および分離方法を行うことができます。
スパイクの「非同期」
システム設計上のスパイク、しばしば用いた瞬時流量をバッファにメッセージキューは、同期要求は、一端にピーク瞬時流量、他端に円滑に消費者のメッセージを受信し、中間キューを介して、間接的に非同期のプッシュを呼び出します。
本質的に、それはバッファリングするいくつかの機構を追加するステップ、によって二段階になることです。例えば、購入するスパイクのクーポンでは、(ユーザーが対象となるかどうかを確認するために)、ユーザコードを取得し、システム開発コード(クーポンを配布するユーザーのために修飾する)、コード10をつかむQPSの数万人であってもよいし、あなただけが資格があるかどうかを知っておく必要があります。しかし、唯一の髪のコード資格のユーザーのために、可能なQPSは、メッセージ・キューを使用して、数千、効率を大幅に向上させることができます。
メッセージキューに加えて、キューはまた、スレッドプールをロックするなど他の方法で使用することができるメモリのキューイングアルゴリズム(例えばFIFOなど)、(例えば、MySQLのバイナリログのものベースの同期のような)ファイルをキュー待ち
持ち帰り
-
スパイク・システム「は、3高」システム、すなわち、ある高い並行性、高性能かつ高可用性分散システムの
-
設計原理をスパイク:少し背景情報として、できるだけ受信要求、できるだけ短いリンクを呼び出し、単一のポイントを持ってしないようにしてください
-
高い同時実行方法をスパイク:傍受、流用、静的および動的な分離を訪問
-
データスパイク方法:在庫戦略、フォーカス、非同期、制限ダウングレードを下げます
-
アクセスは、主要なアイデアを傍受する:CDNとキャッシング技術により、無効な要求をフィルタリングするために可能な限り、近いユーザーへのアクセス層を傍受してみてください。
-
主なアイデアをシャント:分散クラスタ技術により、複数のマシン処理が並行性を向上させることができます。
遂に
システムの高い並行性の要件をスパイク、高性能および高可用性要件の両方は、高い並行性の観点から、本明細書で主に記載されています。高いパフォーマンスと高可用性を実現するため、興味のある学生は、私の公衆番号「Siの玄アーキテクチャ」関連記事を参照してくださいすることができます。