「Linux ハイパフォーマンス ネットワーク プログラミングに関する 10 の話」は、数か月にわたって書かれています。10 件の技術ブログが書かれています。過去数年間の私の仕事を振り返るために、要約を書こうと思いました。 Goose Factory での 2 つの経験が合計されます。もう 8 年近くになります。ネジの作業に多くの時間を費やしていますが、参加、最適化、開発に至るまで、高性能アーキテクチャの進化における経験から多くのことを学びました。アーキテクチャの最終設計。
1. 事前に設計するか、それともビジネスを進化させるか?
誰もがプロジェクトの 0 から 1 へのプロセスを経験したことがあると思います。質問したいのですが、多くの場合、アーキテクチャはビジネスとともに進化しますか、それとも事前に設計されていますか?
関連する建築関連の本を読んだことがある人もいるかもしれませんが、これらの本のほとんどは、建築はビジネスの発展とともに進化すると信じています。しかし、建築は事前に設計されるべきだと主張する建築家も多い。ここでは、ひとまず結論を出すのではなく、私自身の経験を通してアーキテクチャの進化を探っていきたいと思います。
2. PHP から C へ
2.1 シンプルな PHP アーキテクチャ
PHP はシンプルで便利な言語として、大きな工場のすべての部門に存在するはずです。当時、私は仕事で C 言語と PHP の 2 つの言語を使用していました。PHP を使用した関数の開発は非常に速く、成熟したライブラリが多数あるため、古典的な nginx
php-fpm memcache アーキテクチャを形成します。
php アーキテクチャ
現在のアーキテクチャでは、1 台の 8c8g マシンが 1000qps をサポートすることは大きな問題ではないため、ビジネスにとっては現在 1wqps 未満ですが、明らかに、さらに数台のマシンがサポートできることは明らかです。キャッシュ層の設計に関しては、redisがまだ十分に発達していなかった当時はmemcacheが主流のキャッシュコンポーネントであり、ビジネス的にもPHPとドッキングするにもシンプルなものでした。しかし、ビジネスの発展に伴い、その時点の計算曲線によれば 1 年以内に 5wqps に達する可能性があります。nginx
php-fpm memcache アーキテクチャを使用するのが妥当でしょうか? 議論の結果、目標は、そこで、サーバー側で高性能の発見の旅を始めました。
2.2 マルチプロセスフレームワーク
当時、高性能なサーバーサイドフレームワークを実現するために、PHPのプラグイン機能を利用してサーバー機能をスクリプト言語に統合するという解決策が検討されました。このアプローチにより、高いパフォーマンスという目標がある程度達成されます。たとえば、現在では PHP の swoole はこのメソッドの発展結果です。
php-サーバー
ただし、ここで解決しなければならない問題がいくつかあります:
- PHP 拡張機能の使用シナリオをよく理解し、落とし穴を避けてください
- PHP 自体の使用におけるメモリ リークの問題
- 問題発生時のトラブルシューティングのコスト。たとえば、問題が発生すると、PHP のソース コードを理解する必要がある場合がありますが、数十万行のコードに直面すると、このコストは非常に高くなります。
- PHP は使い方が簡単です。これは実際に比較的当てはまります。Docker の台頭により、スタンドアロンの時代は必然的に過ぎます。PHP エコシステムはそれをサポートできますか? #…
SPP フレームワーク アーキテクチャ
- プロキシ プロセスは handle_init を使用して初期化を実行し、handle_route は実行用に指定されたワーカー処理プロセスに転送され、handle_input はリクエストの受信パケットを処理します。 ワーカー プロセスは handle_init を使用して初期化を実行し、handle_process がパッケージとビジネス ロジックを処理して
- を返します。
2.3 コルーチンの紹介
C を使用することでパフォーマンス要件は満たされていますが、Redis へのアクセスなど、開発効率に多くの問題があります。サービスの高いパフォーマンスを維持するために、コード ロジックは次のような非同期コールバックを使用します。
... 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. クラウド ネイティブ
ビジネスは発展を続け、エンジニアは常に最先端のコンセプトを追い求めています。近年人気のテクノロジーポイントであるクラウドネイティブは当然無視されません。しかし、クラウドネイティブに入る前に、チームがDevOps 開発コンセプトを持っている場合、これは、アーキテクチャ設計とフレームワークの選択に関する技術的負債を返済する必要がある、骨の折れるプロセスになります。3.1 DevOps コンセプトの実装
私は以前、アーキテクチャを行う際に高いパフォーマンスを考慮していました。アーキテクチャを理解するにつれて、高いパフォーマンスはアーキテクチャ設計のほんの一部にすぎないことがわかりました。良いアーキテクチャを構築したい場合は、より機敏なプロセスと、サービス ガバナンスの概念、具体的な考慮事項、次のように要約されます:
- 継続的インテグレーション: 開発者は 1 日に複数回コードを共有リポジトリに統合します。コードに対するすべての分離された変更はすぐにテストされ、統合の問題を検出して防止します
- 継続的デリバリー: 継続的デリバリー (CD) により、CI リポジトリでテストされたコードの各バージョンがいつでもリリースできるようになります
- 継続的デプロイメント: これには、グレースケール デプロイメント、Blue-Green リリースなどが含まれます。目的は、迅速に反復することです。比較的完全な統合テストの後、グレースケール検証を実行できます。
- サービスディスカバリ: サービスをマイクロサービスに変換し、サービス間の呼び出しを簡素化します
- RPC フレームワーク: 高性能を追求するサーバー フレームワークは、電流制限やサーキット ブレーカーなどの基本コンポーネントのサポートも考慮する必要があります。 監視システム: Promethues、OpenTracing、その他の機能を統合して、アジャイル開発プロセスにおけるオンラインの問題を迅速に発見します
- コンテナ化: 環境を統一し、クラウドネイティブのシナリオを事前に検討するには、開発プロセスでコンテナ化が不可欠です
- #…
この時点で、シンプルな高性能サーバーがアーキテクチャの目標になっていることがわかります。そのため、DevOps コンセプトを適切に実装するには、アーキテクチャを再調査して設計する必要があります。
3.2 マルチスレッド
DevOps に基づいて、上記の C サーバー フレームワークと組み合わせると、マルチプロセスではアーキテクチャのニーズを満たせなくなることがわかりました。その理由は次のとおりです:
複数のプロセスは、Docker コンテナの単一プロセスの概念と一致しません
- 作業プロセスの負荷が不均一である場合、マルチコアを有効に活用する方法
- 監視システムとの効果的な連携
- ビジネス構成が繰り返し読み込まれるため、構成センターを再適応する必要がある
- ステートフル サービスを提供するために複数のプロセスを使用するのはあまり合理的ではありません #…
- ビジネスも 100 万 QPS に成長しました。サービス管理とサービス コールのコストを改善するには、別のアーキテクチャを検討する必要があります:
gRPC
gRPC はマルチスレッド RPC サーバーです。成熟したエコシステム、さまざまなミドルウェア、複数言語のサポートなどを備えています。0 から 1 へのビジネス開発には良い選択ですが、ビジネスの移行には課題に直面していますたとえば、独自のミドルウェア アダプテーション サービス ディスカバリ、構成センターなどの開発、カスタム エンコーディングおよびデコーディングに応じたプロトコルの変換、コルーチンの結合方法など。社内のコンポーネントの RPC
(2)tRPCを使用する
https://trpc.group/zh/docs/what-is-trpc/archtecture_design/
サーバーの基本フレームワーク:
新しいアーキテクチャ
3.3、k8s に向けて
新しいテクノロジーを追求し、次のトレンドを待つだけでよいように思えますか? 実際、現時点ではさらに多くの課題があります。クラウドの利便性と、移行サービス アーキテクチャの無秩序な拡大により、ビジネス サービスと論理レベルはますます複雑になり、同時にサービスが依存する下流リンクはますます長くなります。私たちのフレームワークはリンク追跡をサポートしていますが、リンクが長くなると、サービスの制御性と安定性が低下します。多くの人員が日々の業務をサポートしています。
###何をするか?…###ビジネス ロジックをマージしてアーキテクチャを簡素化する必要がありますか? ここでの問題は、ビジネス ロジックが複雑な場合、サイクルに時間がかかることが多く、コストが比較的高く、メリットがあまり大きくないことです
新しいアーキテクチャを再開発するのか、朽ち果てたものはそのままにするのか、それとも廃棄し、新しいアーキテクチャを使って次の開発に適応するのか。
以上がLinux ハイパフォーマンス ネットワーク プログラミングに関する 10 のディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

