スパイクサーバーの最適化を行きます

構造調整

古いアーキテクチャ
の新しい構造

予備

クッキー、セッション

  1. クッキーとセッションの違い

  2. クッキーとセッションリンク

  3. クロムEtherealのビュー// TODO

  4. 通常のシーンのログインセッションクッキーの下では、フローと組み合わせて使用

対称暗号化と非対称暗号化

付録2

  • 対称暗号化
  • AES、RSA次のような非対称暗号化、
  • AES //参照aes.NewCipher(キー)関数アノテーションの使用
    16,24,32ビット列なので、対応するAES-128、AES-192、 AES-256 暗号化方式

base64で//付録3

Q:関数の始まりbase64で
A:

  1. 実際には、本来の意図をコードするBASE64は、電子メールを直接満たすために非ASCII文字を指定することはできません使用することでした。
  2. すべてのバイナリファイルは、そのためのテキスト編集ソフトを使用して、印刷可能なテキストエンコーディングに変換することができ、およびデータストリームに簡単な暗号化されている。しかし、他の重要な意義があります。

Q:なぜ使用base64エンコード、需要シナリオ?
A:2つのシナリオがありますすることができません送信バイナリ

  1. 歴史的な理由電子メールの場合
  2. プレーンテキストプロトコルは、バイナリを送信することができない、base64エンコーディングを使用することができます。プレーンテキスト伝送プロトコルので、部分的に制御文字処理としてバイナリで起こり得ます。

サーバーの最適化のポイント

第10章クッキーの検証(単一ノード)を達成

  • 改善されたポイントの
    セッションアウトブレーク(代替セッションクッキー検証の実装)
  • アイデアは
    :ユーザーは、クッキーの処理方法処理されたキー情報を析出、セッションを削除した
    秘密鍵暗号を使用したuid:STEP1公開鍵暗号を。// 16ビットの秘密鍵暗号化結果128。
    。STEP2 base64でエンコード:// HTTPはバイナリデータに保存することができないクッキーは唯一ascll文字を保存することができますので。
  • 関連するコード
1. user_controller.go 
登录接口的后端实现。本来登录成功后往只cookie写入了uid字段,为了防止uid被篡改,往cookie中写入了一个验证uid是否被篡改的sign字段。
2. auth.go
验证用户是否登录的中间件。验证uid是否存在。代码不变。

第11章のパフォーマンスの最適化を実現するために、認証サーバを分散します

  • アーキテクチャを分散
    機の過程で展開原則から、代わりに別のプロセスで複数のマシンに展開。
    特権ベリファイヤ(水平展開)+コントロールの数(レベル拡張)Webサーバ+ + + MySQLのメッセージキュー:スプリット設定後

  • アクセス権の検証:使用インターセプタを達成するために
  1. インターセプタ(伝達関数)付録4 //達成する//行くDecoratorパターン
    機能:クッキーにユーザー情報を確認する(改ざんされていない)本物です。
    アイデア:uidと符号の復号結果によっては、改ざんかどうかを確認するために、クッキーのマッチングを検証します。
    コード:filter.go(ミアンパッケージ)+ validate.go 单独部署验证代码从代码中提取处理单独部署
    拡張:のOAuthプロトコル
  • Q:なぜ、私たちはここに必要がある一貫性ハッシュアルゴリズム
    A:メインのアプリケーションシナリオ一貫したハッシュアルゴリズムは、分散ストレージ、分散キャッシュ、ロード・バランシングです。ここでは、この種のアプリケーションキャッシュ我々はRedisのを使用していないことに注意を分散属しますが、メモリキャッシュと、各マシンが異なるユーザ情報キャッシュを格納します。
    データストレージ要件:各マシン(プロセス)と格納されたUID要求時間。例UID = 1,2,3キャッシュ機1は、UID = 4,5,6バッファ2機で、次いでマシンは、キャッシュ・マシン上(ネットワーク内の)データを取得するために、2 1 = UIDを要求する1

  • 一貫性ハッシュアルゴリズム//付録5
    Q:一貫性のハッシュアルゴリズムの主要な役割
    A:一貫したハッシングは、スケーラブルなノードの問題を解決することです。
  1. ノードの追加および削除は、アバランシェキャッシュ(同時にキャッシュ同時故障の多数)を生成する通常のハッシュアルゴリズム。
  2. ノードと隣接する古いノードの追加と削除の間の領域に縮小、キャッシュミスの場合、アルゴリズムの整合性ハッシュ、。
  • ハッシュアルゴリズムのコードは一貫性/ / TODOを達成するための
    キーポイントを:
  1. IP =ローカルIPは、ユニットがキャッシュに読み込まれます。それ以外の場合はIP!=ローカルIP、その後、マシンがデータを取得するために別のマシンへのプロキシとして動作します。(ネットワーク伝送)
  2. キー構造
