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 クラウドネイティブ プログレッシブデリバリー
>>: クラウド コンピューティングが市場と参照データ管理の最適化の鍵となる理由
[51CTO.com からのオリジナル記事] 世界はデジタル時代に突入しており、調達分野も例外ではあ...
このタイトルを見たら、すぐに投稿者を批判したい衝動にかられる友人は多いと思います。その衝動に駆られる...
name.com は、どなたにも安価なドメイン名登録を提供しています。初回のみ、ドメイン名 1 件あ...
ウェブサイトの最適化を行う SEO 担当者にとって重要なのは、ウェブサイトの自然なトラフィックとウェ...
2001 年に設立された iwebfusion は現在、在庫一掃キャンペーンを実施しています。米国の...
[編集者注] この記事はSmashingMagazineから翻訳され、@DamnDigitalによっ...
[はじめに] Microsoft: Google に対し、「有料ランキング」の慣行をやめ、消費者が本...
業界関係者は、美団がパブリッククラウド戦略とビジネスを放棄し、社内サービス(つまり社内使用)に切り替...
3月15日の前夜、ライジングが最近発表したテストデータは、オンラインで医薬品を購入することのリスクを...
BOC Securitiesのプライベートクラウドプラットフォームが正式に運用を開始し、BOC Se...
centralhosts は、非常に昔ながらのワンマン IDC で、多くのビジネスを展開しています。...
LiveNet Sp. z oo傘下で2009年に設立されたポーランドの会社、SlaskDatace...
12月3日、国美オンラインモールのオンラインショッピングインターフェースに「国美オンライン」ブランド...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますマーケティ...
最近、IT コミュニティ (特に一部の政府部門) では、従来のテクノロジーを近代化し、新しい代替手段...