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 クラウドネイティブ プログレッシブデリバリー
>>: クラウド コンピューティングが市場と参照データ管理の最適化の鍵となる理由
VMware vSphere 仮想環境では、特定の IP が配置されている仮想マシンと ESXi ホ...
11 月 23 日、Hostus はいくつかの新しいデータ センターで最初の VPS プロモーション...
6G テクノロジーの分野では、クラウドとエッジ コンピューティングが重要な役割を果たし、デジタル世界...
Baidu は新しい検索システムを立ち上げようとしています。皆さんご存知だと思いますが、著者はこれは...
最近、大手サプライチェーン技術プラットフォームである盛業ホールディングスグループ株式会社(以下、「盛...
digital-vm は、今から今月末まで、四半期ごとの支払いに限り、8 つのデータセンターすべて ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスインターネットは急速に発...
サイトには毎日スナップショットがありますが、ランキングはありません。これは多くのウェブマスターを困惑...
国内の共同購入サイトの数は2010年8月以降1,000サイトを突破した。非合理的な発展により、201...
IT トレーニング業界では、ビッグデータやクラウド コンピューティング トレーニングという用語が常に...
2010 年 4 月 13 日、Baidu Tieba Webmaster Club で、中国の有名...
気がつけば、私は SEO 最適化業界を 4 年間探求し、研究してきました。これから、この 4 年間の...
buyvm の 4 番目のデータ センターは、米国南東海岸のマイアミにあり、オンラインになっています...
Zorocloudはこれまで、CN2 GIA/AS4809、CUII/AS9929、AS4837など...
ゲームライセンス申請とPokomo GOはここ数週間、業界で最もホットな話題となり、ゲームコミュニテ...