ホームページ >コンピューターのチュートリアル >コンピュータ知識 >Linux ハイパフォーマンス ネットワーク プログラミングに関する 10 のディスカッション
「Linux ハイパフォーマンス ネットワーク プログラミングに関する 10 の話」は、数か月にわたって書かれています。10 件の技術ブログが書かれています。過去数年間の私の仕事を振り返るために、要約を書こうと思いました。 Goose Factory での 2 つの経験が合計されます。もう 8 年近くになります。ネジの作業に多くの時間を費やしていますが、参加、最適化、開発に至るまで、高性能アーキテクチャの進化における経験から多くのことを学びました。アーキテクチャの最終設計。
誰もがプロジェクトの 0 から 1 へのプロセスを経験したことがあると思います。質問したいのですが、多くの場合、アーキテクチャはビジネスとともに進化しますか、それとも事前に設計されていますか?
関連する建築関連の本を読んだことがある人もいるかもしれませんが、これらの本のほとんどは、建築はビジネスの発展とともに進化すると信じています。しかし、建築は事前に設計されるべきだと主張する建築家も多い。ここでは、ひとまず結論を出すのではなく、私自身の経験を通してアーキテクチャの進化を探っていきたいと思います。
PHP はシンプルで便利な言語として、大きな工場のすべての部門に存在するはずです。当時、私は仕事で C 言語と PHP の 2 つの言語を使用していました。PHP を使用した関数の開発は非常に速く、成熟したライブラリが多数あるため、古典的な nginx
php-fpm memcache アーキテクチャを形成します。
php アーキテクチャ
現在のアーキテクチャでは、1 台の 8c8g マシンが 1000qps をサポートすることは大きな問題ではないため、ビジネスにとっては現在 1wqps 未満ですが、明らかに、さらに数台のマシンがサポートできることは明らかです。キャッシュ層の設計に関しては、redisがまだ十分に発達していなかった当時はmemcacheが主流のキャッシュコンポーネントであり、ビジネス的にもPHPとドッキングするにもシンプルなものでした。しかし、ビジネスの発展に伴い、その時点の計算曲線によれば 1 年以内に 5wqps に達する可能性があります。nginx
php-fpm memcache アーキテクチャを使用するのが妥当でしょうか? 議論の結果、目標は、そこで、サーバー側で高性能の発見の旅を始めました。
当時、高性能なサーバーサイドフレームワークを実現するために、PHPのプラグイン機能を利用してサーバー機能をスクリプト言語に統合するという解決策が検討されました。このアプローチにより、高いパフォーマンスという目標がある程度達成されます。たとえば、現在では PHP の swoole はこのメソッドの発展結果です。
php-サーバー
ただし、ここで解決しなければならない問題がいくつかあります:
SPP フレームワーク アーキテクチャ
SPP はマルチプロセス アーキテクチャであることがわかります。そのアーキテクチャは Nginx に似ており、プロキシ プロセスとワーカー プロセスに分かれています。2.3 コルーチンの紹介
... int ret = redis->GetString(k, getValueCallback) ...
GetValueCallbackはコールバック関数です。io操作が多い場合、ここでのコールバックは非常に面倒です。同様の同期メソッドでカプセル化しても非常に扱いが面倒です。その際、std:: future と std::async は導入されませんでした。
一方、10~20w レベルに達する可能性のある後続の QPS に基づいて、コルーチンはマルチ IO サービス処理のパフォーマンスにおいてもより多くの利点を持つため、すべての IO の場所を置き換えてコルーチン メソッドの変換を開始しました。ビジネス開発の場合、Coroutine 呼び出しを使用すると、コードは次のようになります:
... int ret = redis->GetString(k, value) ...
値は直接使用できる戻り値です。コードに io が含まれると、最下層は io をコルーチンの API に置き換え、ブロックされたすべての io 操作が同期プリミティブになり、コード構造が開発効率が大幅に向上しました(コルーチンの具体的な実装については、連載記事「Linux ハイパフォーマンスネットワークプログラミング 10 話 | コルーチン」を参照してください)。
コルーチン
アーキテクチャにはまだ多くの変更はありません。マルチプロセス コルーチン手法は数年間ビジネス開発をサポートしてきました。パフォーマンスの指数関数的な成長はありませんが、高性能の探索と降下においてより多くの経験を積んできました。
3.1 DevOps コンセプトの実装
この時点で、シンプルな高性能サーバーがアーキテクチャの目標になっていることがわかります。そのため、DevOps コンセプトを適切に実装するには、アーキテクチャを再調査して設計する必要があります。
3.2 マルチスレッド
複数のプロセスは、Docker コンテナの単一プロセスの概念と一致しません
gRPC
gRPC はマルチスレッド RPC サーバーです。成熟したエコシステム、さまざまなミドルウェア、複数言語のサポートなどを備えています。0 から 1 へのビジネス開発には良い選択ですが、ビジネスの移行には課題に直面していますたとえば、独自のミドルウェア アダプテーション サービス ディスカバリ、構成センターなどの開発、カスタム エンコーディングおよびデコーディングに応じたプロトコルの変換、コルーチンの結合方法など。社内のコンポーネントの RPC
とより適切に統合されます。
(2)tRPCを使用する
https://trpc.group/zh/docs/what-is-trpc/archtecture_design/
上記の検討と事業展開を踏まえ、今後の RPC の多様化シナリオに適応するため、高パフォーマンスをベースとした RPC サーバー フレームワークの統一を目指し、業務システムに適応した RPC セットを導入しましたサーバーの基本フレームワーク:
新しいアーキテクチャ
3.3、k8s に向けて
上記の選択と変換を経た後、k8s への移行中にサービスを段階的に接続できます。サービスはあまり多くの変換を行わずにそのプラットフォーム上で実行でき、接続されたプラットフォームも完成させることができます。新しいテクノロジーを追求し、次のトレンドを待つだけでよいように思えますか? 実際、現時点ではさらに多くの課題があります。クラウドの利便性と、移行サービス アーキテクチャの無秩序な拡大により、ビジネス サービスと論理レベルはますます複雑になり、同時にサービスが依存する下流リンクはますます長くなります。私たちのフレームワークはリンク追跡をサポートしていますが、リンクが長くなると、サービスの制御性と安定性が低下します。多くの人員が日々の業務をサポートしています。
###何をするか?…###ビジネス ロジックをマージしてアーキテクチャを簡素化する必要がありますか? ここでの問題は、ビジネス ロジックが複雑な場合、サイクルに時間がかかることが多く、コストが比較的高く、メリットがあまり大きくないことです
新しいアーキテクチャを再開発するのか、朽ち果てたものはそのままにするのか、それとも廃棄し、新しいアーキテクチャを使って次の開発に適応するのか。
以上がLinux ハイパフォーマンス ネットワーク プログラミングに関する 10 のディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。