Skip to content

Commit ebc7ef0

Browse files
github-actions[bot]AlliBalliBabaCopilotalexandre-daubois
authored
docs: update translations (#2176)
Translation updates for: performance.md . --------- Co-authored-by: AlliBalliBaba <45872305+AlliBalliBaba@users.noreply.github.com> Co-authored-by: Alliballibaba <alliballibaba@gmail.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: alexandre-daubois <2144837+alexandre-daubois@users.noreply.github.com>
1 parent 48a9c08 commit ebc7ef0

File tree

7 files changed

+509
-100
lines changed

7 files changed

+509
-100
lines changed

docs/cn/performance.md

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
## 线程和 Worker 数量
77

8-
默认情况下,FrankenPHP 启动的线程和 worker(在 worker 模式下)数量是可用 CPU 数量的 2 倍。
8+
默认情况下,FrankenPHP 启动的线程和 worker(在 worker 模式下)数量是可用 CPU 核心数的 2 倍。
99

1010
适当的值很大程度上取决于你的应用程序是如何编写的、它做什么以及你的硬件。
1111
我们强烈建议更改这些值。为了获得最佳的系统稳定性,建议 `num_threads` x `memory_limit` < `available_memory`
@@ -41,11 +41,11 @@
4141

4242
另外,[一些错误只在使用 musl 时发生](https://github.com/php/php-src/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3ABug+musl)
4343

44-
在生产环境中,我们建议使用链接到 glibc 的 FrankenPHP。
44+
在生产环境中,我们建议使用链接到 glibc 的 FrankenPHP,并使用适当的优化级别进行编译
4545

46-
这可以通过使用 Debian Docker 镜像(默认)、从我们的 [Releases](https://github.com/php/frankenphp/releases) 下载 -gnu 后缀二进制文件,或通过[从源代码编译 FrankenPHP](compile.md) 来实现。
46+
这可以通过使用 Debian Docker 镜像、使用[我们的维护者提供的 .deb、.rpm 或 .apk 包](https://pkgs.henderkes.com),或通过[从源代码编译 FrankenPHP](compile.md) 来实现。
4747

48-
或者,我们提供使用 [mimalloc 分配器](https://github.com/microsoft/mimalloc) 编译的静态 musl 二进制文件,这缓解了线程场景中的问题
48+
对于更精简或更安全的容器,你可能需要考虑使用[强化的 Debian 镜像](docker.md#hardening-images)而不是 Alpine
4949

5050
## Go 运行时配置
5151

@@ -89,6 +89,18 @@ php_server {
8989
```
9090

9191
这可以显著减少不必要的文件操作数量。
92+
上述配置的 worker 等效项为:
93+
94+
```caddyfile
95+
route {
96+
php_server { # 如果完全不需要文件服务器,请使用 "php" 而不是 "php_server"
97+
root /root/to/your/app
98+
worker /path/to/worker.php {
99+
match * # 将所有请求直接发送到 worker
100+
}
101+
}
102+
}
103+
```
92104

93105
另一种具有 0 个不必要文件系统操作的方法是改用 `php` 指令并按路径将
94106
文件与 PHP 分开。如果你的整个应用程序由一个入口文件提供服务,这种方法效果很好。
@@ -155,3 +167,28 @@ FrankenPHP 使用官方 PHP 解释器。
155167

156168
有关更多详细信息,请阅读[专门的 Symfony 文档条目](https://symfony.com/doc/current/performance.html)
157169
(即使你不使用 Symfony,大多数提示也很有用)。
170+
171+
## 拆分线程池
172+
173+
应用程序与慢速外部服务交互是很常见的,例如在高负载下往往不可靠或持续需要 10 秒以上才能响应的 API。
174+
在这种情况下,将线程池拆分以拥有专用的“慢速”池可能会很有益。这可以防止慢速端点消耗所有服务器资源/线程,并限制指向慢速端点的请求并发性,类似于连接池。
175+
176+
```caddyfile
177+
example.com {
178+
php_server {
179+
root /app/public # 你的应用程序根目录
180+
worker index.php {
181+
match /slow-endpoint/* # 所有路径为 /slow-endpoint/* 的请求都由这个线程池处理
182+
num 1 # 匹配 /slow-endpoint/* 的请求至少有 1 个线程
183+
max_threads 20 # 如果需要,允许最多 20 个线程处理匹配 /slow-endpoint/* 的请求
184+
}
185+
worker index.php {
186+
match * # 所有其他请求单独处理
187+
num 1 # 其他请求至少有 1 个线程,即使慢速端点开始挂起
188+
max_threads 20 # 如果需要,允许最多 20 个线程处理其他请求
189+
}
190+
}
191+
}
192+
```
193+
194+
通常,也建议通过使用消息队列等相关机制,异步处理非常慢的端点。

docs/fr/performance.md

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,26 @@ Cependant, il est possible d'améliorer considérablement les performances en ut
55

66
## Nombre de threads et de workers
77

8-
Par défaut, FrankenPHP démarre deux fois plus de threads et de workers (en mode worker) que le nombre de CPU disponibles.
8+
Par défaut, FrankenPHP démarre deux fois plus de threads et de workers (en mode worker) que le nombre de cœurs de CPU disponibles.
99

1010
Les valeurs appropriées dépendent fortement de la manière dont votre application est écrite, de ce qu'elle fait et de votre matériel.
11-
Nous recommandons vivement de modifier ces valeurs.
11+
Nous recommandons vivement de modifier ces valeurs. Pour une stabilité optimale du système, il est recommandé d'avoir `num_threads` x `memory_limit` < `available_memory`.
1212

13-
Pour trouver les bonnes valeurs, il est souhaitable d'effectuer des tests de charge simulant le trafic réel.
13+
Pour trouver les bonnes valeurs, il est préférable d'effectuer des tests de charge simulant le trafic réel.
1414
[k6](https://k6.io) et [Gatling](https://gatling.io) sont de bons outils pour cela.
1515

1616
Pour configurer le nombre de threads, utilisez l'option `num_threads` des directives `php_server` et `php`.
17-
Pour changer le nombre de travailleurs, utilisez l'option `num` de la section `worker` de la directive `frankenphp`.
17+
Pour changer le nombre de workers, utilisez l'option `num` de la section `worker` de la directive `frankenphp`.
1818

1919
### `max_threads`
2020

2121
Bien qu'il soit toujours préférable de savoir exactement à quoi ressemblera votre trafic, les applications réelles
22-
ont tendance à être plus imprévisibles. Le paramètre `max_threads` permet à FrankenPHP de créer automatiquement des threads supplémentaires au moment de l'exécution, jusqu'à la limite spécifiée.
22+
ont tendance à être plus imprévisibles. La [configuration](config.md#configuration-du-caddyfile) `max_threads` permet à FrankenPHP de créer automatiquement des threads supplémentaires au moment de l'exécution, jusqu'à la limite spécifiée.
2323
`max_threads` peut vous aider à déterminer le nombre de threads dont vous avez besoin pour gérer votre trafic et peut rendre le serveur plus résistant aux pics de latence.
2424
Si elle est fixée à `auto`, la limite sera estimée en fonction de la valeur de `memory_limit` dans votre `php.ini`. Si ce n'est pas possible,
2525
`auto` prendra par défaut 2x `num_threads`. Gardez à l'esprit que `auto` peut fortement sous-estimer le nombre de threads nécessaires.
2626
`max_threads` est similaire à [pm.max_children](https://www.php.net/manual/en/install.fpm.configuration.php#pm.max-children) de PHP FPM. La principale différence est que FrankenPHP utilise des threads au lieu de
27-
processus et les délègue automatiquement à différents scripts de travail et au `mode classique` selon les besoins.
27+
processus et les délègue automatiquement à différents scripts worker et au 'mode classique' selon les besoins.
2828

2929
## Mode worker
3030

@@ -34,18 +34,18 @@ vous devez créer un script worker et vous assurer que l'application n'a pas de
3434

3535
## Ne pas utiliser musl
3636

37-
Les binaires statiques que nous fournissons, ainsi que la variante Alpine Linux des images Docker officielles, utilisent [la bibliothèque musl](https://musl.libc.org).
37+
La variante Alpine Linux des images Docker officielles et les binaires par défaut que nous fournissons utilisent [la bibliothèque musl](https://musl.libc.org).
3838

39-
PHP est connu pour être [significativement plus lent](https://gitlab.alpinelinux.org/alpine/aports/-/issues/14381) lorsqu'il utilise cette bibliothèque C alternative au lieu de la bibliothèque GNU traditionnelle,
40-
surtout lorsqu'il est compilé en mode ZTS (_thread-safe_), ce qui est nécessaire pour FrankenPHP.
39+
PHP est connu pour être [plus lent](https://gitlab.alpinelinux.org/alpine/aports/-/issues/14381) lorsqu'il utilise cette bibliothèque C alternative au lieu de la bibliothèque GNU traditionnelle,
40+
surtout lorsqu'il est compilé en mode ZTS (_thread-safe_), ce qui est nécessaire pour FrankenPHP. La différence peut être significative dans un environnement fortement multithreadé.
4141

4242
En outre, [certains bogues ne se produisent que lors de l'utilisation de musl](https://github.com/php/php-src/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3ABug+musl).
4343

44-
Dans les environnements de production, nous recommandons fortement d'utiliser la glibc.
44+
Dans les environnements de production, nous recommandons d'utiliser FrankenPHP lié à glibc, compilé avec un niveau d'optimisation approprié.
4545

46-
Cela peut être réalisé en utilisant les images Docker Debian (par défaut) et [en compilant FrankenPHP à partir des sources](compile.md).
46+
Cela peut être réalisé en utilisant les images Docker Debian, en utilisant [les paquets .deb, .rpm ou .apk proposés par l'un de nos mainteneurs](https://pkgs.henderkes.com), ou en [compilant FrankenPHP à partir des sources](compile.md).
4747

48-
Alternativement, nous fournissons des binaires statiques compilés avec [l'allocateur mimalloc](https://github.com/microsoft/mimalloc), ce qui rend FrankenPHP+musl plus rapide (mais toujours plus lent que FrankenPHP+glibc).
48+
Pour des conteneurs plus légers ou plus sécurisés, vous pourriez envisager [une image Debian renforcée](docker.md#hardening-images) plutôt qu'Alpine.
4949

5050
## Configuration du runtime Go
5151

@@ -84,11 +84,23 @@ vous pouvez les désactiver en définissant explicitement `try_files` comme ceci
8484
```caddyfile
8585
php_server {
8686
try_files {path} index.php
87-
root /root/to/your/app # l'ajout explicite de la racine ici permet une meilleure mise en cache
87+
root /root/to/your/app # l'ajout explicite de la racine ici permet une meilleure mise en cache
8888
}
8989
```
9090

9191
Cela permet de réduire considérablement le nombre d'opérations inutiles sur les fichiers.
92+
Un équivalent worker de la configuration précédente serait :
93+
94+
```caddyfile
95+
route {
96+
php_server { # utilisez "php" au lieu de "php_server" si vous n'avez pas du tout besoin du serveur de fichiers
97+
root /root/to/your/app
98+
worker /path/to/worker.php {
99+
match * # envoie toutes les requêtes directement au worker
100+
}
101+
}
102+
}
103+
```
92104

93105
Une approche alternative avec 0 opérations inutiles sur le système de fichiers serait d'utiliser la directive `php`
94106
et de diviser les fichiers de PHP par chemin. Cette approche fonctionne bien si votre application entière est servie par un seul fichier d'entrée.
@@ -105,10 +117,10 @@ route {
105117
root /root/to/your/app
106118
}
107119
108-
# tout ce qui n'est pas dans /assets est géré par votre index ou votre fichier PHP worker
120+
# tout ce qui n'est pas dans /assets est géré par votre fichier PHP d'index ou worker
109121
rewrite index.php
110122
php {
111-
root /root/to/your/app # l'ajout explicite de la racine ici permet une meilleure mise en cache
123+
root /root/to/your/app # l'ajout explicite de la racine ici permet une meilleure mise en cache
112124
}
113125
}
114126
```
@@ -155,3 +167,32 @@ En particulier :
155167

156168
Pour plus de détails, lisez [l'entrée de la documentation dédiée de Symfony](https://symfony.com/doc/current/performance.html)
157169
(la plupart des conseils sont utiles même si vous n'utilisez pas Symfony).
170+
171+
## Division du pool de threads
172+
173+
Il est courant que les applications interagissent avec des services externes lents, comme une
174+
API qui a tendance à être peu fiable sous forte charge ou qui met constamment plus de 10 secondes à répondre.
175+
Dans de tels cas, il peut être bénéfique de diviser le pool de threads pour avoir des pools "lents" dédiés.
176+
Cela empêche les points d'accès lents de consommer toutes les ressources/threads du serveur et
177+
limite la concurrence des requêtes se dirigeant vers le point d'accès lent, à l'instar d'un
178+
pool de connexions.
179+
180+
```caddyfile
181+
example.com {
182+
php_server {
183+
root /app/public # la racine de votre application
184+
worker index.php {
185+
match /slow-endpoint/* # toutes les requêtes avec le chemin /slow-endpoint/* sont gérées par ce pool de threads
186+
num 1 # minimum 1 thread pour les requêtes correspondant à /slow-endpoint/*
187+
max_threads 20 # autorise jusqu'à 20 threads pour les requêtes correspondant à /slow-endpoint/*, si nécessaire
188+
}
189+
worker index.php {
190+
match * # toutes les autres requêtes sont gérées séparément
191+
num 1 # minimum 1 thread pour les autres requêtes, même si les points d'accès lents commencent à bloquer
192+
max_threads 20 # autorise jusqu'à 20 threads pour les autres requêtes, si nécessaire
193+
}
194+
}
195+
}
196+
```
197+
198+
De manière générale, il est également conseillé de gérer les points d'accès très lents de manière asynchrone, en utilisant des mécanismes pertinents tels que les files d'attente de messages.

docs/ja/performance.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ PHPは、従来のGNUライブラリの代わりにこの代替Cライブラリ
4343

4444
本番環境では、glibcにリンクされたFrankenPHPを使用することをお勧めします。
4545

46-
これは、Debian Dockerイメージ(デフォルト)を使用するか、[リリースページ](https://github.com/php/frankenphp/releases)から -gnu サフィックス付きバイナリをダウンロードするか、あるいは[FrankenPHPをソースからコンパイル](compile.md)することで実現できます。
46+
これは、Debian Dockerイメージを使用するか、[公式パッケージ (.deb, .rpm, .apk)](https://pkgs.henderkes.com) を使用するか、あるいは[FrankenPHPをソースからコンパイル](compile.md)することで実現できます。
4747

48-
または、[mimalloc allocator](https://github.com/microsoft/mimalloc)でコンパイルされた静的muslバイナリも提供しており、これによりスレッド環境での問題を軽減できます
48+
より軽量で安全なコンテナのためには、Alpineよりも[強化されたDebianイメージ](docker.md#hardening-images)を検討することをお勧めします
4949

5050
## Go Runtime設定
5151

@@ -89,6 +89,18 @@ php_server {
8989
```
9090

9191
これにより、不要なファイルの操作の回数を大幅に削減できます。
92+
上記の構成をワーカーモードに相当させると、次のようになります:
93+
94+
```caddyfile
95+
route {
96+
php_server { # file server が全く不要な場合は "php_server" の代わりに "php" を使用します
97+
root /root/to/your/app
98+
worker /path/to/worker.php {
99+
match * # すべてのリクエストを直接ワーカーに送信します
100+
}
101+
}
102+
}
103+
```
92104

93105
ファイルシステムへの不要な操作を完全にゼロにする代替アプローチとして、`php`ディレクティブを使用し、
94106
パスによってPHPファイルとそれ以外を分ける方法があります。アプリケーション全体が1つのエントリーファイルで提供される場合、この方法は有効です。
@@ -155,3 +167,29 @@ FrankenPHPは公式のPHPインタープリターを使用しています。
155167

156168
詳細については、[Symfonyの専用ドキュメントエントリ](https://symfony.com/doc/current/performance.html)をお読みください
157169
(Symfonyを使用していなくても、多くのヒントが役立ちます)。
170+
171+
## スレッドプールの分割
172+
173+
アプリケーションが、高負荷時に不安定になったり、常に10秒以上応答にかかるAPIのような遅い外部サービスと連携することはよくあります。
174+
このような場合、スレッドプールを分割して専用の「遅い」プールを持つことが有益です。
175+
これにより、遅いエンドポイントがすべてのサーバーリソース/スレッドを消費するのを防ぎ、コネクションプールと同様に、遅いエンドポイントへのリクエストの同時実行数を制限できます。
176+
177+
```caddyfile
178+
example.com {
179+
php_server {
180+
root /app/public # アプリケーションのルート
181+
worker index.php {
182+
match /slow-endpoint/* # パスが /slow-endpoint/* のすべてリクエストはこのスレッドプールによって処理されます
183+
num 1 # /slow-endpoint/* に一致するリクエストに対しては最低1スレッド
184+
max_threads 20 # 必要に応じて、/slow-endpoint/* に一致するリクエストに対して最大20スレッドまで許可します
185+
}
186+
worker index.php {
187+
match * # 他のすべてのリクエストは個別に処理されます
188+
num 1 # 遅いエンドポイントがハングし始めても、他のリクエストには最低1スレッド
189+
max_threads 20 # 必要に応じて、他のリクエストに対して最大20スレッドまで許可します
190+
}
191+
}
192+
}
193+
```
194+
195+
一般的に、メッセージキューなどの適切なメカニズムを使用して、非常に遅いエンドポイントを非同期的に処理することも推奨されます。

0 commit comments

Comments
 (0)