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 クラウドネイティブ プログレッシブデリバリー
>>: クラウド コンピューティングが市場と参照データ管理の最適化の鍵となる理由
SEOを学んでから1年近く実践・運用していますが、やっていることは同じです。クライアントのウェブサイ...
どの業界にもリーダーやロールモデルが存在します。Web構築業界にも業績の良い企業はありますが、その業...
Baidu と Accelerator が共同で Baidu Accelerator を立ち上げて以...
私のクライアントの 1 社は複数のサービスを提供していましたが、そのうちの 1 社は SEO に関す...
私のような草の根ウェブマスターの多くは、常に問題に悩まされてきました。それは、なぜ Baidu が自...
Cockpit は、サーバー全体を集中管理パネルに配置して、サーバーをかなりの範囲で制御できる優れた...
インターネットの普及に伴い、特定のブランド名をキーワードとして入力して、特定のブランドに関連する情報...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますこの記事の...
キーワードグローバルプランニングの目的: 1. より効率的なウェブサイトを構築する。 2. 検索エン...
[51CTO.comより引用] 近年、クラウドコンピューティング、人工知能、ブロックチェーンなどの新...
2025 年 6 月のある日、急成長中のバイオ医薬品会社の最高財務責任者 (CFO) が自動運転車に...
中国の商業市場では、ブランドが海外に進出すべきか、それとも市場に沈むべきかについて議論が尽きず、消費...
ウェブサイトのユーザーとの関係チェーンは、主にユーザーとユーザー、ユーザーとウェブサイトのコミュニケ...
Hostodo は特別価格で別の VPS をリリースしたので、価格が高騰する心配はありません。設立、...
今日の SEO は、外部リンクを掲載し、サイト構造を調整し、ランキングを向上させるだけのものではあり...