1. Nettyとは何ですか?それは何ができるのでしょうか?
2. 分散サービスフレームワークを設計する1 アーキテクチャ 2 リモートコールプロセス
上記のプロセスはメソッド呼び出し元に対して透過的であり、すべてがローカル呼び出しのように見えます。 3 リモートコールクライアント図 重要な概念: RPC トリプレット <ID、リクエスト、レスポンス>。 PS: netty4.x のスレッド モデルの場合、グローバル Map の代わりに IO Thread(worker) —> Map<InvokeId, Future> を使用すると、スレッドの競合をより適切に回避できます。 4. リモートコールサーバーの図 5 リモートコールトランスポート層図 6 トランスポート層プロトコルスタックの設計 プロトコル ヘッダー 合意 1) メタデータ: <グループ、プロバイダー名、バージョン> 2) メソッド名 3)parameterTypes[]は本当に必要ですか? (a) 問題は何ですか?
(b) それは解決できるでしょうか?
(c) 引数[] (d) その他: traceId、appName… 3. いくつかの機能、優れた実践、そしてパフォーマンスの圧縮1 クライアントプロキシオブジェクトを作成する 1) プロキシは何をするのですか?
2) プロキシを作成する方法は何ですか?
3) 注意:
4) おすすめ (bytebuddy): 2 エレガントな同期/非同期呼び出し
3 ユニキャスト/マルチキャスト
4 一般化された呼び出し
5 シリアル化/デシリアル化 プロトコル ヘッダーはシリアライザー タイプをマークし、複数のタイプをサポートします。 6. スケーラビリティ Java SPI:
7 サービスレベルスレッドプール分離 電話を切りたいなら、まずあなたが切った方がいいですよ。私を落ち込ませないでください。 責任連鎖パターンの 8 つのインターセプター ここから始めるには拡張が多すぎます。 9 指標 10 リンクトラッキング オープントレーシング 11 登録センター 12 フロー制御(アプリケーションレベル/サービスレベル) サードパーティのフロー制御ミドルウェアに簡単に接続できるように拡張できる必要があります。 13 プロバイダーのスレッド プールがいっぱいになった場合はどうすればよいですか? 14 ソフトロードバランシング 1) 重み付きランダム(バイナリ検索、トラバーサルなし) 2) 加重ラウンドロビントレーニング(最大公約数) 3) 最小負荷 4) 一貫性のあるハッシュ(ステートフルサービスシナリオ) 5) その他 注: 予熱ロジックが必要です。 15 クラスタのフォールトトレランス 1) 失敗を早くする 2) フェイルオーバー 非同期呼び出しをどのように処理しますか?
3) フェイルセーフ 4) フェイルバック 5) フォーク 6) その他 16 パフォーマンスを絞り出す方法(信頼するのではなく、テストする) 1) ASMは、サーバー側のリフレクション呼び出しを置き換えるためにFastMethodAccessorを記述します。 2) シリアル化/デシリアル化 IO スレッドを占有しないように、ビジネス スレッドでシリアル化/デシリアル化します。
効率的なシリアル化/デシリアル化フレームワークを選択します。
選択は最初のステップにすぎません。シリアル化フレームワークがうまく機能しない場合は、拡張して最適化します。
3) CPUにバインドされたIOスレッド 4) 同期ブロッキング呼び出しのクライアントがボトルネックになる可能性が高い、クライアント コルーチン:
5) Netty ネイティブトランスポートと PooledByteBufAllocator:
6) IO スレッドをできるだけ早く解放して、必要な処理を実行し、スレッドのコンテキスト切り替えを最小限に抑えます。 なぜNettyなのか?1 BIO 対 NIO 2 JavaネイティブNIO APIの導入から廃止まで 高い複雑性
安定性が悪く、深い穴が多い
NIOコード実装のいくつかの欠点 1) Selector.selectedKeys() は大量のゴミを生成します Netty は sun.nio.ch.SelectorImpl の実装を変更し、selectedKeys を格納するために HashSet の代わりに double 配列を使用しました。
Nio のコードはどこでも同期されています (直接バッファの割り当てや Selector.wakeup() など)。
2) fdToKeyマッピング
3) セレクタはLinuxプラットフォーム上のEpoll LTによって実装されています
4) ダイレクトバッファは実際にはGCによって管理されている
5. ネッティの素顔1 Nettyにおけるいくつかの重要な概念とその関係 イベントループ
ボス: mainReactor の役割、ワーカー: subReactor の役割
2 Netty4 スレッドモデル 3 チャンネルパイプライン 4 プーリングと再利用 プールバイトバッファアロケータ
リサイクラー
5 ネッティネイティブトランスポート Nio と比較すると、作成されるオブジェクトが少なくなり、GC の圧力も少なくなります。 Linux プラットフォーム向けに最適化されており、次のような特定の機能があります。
6 多重化の概要 選択/投票
エポール
7 エポルについてもう少し深く理解する LT 対 ET コンセプト:
読みやすい:
書き込めます:
図: 3つのepollメソッドの紹介 1) メインコード: linux-2.6.11.12/fs/eventpoll.c 2) int epoll_create(int サイズ) rb-tree (赤黒木) と ready-list (準備完了リンクリスト) を作成します。
3) int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
4) int epoll_wait(int epfd, struct epoll_event * イベント, int maxevents, int タイムアウト)
epoll データ構造 epoll_wait ワークフローの概要 比較コード: linux-2.6.11.12/fs/eventpoll.c: 1) epoll_waitはep_pollを呼び出す
2) ファイル記述子fdのイベントステータスが変化する
3) ep_poll_callbackがトリガーされる
4) ep_events_transfer関数を実行する
5) ep_send_events関数を実行する
Netty の 8 つのベスト プラクティス 1) ビジネススレッドプールの必要性
2) バッファウォーターマークの書き込み
3) MessageSizeEstimator を書き換えて、実際の最高値と最低値を反映させる
4) EventLoop#ioRatio の設定に注意してください (デフォルト 50)
5) アイドル リンク検出をスケジュールするのは誰ですか?
6) ctx.writeAndFlush または channel.writeAndFlush を使用しますか?
7) rangeCheck() を避けるために ByteBuf.readByte() をループする代わりに Bytebuf.forEachByte() を使用する 8) 不要なメモリコピーを避けるためにCompositeByteBufを使用する
9) int を読み取りたい場合は、Bytebuf.readBytes(buf, 0, 4) ではなく、Bytebuf.readInt() を使用してください。
10) 構成 UnpooledUnsafeNoCleanerDirectByteBuf は JDK の DirectByteBuf に代わるもので、Netty フレームワークが参照カウントに基づいてオフヒープ メモリを解放できるようにします。 io.netty.maxDirectMemory:
0: クリーナーを使用せず、このパラメータは Netty の最大直接メモリ サイズを直接制限します (JDK の直接メモリ サイズは独立しており、このパラメータによって制限されません)。 11) 最適な接続数
12) PooledBytebufを使用する場合は、-Dio.netty.leakDetection.levelパラメータの使用に注意してください。
13) Channel.attr() でオブジェクトをチャンネルにアタッチします
Netty ソースコードから学ぶ 9 つのコーディングのヒント 1) 巨大な物体があるシーン AtomicIntegerFieldUpdater --> AtomicInteger
2) FastThreadLocal、JDK実装よりも高速
3)IntObjectHashMap/LongObjectHashMap…
4) リサイクル可能な配列リスト
5) JCTツール
|
<<: flux2+kustomize+helm+github マルチクラスタ GitOps クラウドネイティブ プログレッシブデリバリー
>>: クラウド コンピューティングが市場と参照データ管理の最適化の鍵となる理由
毎年恒例の「双十一」が今年もやって来ます。タオバオが2009年に初めて「双十一」プロモーションを開催...
外部リンクの公開は面倒なものです。前回の記事「ロングテールはいかに追いかけるかがカギ」でも述べたよう...
11月5日、IBM中国はIBMのソフトウェアポートフォリオをクラウドネイティブに変換し、Red Ha...
多くの企業にとって、Software as a Service (SaaS) などのクラウド コンピ...
Baidu のアルゴリズムは日々変化しており、高品質の外部リンクを公開することは歴史的な問題となって...
1. マーケティングの背景とターゲット分析: 1. 背景:Weiboは企業ブランドの情報発信プラット...
馬克佳「深セン市人民検察院が発表したデータによると、2012年に130人以上の女性が騙され、その半数...
iniz はバレンタインデー前に VPS プロモーションを開始しました。iniz はまだ新製品を発表...
xovvは、米国L7クリーンアップと最大1.5Tbpsの防御を備えたサーバーを新たに立ち上げました。...
【はじめに】 買い手であっても売り手であっても、最も重要な点は、製品設計によってまず行動を起こせるか...
[[389821]]コンピューティング機能と分析機能をエッジに移行する企業が増えるにつれ、さまざまな...
6月19日に開催された第1回ServerlessDays Chinaカンファレンスで、Tencent...
クラウド コンピューティングの急速な成長は新しい現象ではありませんが、現在異なるのは、あらゆる業界の...
[[430075]]詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したH...
知っていましたか? (1)H1タグとH2タグは重要ではありません。0.01ポイントしか占めません。 ...