つまり、パフォーマンス、可用性、柔軟性、拡張性、およびセキュリティ:5つの重要なコア指標の建築。
まず、パフォーマンス
パフォーマンスは、コア要素の一つである、またはIなぜアーキテクチャ?さりげなくうまくシステムに線をlowlow。パフォーマンスの最適化は、非常に多くの中小企業は、カントンに行ったことが販売していないです。まあ、当然のことながら、最適化サイトのパフォーマンスへの手段も大変です。
(1)Webフロントエンドのパフォーマンスの最適化:
- ブラウザアクセスの最適化(ブラウザのキャッシュ、ページ圧縮および伝送、合理的な配布ページ、クッキーが送信を減らします)
- HTTPリクエストを削減します。あまりにも多くの通信リンクを作成しないでください。JS、CSS、画像ファイルは、可能な限りマージします。あまりにも多くの要求を避けてください。同時に、バックエンドシステムの要求はあまりにも多くの相互作用を回避することも可能合理的な設計です。
- ブラウザのキャッシュを使用してください。HTTPヘッダには、タイムスタンプすることができようのCache-ControlとExpires.jsファイル名を設定します。更新は、タイムスタンプ、またはキャッシュを更新されると、同時に静的リソースを大量に更新し、同じ時間を避けるようにしてください。
- 静的リソースを圧縮します。
- ページのCSSの最上部に置かれ、底にダウンJS。CSSの事前にレンダリングされました。ブロックページのjsを回避しながらもたらします。しかし、それはケースバイケースを必要とします。例えば、DOMノードがJSページ生成を依存し、必要に応じてファイルの場所を変更します。
- クッキーの送信を削減。静的リソースは、独立したドメイン名を可能にしながら、クッキーを送信しない静的なリソースへの要求を送信します。これにより、輸送コストを削減します。クッキーはdocument.cookieによって得ることができます。
加速2.CDN
- キャッシュ画像、ファイル、CSSとスクリプトスクリプト。しかし、CDNより良いエンドを移動するよりも、PC上の促進効果。研究が見つかりました。後はCDNの相対的効果(CDNが「NO」効果をモバイルクライアントを加速しないためになぜ特定の記事を参照してください)悪化し、遅延のラストマイルが高いこと。
3.リバースプロキシ
- セブンロードバランシング(HTTPリクエスト均衡戦略を)提供することができ、および静的なリソースをキャッシュ提供することができ、リクエスト転送、ネットワーク攻撃を防ぎます。より人気のnginxがあります。
(2)アプリケーション・サーバーのパフォーマンスの最適化:
リクエストが静的インタフェースカードではなく、カードデータまたは動的、要求があまりにも多くを扱うMySQLのことを示す場合は、ローカルキャッシュと分散キャッシュサーバを使用することができます、あなたはまた、非同期動作モードに応答して、高い同時要求の場合をスピードアップすることができます以下のように、複数のアプリケーション・サーバーは、共通の外部サービスを構成する全体的な処理能力を向上させ、パフォーマンスを向上させるために、クラスタ化することができます。
1.分散キャッシュ(Webパフォーマンス最適化の第一法則:最適化のパフォーマンスへの優先使用のキャッシュ)
- 一般的に、読み出しおよび書き込みデータは、キャッシュ比率2に記憶されている:1以上であり、データは、高温であるべきです。
- 矛盾は、データキャッシュに検討する必要がある場合は、短期をもたらすかもしれない、またはキャッシュがリアルタイムで更新されている場合、パフォーマンスとリソースのオーバーヘッドをもたらす可能性があります。
- キャッシュが無効であると見なされる必要があるならば、多数の要求は、直接DBが雪崩サービスのパフォーマンスのをもたらす可能性がありますヒット。急激なサービスを高め、過剰な圧力によるデータの損失を避けるために、クラスタの展開の使用をキャッシュすることが可能です。
- 負荷に検討するホットデータのキャッシュを予熱。たとえば、シーズンのピークの前に、最初のホット・データの先読みキャッシュに保存されています。サービスのパフォーマンスのピークを改善するために。
- 悪意のある攻撃を防ぐために、頻繁にアクセスされたキャッシュにつながる、存在しないデータのクエリとなっているが、DBを打つことができない、キャッシュに存在することはできませんし、データも定期的に清掃することができます。メカニズムは識別し、悪質なリクエストを禁止する一方で。
- 分散キャッシュは分散化と管理を集中しなければなりません。互いに異なるインスタンス間の通信では、スケーラビリティとシステムの複雑さを低減することを確実にするために同型。
2.非同期(すべては後半後半にやる行われる必要があり、私は遅延ロードのように感じます)
クリッピングオブジェクトは、分散メッセージキューによって達成されます。技術とビジネスを通じて問題を解決するには。例えば、12306ラインアップ。
3.クラスタ
クラスタサービスの仮想化を使用すると現れです。より可用性の高い、高性能なサービスを提供しながら、一点の問題を回避するには。
4.コードの最適化
- それは集中的な計算である場合、マルチスレッド、スレッドの数は、CPUコアの数を超えてはなりません。IOが処理される場合、スレッドの数は= [タスク実行時間/(タスク実行時間-IO待ち時間)] * CPUコア数。また、当社は、ステートレスオブジェクトになるように設計より多くのローカルオブジェクトを使用するオブジェクトをする必要があり、ロックが適切に洗練されました。
- 資源の再利用。例えば、このような用途接続プールのような単一の実施の形態では、。
- 不合理なフルGCを避ける最大化するための合理的なセットJVMパラメータ。
5.ストレージのパフォーマンスの最適化
インデックスは、リレーショナルデータベースは、B +ツリーを使用して実装しました。NoSQLのデータベースの多くは、LSMツリーを格納するために使用されます。LSMは、メモリが下に置くことができないまで、メモリの中で最も新しい切除チェックデータを保持して、LSMディスクの下のツリーにマージを進めます。より多くのように、書き込み動作のために、読み取り操作はシーンより最近に書き込まれたデータを照会することで、パフォーマンスが非常に高いB +ツリーよりも、マップを使用してHDFSは、大量のデータストレージと分析のための結合減らします。それは自動的に同時アクセスし、冗長性、高い信頼性を実行することができます。RAID機能を実装することと同じです。
データベース層の(3)最適化:
- データベース層は、そのため、我々はサービス層を通じてキューとバッファを紹介するので、「キャパシティ内の」専用アクセス要求最も脆弱な層、一般的には、アプリケーションの設計、上流の傍受オフを要求する必要がある、データベース層のクマであります心の最下位レベルのデータベースの平和。しかし、要求サージ場合は、クエリの大多数は、MySQLの圧力に残っていますは、MySQLのボトルネックを解決する方法を見つけるために、この時間は、インデックス、キャッシュ、SQLのパフォーマンスの最適化ツールを使用するために利用できるこの時間は、NoSQLのデータベースは、データ・モデルを最適化するために使用することができ、ストレージ構造。詳細は私のポストは[トピック] MySQLの最適化を心配することができる参照のために、12の合計は、終了しました。
サイトのパフォーマンスメトリックを測定する(4)(応答時間は、システム設計がターゲットを達成するかどうかを決定するためにこれらの指標により、システムのパフォーマンスカウンタ、TPS重要です)
- 応答時間。
- 同時。正確に監視一切対応する一時は異なるビジネスモデルのために、存在しない場合、同時の数の異なる推定値を持っていることがあります。私たちのシステムは同時言葉のピーク数を推定し、毎秒同時要求の一日平均数* 3で比較的粗い計算は、そこにあります。しかし、それはまた、ケースバイケースを必要とします。
- スループット。より一般的QPS(毎秒クエリ)、HPS(秒あたりのHTTPリクエスト)とTPS(第2の処理あたりのトランザクション)です。
- パフォーマンスカウンタ。システム負荷、スレッド数、CPU、メモリ使用量を含みます。トップことができ、自由、猫の/ proc / cpuinfoのコマンドが表示されます。システム負荷は、現在CPUにより実行されるのを待っているスレッドのCPU /総数に実行されているスレッドの数として定義されます。そして、ときにその値が最大限に利用されているすべてのリソースを表す論理CPU最高の条件の数と同じです。しかし、他の人は最高の負荷は、論理CPUの0.7倍の数であるときと信じています。
(5)可用性:高可用性アプリケーション、サービス等、高可用性を監視するためのデータやサービスの高可用性、高可用性を含み、可用性に関しては、私は説明して、単一の章を開くことにしました
第二に、セキュリティ
インターネットはオープンで、誰でもどこからでもサイトにアクセスすることができます。サイトのセキュリティアーキテクチャは、重要なデータのサイトが盗まれていない保護、悪意のあるアクセスや攻撃からサイトを保護することです。
セキュリティの五行:機密性、完全性、可用性、制御性と監査能力。
1、システムのセキュリティアーキテクチャ
1)セキュリティサービスは、認証サービスを含むネットワークが提供するコンピュータのセキュリティ対策、アクセス制御、データの機密性サービス、データの整合性と否認防止サービスです。
2)特定のセキュリティメカニズムは、フロー機構、経路制御機構と公証するための機構を充填する、暗号化、データの署名方式、アクセス制御機構、データ完全性機構、認証交換機構を備え、セキュリティメカニズムとサービスを実装するために使用されます。
3)任意の特定のサービスやアドホックのためのユニバーサルセキュリティではないが、信頼できる機能に分け、セキュリティ管理、セキュリティタグに属する、イベント検出、セキュリティ、監査証跡とセキュリティが回復しました。
2、保護の程度
1)利用者の自己保護レベル
2)保護システム監査レベル
3)セキュリティトークンの保護レベル
4)構造化保護レベル
5)アクセス検証保護レベル
サイトのセキュリティアーキテクチャを測定することは、既存および潜在的な攻撃や盗難の手段のための標準であります
信頼性の対処戦略があります。
第三に、の可用性
システムアーキテクチャは、高可用性の目標を達成するために設計されたかどうかの尺度は、任意の一つまたは複数のサーバーでシステムがダウンしているという前提で、予期せぬ問題のすべての種類が発生したとき、システム全体としてはまだ使用可能であるかどうか。
一般的には3、冗長性、クラスタリング、分散を意味します。
お互いが、いずれかのサーバは、全体的な適用には影響しません、複数のサーバ上で、これを達成するための通常の手段をデータ・ストレージのバックアップを複数のサーバ上のサービスを提供しながら、主な方法は、冗長な高可用性、アプリケーションの配備されています負荷分散装置を介してクラスタの複数のサーバ。
第四に、スケーラビリティ
スケーラビリティ(拡張性)は、既存のシステムへの持続的なシステムの機能を拡張または強化する最小限の能力との衝突を指します。システムインフラストラクチャを必要としている安定したパフォーマンスが頻繁に変更され、新機能、構造やコードを追加するためのシステムは、既存システムの変更を必要としないアプリケーションで、間の結合にあまり依存しません。これは何も言いませんでした。スケーラビリティは良い前アーキテクチャ設計に依存します。合理的な抽象サービスロジックのように分布の垂直/水平カッティング。
mainメソッドスケーラブルなアーキテクチャは、イベント駆動型アーキテクチャと分散サービスです。
典型的には、メッセージ処理ロジックを生成し、離間し、この方法で実装イベント駆動型メッセージキューを利用します。
Serverサービスが吸引され、再利用可能なビジネス・サービスは、分散サービスフレームワークによって呼び出され、分離しました。既存の製品に影響を与えることなく再利用可能なサービスを呼び出すことにより、独自のビジネス・ロジックを達成するために使用することができる新製品を追加します。
AKFスケーラブル立方(スケーラビリティキューブ) - この点に関して、「スケーラブルアート、」本は前方よりスケーラブルなシステムモデルを置きます。3つの座標軸に沿ってキューブが設定されている:X、Y、Z。
- X軸の拡大 - 注意とサービスデータのレベルクローニング、である、前述の「問題を解決するためのプラスのマシン。」
- そのようなデータ・タイプ、取引執行分割の種類としてアプリケーションに責任の懸念の分割 - Yは、膨張、軸
- Z軸膨張 - 注意およびサービスデータの優先順位付け、そのような地理的な分割点として
完全に伸長した状態であることなく、次の図であって、前記原点によって表される全体の拡張モデル、。
第五に、スケーラビリティ
できるだけ均質なサービス。DB、できるだけキャッシュ分散設計、事前に優れた拡張計画を検討します。これは、HBaseのというように、memcachedを、より良いのNoSQLの主流のサポートの水平方向のスケーリングのためにも使用することができます。
(1)横方向に分離:異なるサービスモジュールの分離は、システムのスケーラビリティのために、展開しました、
(2)縦の分離:システムのスケーラビリティのためのビジネスプロセスの様々な部分の展開、。
出典:Javaの高度なアーキテクチャ