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 に取り組む人はますます少なくなっています。多くの SEO 実践者は、主にオ...
Profitserver は常に無制限トラフィックの VPS サービスに重点を置いてきました。コア ...
ウェブマスター業界に入ったばかりの友人は、ブログの重要性と目的についてあまり知らないかもしれません。...
miran.ru についてご紹介します。1999 年に設立され、ロシアのサンクトペテルブルクに拠点を...
Google Analytics、Adobe Sitecatalyst、Webtrends、Tenc...
3年前、私たちは期待に胸を膨らませていましたが、3年後には皆がそれは大失敗だと言いました。かつては中...
ベンダーは、自社のテクノロジーを購入して使用することがいかに重要であるかを熱心に伝えますが、そのテク...
最も速い米国の VPS はどれですか?最速の米国VPS(米国高速VPS、高速米国VPS)、中国のユー...
アメリカのサーバープロバイダーであるHostvenomは、今月で創業10周年を迎えました。主に米国シ...
タオバオの収益:1メートルみなさんこんにちは。Admin5インタビュールームへようこそ。今回は、Ta...
[[277321]]まず、Kafka がトピックを作成する方法から始めましょう。 kafka-top...
パンパン兄さんは1年以上、写真スタジオのオンラインマーケティングに携わっています。結婚式の写真業界の...
Kubernetes は主に API サーバーを通じて外部サービスを提供します。このようなシステムで...
2009 年 5 月 22 日、第 1 回中国クラウド コンピューティング カンファレンスが北京のチ...