深度学习的概念源于人工神经网络的研究,含有多个隐藏层的多层感知器是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示,以表征数据的类别或特征。它能够发现数据的分布式特征表示。深度学习是机器学习的一种,而机器学习是实现人工智能的必经之路。那么,各种深度学习的系统架构之间有哪些差别呢?1.全连接网络(FCN)完全连接网络(FCN)由一系列完全连接的层组成,每个层中的每个神经元都连接到另一层中的每个神经元。其主要优点是“结构不可知”,即不需要对输入做出特殊的假设。虽然这种结构不可知使得完

前段时间,一条指出谷歌大脑团队论文《AttentionIsAllYouNeed》中Transformer构架图与代码不一致的推文引发了大量的讨论。对于Sebastian的这一发现,有人认为属于无心之过,但同时也会令人感到奇怪。毕竟,考虑到Transformer论文的流行程度,这个不一致问题早就应该被提及1000次。SebastianRaschka在回答网友评论时说,「最最原始」的代码确实与架构图一致,但2017年提交的代码版本进行了修改,但同时没有更新架构图。这也是造成「不一致」讨论的根本原因。

面向视觉任务(如图像分类)的深度学习模型,通常用来自单一视觉域(如自然图像或计算机生成的图像)的数据进行端到端的训练。一般情况下,一个为多个领域完成视觉任务的应用程序需要为每个单独的领域建立多个模型,分别独立训练,不同领域之间不共享数据,在推理时,每个模型将处理特定领域的输入数据。即使是面向不同领域,这些模型之间的早期层的有些特征都是相似的,所以,对这些模型进行联合训练的效率更高。这能减少延迟和功耗,降低存储每个模型参数的内存成本,这种方法被称为多领域学习(MDL)。此外,MDL模型也可以优于单