//创建结构体保存一致性hash信息
type Consistent struct {
    //hash环,key为哈希值,值存放节点的信息 // TODO k: 请求key或节点的hash值  v: 真实节点或虚拟节点信息(如果有2个真实节点,每个节点20个虚拟节点,那么一共有20个v需要存储,环上其他位置并不需要存放数据)
    circle map[uint32]string
    //已经排序的节点hash切片 // TODO 排好序的虚拟节点hash值,40个元素,对应2个v。
    sortedHashes units
    //虚拟节点个数,用来增加hash的平衡性
    VirtualNode int
    //map 读写锁
    sync.RWMutex
}
  • ハッシュアルゴリズムのアプリケーションでValidate.goの一貫性
//设置集群地址,最好内网IP
var hostArray = []string{"192.168.0.1", "192.168.0.2"}
var localHost = "192.168.0.1"

// 创建Consistent结构体
hashConsistent = common.NewConsistent()
// 添加服务器节点
for _, v := range hostArray {
    hashConsistent.Add(v)
}

// 作为缓存的结构体
type AccessControl struct {
    //用来存放用户想要存放的信息
    sourcesArray map[int]interface{}
    sync.RWMutex
}
  • 一貫性のハッシュアルゴリズムを使用してプロセスを使用します
  1. 異なるクラウドECSのロードバランスサーバーへのSLBの責任アリ雲は
    、要求を処理するために、ECSのランダムな選択です。

第12章サーバーのパフォーマンス最適化ソリューションの売られ過ぎ&紹介メッセージキュー

  • WRK
    WRKと出力パラメータ

  • 変更fronted/web/controllers/product_controller.GetOrder方法
    データの元のメソッドのは大きな圧力にアクセスする、あなたが作成するたび順序は、データベースにアクセスするために複数回呼び出します。
    新しい方法:

  • RabbitMQの消費モードの設定
  1. フロー制御によるメッセージ:メッセージのみ消費者に送信されるたび。設定項目:channel.Qos
  2. 確認モード:channel.Consume(AUTOACK:偽)
  • 関連rabbimqコード実装
    product_controller.go:次のメッセージGetOrder生産に単一のインターフェイス()(メッセージ構造のための2つのフィールドを有する:[商品のuserId +)を
    consumer.go:メッセージコンシューマ、フロー制御(1がメッセージを取る)、手動受信確認あなたが削除するとメッセージ(msg.Ack(false)を呼び出して、消費者の成功は、RabbitMQのメッセージ// TODO消費が失敗に対処する方法である必要があります削除)

  • 現在のコードで問題
    のトランザクションなし(数量マイナス1+注文を生成します)

参照

  1. 対称暗号化、非対称暗号化、RSA(概要)
  2. 対称暗号化と非対称暗号化バインディングの例:HTTPS
  3. なぜ使用Base64でエンコードの原理とその実現
  4. あなたはデコレータ自然既存の機能をラップし、先頭またはの最後に、独自のカスタム機能を追加することができます
    拡張:デコレータは絶対にRESTのAPIの保護に対処するための正しい方法はありませんが、私はあなたがのOAuth2 JWTを使用するか、この目標を達成することをお勧めします!OAuth2.0プロトコル
    の拡張機能:次のようにオリジナルのGoウェブミドルウェアフレームワークが実装されている参照
  5. インタビューエッセンシャル:一貫性のハッシュアルゴリズムとは何ですか?
    拡張:RedisのとMySQLは、二重書き込み整合性プログラムの決意

おすすめ

転載: www.cnblogs.com/yudidi/p/12518529.html