这是一个AI赋能的时代,而机器学习则是实现AI的一种重要技术手段。那么,是否存在一个通用的通用的机器学习系统架构呢?在老码农的认知范围内,Anything is nothing,对系统架构而言尤其如此。但是,如果适用于大多数机器学习驱动的系统或用例,构建一个可扩展的、可靠的机器学习系统架构还是可能的。从机器学习生命周期的角度来看,这个所谓的通用架构涵盖了关键的机器学习阶段,从开发机器学习模型,到部署训练系统和服务系统到生产环境。我们可以尝试从10个要素的维度来描述这样的一个机器学习系统架构。1.

对于下一代集中式电子电器架构而言,采用central+zonal 中央计算单元与区域控制器布局已经成为各主机厂或者tier1玩家的必争选项,关于中央计算单元的架构方式,有三种方式:分离SOC、硬件隔离、软件虚拟化。集中式中央计算单元将整合自动驾驶,智能座舱和车辆控制三大域的核心业务功能,标准化的区域控制器主要有三个职责:电力分配、数据服务、区域网关。因此,中央计算单元将会集成一个高吞吐量的以太网交换机。随着整车集成化的程度越来越高,越来越多ECU的功能将会慢慢的被吸收到区域控制器当中。而平台化

eslint 使用eslint的生态链来规范开发者对js/ts基本语法的规范。防止团队的成员乱写. 这里主要使用到的eslint的包有以下几个: 使用的以下语句来按照依赖: 接下来需要对eslint的

人工智能(AI)已经改变了许多行业的游戏规则,使企业能够提高效率、决策制定和客户体验。随着人工智能的不断发展和变得越来越复杂,企业投资于合适的基础设施来支持其开发和部署至关重要。该基础设施的一个关键方面是IT和数据科学团队之间的协作,因为两者在确保人工智能计划的成功方面都发挥着关键作用。人工智能的快速发展导致对计算能力、存储和网络能力的需求不断增加。这种需求给传统IT基础架构带来了压力,而传统IT基础架构并非旨在处理AI所需的复杂和资源密集型工作负载。因此,企业现在正在寻求构建能够支持AI工作负

本文给大家介绍如何通过修改Nginx源码实现基于端口号的 Nginx worker进程隔离方案。看看到底怎么修改Nginx源码,还有Nginx事件循环、Nginx 进程模型、fork资源共享相关的知识。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









