Một số giải pháp giải quyết vấn đề hiệu suất hệ thống đói với ZF
Zend Framework – Thực hiện phân tích và điểm chuẩn
Zend Framework propose des fonctionnalités et une puissance certaine en plus d’être modulaire et de disposer de la pérennité de sa société créatrice. Zend Framework cung cấp chức năng và một số quyền lực một ngoài việc mô-đun và có tính liên tục của xã hội sáng tạo của mình. Malheureusement, le framework a quelques soucis de performance qui apparaissent rapidement à l’oeil du développeur averti. Thật không may, khung có một số vấn đề hiệu năng xảy ra một cách nhanh chóng cảnh báo con mắt của nhà phát triển.
En affichant simplement la mémoire consommée sur une page générée à l’aide du ZF, nous constatons rapidement que cette consommation est assez exagérée. Đơn giản chỉ bằng cách hiển thị sử dụng bộ nhớ trên một trang web được tạo ra bằng cách sử dụng ZF, chúng tôi nhanh chóng nhận ra rằng mức tiêu thụ này là khá phóng đại. Les scores nous amènent rapidement aux alentours des 10 ou 15M. Điểm dẫn chúng tôi nhanh chóng lên khoảng 10 hoặc 15M. On peut alors imaginer ce qui se passerait si nous montions en charge. Một sau đó có thể tưởng tượng điều gì sẽ xảy ra nếu chúng ta đã đi qua.
Dans le cadre d’un projet nécessitant, justement, de supporter une haute charge, j’ai été amené à participer à l’évaluation des performances de Zend Framework . Là một phần của một dự án đòi hỏi phải chính xác để hỗ trợ cho một tải trọng cao, tôi đã dẫn đến tham gia đánh giá hiệu suất của Zend Framework.
Le but de cette évaluation n’était pas de déterminer si le framework était plus ou moins performant qu’un code PHP pur ou qu’un autre framework, comme CodeIgniter ou Kohana , car nous connaissons déjà la réponse à cette question. Mục đích của đánh giá này không phải để xác định khuôn khổ đã được nhiều hơn hoặc ít hiệu quả hơn một PHP tinh khiết hoặc khung khác như CodeIgniter hay Kohana, bởi vì chúng ta đã biết câu trả lời cho câu hỏi này.
Non, le but était de déterminer, premièrement, si l’infrastructure prévue était suffisante. Không, mục tiêu là xác định liệu các cơ sở hạ tầng đầu tiên của kế hoạch là đủ. Dans le cas contraire quelle infrastructure devait être mise en place pour supporter un nombre déterminé de connexions concurrentes. Nếu không, cơ sở hạ tầng những gì sẽ được đưa ra để hỗ trợ một số quy định của kết nối đồng thời. Et finalement, déterminer si ces acquisitions étaient une solution viable et moins onéreuse que l’optimisation ou la formation de développeurs sur un framework différent. Và cuối cùng, liệu những vụ mua lại được một khả thi và ít tốn kém hơn so với tối ưu hoá hoặc đào tạo phát triển trên một khung khác nhau.
Malgré les piètres performances de Zend Framework en terme de consommation mémoire, nous avons vite réalisé que ce n’était pas son plus gros point faible. Mặc dù có hiệu suất kém của Zend Framework trong việc tiêu thụ bộ nhớ, chúng tôi nhanh chóng nhận ra nó không phải là điểm yếu lớn nhất của mình.
Introduction Giới thiệu
Ce billet a pour but de vous décrire les procédures de test qui ont été mises en place et de vous révéler de la manière la plus exhaustive possible le résultat de ces tests. lưu ý này nhằm mô tả các thủ tục thử nghiệm đã được đưa ra và bạn tiết lộ kết quả đầy đủ nhất có thể của các thử nghiệm này.
Je vous explique tout d’abord quelles étaient les contraintes déterminées. Hãy để tôi giải thích trước các khó khăn xác định được những gì. Ensuite, je vous présente le matériel que nous avons utilisé pour réaliser ces benchmarks. Tiếp theo, tôi trình bày các tài liệu chúng tôi sử dụng để đạt được các tiêu chí chuẩn. Et finalement, je vous propose les résultats sur chacun des environnements testés. Và cuối cùng, tôi cung cấp những kết quả trên từng môi trường thử nghiệm.
Contraintes Hạn chế
Dans un environnement de Haute Disponibilité (HA), la première des contraintes est de pouvoir assumer une continuité de service quasi-illimitée dans le temps. Trong một trạng sẵn có cao (HA), các ràng buộc đầu tiên là giả định một sự liên tục của dịch vụ hầu như không giới hạn trong thời gian. Ce type d’environnement est souvent sensible car la charge qu’il doit endosser est grande. Loại môi trường này thường nhạy cảm vì nó phải gánh vác gánh nặng là rất tốt.
Nous parlons ici de 50’000 à 150’000 utilisateurs uniques sur un site de consultation. Chúng ta đang nói khoảng 50.000 đến 150.000 người sử dụng duy nhất trên một trang web tư vấn. Et, par expérience, nous avons déduit qu’un tel trafic pouvait amener les serveurs à supporter 200 à 300 connexions concurrentes, au minimum. Và, từ kinh nghiệm, chúng tôi kết luận rằng như vậy giao thông có thể gây ra các máy chủ để hỗ trợ 200-300 kết nối đồng thời, ở mức tối thiểu.
Pour améliorer les performances nous avons plusieurs options, par priorité. Để cải thiện hiệu suất chúng tôi có nhiều lựa chọn, bởi ưu tiên.
- améliorer et multiplier la configuration hardware cải thiện và mở rộng các cấu hình phần cứng
- installer des éléments applicatifs d’hébergement robustes et redondants cài đặt các thành phần ứng dụng lưu trữ mạnh mẽ và dự phòng
- utiliser des applicatifs hébergés performants dès le départ hiệu quả sử dụng các ứng dụng được lưu trữ ngay từ đầu
- architecturer l’application de manière modulaire et maximiser l’aspect optimisation kiến trúc sư của họ ứng dụng một cách mô-đun và tối đa hóa các khía cạnh tối ưu
Chacune de ces options a un prix. Mỗi tùy chọn có giá. De nos jours, le matériel étant bien moins cher que le temps/homme, l’amélioration de l’infrastructure d’hébergement reste donc prioritaire. Ngày nay, phần cứng rẻ hơn nhiều so với thời gian / người, cơ sở hạ tầng lưu trữ tốt hơn vẫn là một ưu tiên. Vient ensuite l’aspect applicatif des serveurs. Rồi đến các khía cạnh của máy chủ ứng dụng. Je veux parler ici du système d’exploitation, du serveur web, des accélérateurs, du système de gestion de base de données, etc… Tôi đang nói về hệ điều hành, máy chủ web, máy gia tốc, hệ thống quản lý cơ sở dữ liệu, vv …
En priorité 3, nous avons le choix des technologies de développement. Ưu tiên 3, chúng tôi có sự lựa chọn của phát triển công nghệ. PHP, Python, Java, ASP ? PHP, Python, Java, ASP? Celles-ci sont plus chères car elles impliquent une formation et des connaissances couteuses. Đây là đắt hơn bởi vì chúng liên quan đến việc đào tạo tốn kém và kiến thức. Et finalement, l’optimisation même de l’applicatif dont le coût augmente de manière exponentiel. Và cuối cùng, tối ưu hóa các ứng dụng cùng một nơi mà chi phí tăng lên theo cấp số nhân.
Chacune des options proposées a ses propres limites. Mỗi phòng trong số các lựa chọn có những hạn chế riêng của mình. Il est donc essentiel de déterminer quels paliers la charge estimée va franchir et jusqu’où nous devons prévoir d’aller pour supporter cette charge. Do đó, cần thiết để xác định mức tải ước tính sẽ mất và cách xa chúng ta phải có kế hoạch đi gánh nặng này. A savoir qu’un palier doit être totalement exploité avant de passer au palier suivant. Để biết rằng một chi nhánh phải được khai thác đầy đủ trước khi chuyển đến cấp độ tiếp theo. Son coût ne doit bien entendu pas dépasser celui du palier suivant. Các chi phí không vượt quá tất nhiên cấp độ tiếp theo. Ce qui nous amène de manière naturelle à un équilibre et une répartition des coûts. Điều này mang đến cho chúng tôi một cách tự nhiên để cân đối chi phí và phân phối.
Vous avez rien compris ? Bạn có hiểu không? C’est pas grave, c’est un truc de comptable. Đó là không sao, đó là một cuốn sách gimmick. Montrez quand même le paragraphe précédent au responsable de l’argent dans votre entreprise. Vẫn hiển thị các phần trước về tiền trong kinh doanh của bạn.
Environnements de test Kiểm tra môi trường
Frontend Lối vào
Le frontend est le serveur web cible. lối vào là máy chủ web mục tiêu.
Hardware des machines cibles Phần cứng máy mục tiêu
- Bi-Opteron 1,8Ghz, 1MB cache L2 (64bits), 2 GB RAM puis 4 GB RAM Dual Opteron 1,8 GHz, 1MB L2 cache (64bit), RAM 2 GB và 4 GB RAM
- Xeon Quad-Core X3210 2.13GHz (64bits), 4MB cache L2, 2GB RAM Xeon Quad-Core X3210 2.13Ghz (64bit), 4MB L2 Cache, 2GB RAM
Webservers Máy chủ web
- Apache Apache
C’est le web server opensource le plus connu, il est robuste, mais est un gros consommateur de ressources. Nó là nguồn gốc máy chủ web mở như được biết, đó là mạnh mẽ, nhưng là một người tiêu dùng chính của tài nguyên. - nginx nginx
Concurrent de lighttpd, sa côte de popularité augmente sensiblement du fait de ses excellentes performances. Lighttpd đối thủ cạnh tranh, phổ biến của nó tăng lên đáng kể do thành tích xuất sắc của mình. - lighttpd lighttpd
Web Server léger, s’utilise pour PHP en mode FastCGI. Web Server ánh sáng được sử dụng cho PHP như là FastCGI. Ayant eu quelques soucis d’intégration avec cet applicatif par le passé, nous ne l’avons pas intégré dans nos tests. Đã có một vài vấn đề hội nhập với ứng dụng này trong quá khứ, chúng tôi đã không bao gồm trong thử nghiệm của chúng tôi. Egalement parce qu’il est décrit comme légèrement moins performant que nginx. Cũng bởi vì ông được mô tả như là một chút ít hiệu quả hơn nginx.
Nous avons également utilisé php-fpm qui est un php-cgi
amélioré. Chúng tôi cũng sử dụng php-fpm mà là một php-cgi
cải thiện. Il est à nginx ce que mod_php est à Apache. Đó là nginx đó là Apache mod_php.
Accélérateurs PHP PHP Accelerators
Les accélérateurs PHP agissent en mettant en cache une version précompilée des scripts PHP les plus appelés. PHP máy gia tốc hoạt động của bộ nhớ đệm biên dịch sẵn phiên bản của PHP nổi tiếng nhất. Ils permettent ainsi d’économiser du temps CPU et améliorent les performances globales des applications hébergées. Họ do đó tiết kiệm thời gian của CPU và cải thiện hiệu suất tổng thể của tổ chức ứng dụng.
Machines de siège Cuộc vây hãm máy
Outils pour le benchmarking Công cụ để đo điểm chuẩn
- siege chỗ
Simule un nombre de connexions parallèles pour estimer la charge que peut supporter un serveur web. Mô phỏng một số lượng kết nối song song để ước tính tải trọng có thể hỗ trợ một máy chủ web. - funkload funkload
Très complet, il permet de rejouer en parallèle des cas de test. Rất hoàn chỉnh, nó cho phép bạn xem lại trường hợp thử nghiệm song song. C’est un des outils qui convient le mieux pour simuler un nombre de connexions concurrentes. Đây là một trong những công cụ thích hợp nhất để mô phỏng một số kết nối đồng thời. - httperf httperf
Rapide, il permet de soumettre une charge importante au serveur web. Nhanh, nó có thể làm cho một gánh nặng lớn đối với các máy chủ web. Par exemple il peut servir pour calculer le nombre de hits/seconde que celui-ci peut supporter Ví dụ nó có thể được sử dụng để tính số lượt truy cập mỗi thứ hai mà nó có thể chịu được
Deux machines ont été utilisées pour charger le serveur cible. Hai máy đã được sử dụng để tải các máy chủ mục tiêu. La première pour les tests funkload
avec plus de 450 connexions concurrentes. Các thử nghiệm đầu tiên cho funkload
với hơn 450 kết nối đồng thời. La seconde pour les tests siege
avec environ 300 connexions concurrentes. Việc thứ hai để kiểm tra siege
với khoảng 300 kết nối đồng thời.
Comme la charge que peut générer la machine de siège est limitée, la machine secondaire est utilisée pour simuler du trafic provenant d’un nombre constant d’utilisateurs, souvent 50 de plus, sur la homepage du site. Khi tải có thể tạo ra các động cơ bao vây là có hạn, các máy chủ thứ cấp được sử dụng để mô phỏng giao thông từ một hằng số của người dùng, thường là hơn 50 trên trang chủ của trang web.
Protocoles de test Kiểm tra các giao thức
Nous avons créé un cheminement sur l’application cible. Chúng tôi đã tạo ra một đường dẫn về việc áp dụng mục tiêu. Ce cheminement tente de reproduire un comportement humain avec tout d’abord l’affichage de la homepage, l’identification (redirection), le chargement du portail de l’utilisateur puis la consultation de quelques pages et finalement, la déconnexion (redirection). con đường này sẽ cố gắng để tái tạo hành vi con người với màn hình hiển thị đầu tiên của trang chủ, nhận dạng (chuyển hướng), tải các cổng thông tin người sử dụng và tư vấn của một vài trang và cuối cùng, ngắt kết nối (chuyển hướng).
Une série de tests correspond donc au chargement de 11 pages avec 2 redirections et 7 images chargées. Một loạt các bài kiểm tra tương ứng với các tải của 11 trang với 2 và 7 chuyển hướng tải hình ảnh. L’application cible est de type backoffice, ce qui explique le faible nombre d’images chargées. Việc áp dụng mục tiêu là backoffice loại, điều này giải thích số lượng thấp của hình ảnh được tải.
Voici la liste des environnements testés : Dưới đây là danh sách các môi trường thử nghiệm:
- Série de tests avec configuration de base (sans optimisation particulière) Hàng loạt các thử nghiệm với cấu hình cơ bản (không có tối ưu hóa đặc biệt)
- Série de tests avec tuning + PHP accelerator Hàng loạt các thử nghiệm với máy gia tốc điều chỉnh + php
- Série de tests avec tuning + PHP accelerator + doublement de la RAM à 4GB Hàng loạt các bài kiểm tra với điều chỉnh + PHP + tăng tốc gấp đôi bộ nhớ RAM tới 4GB
- Série de tests avec tuning + PHP accelerator + doublement CPU vers le serveur 4 cores Hàng loạt các bài kiểm tra với điều chỉnh + PHP + tăng gấp đôi tốc CPU máy chủ 4 lõi
Chaque série est composée d’un test unitaire pour valider la configuration (1 cycle), puis de plusieurs tests évaluant les limites du système. Mỗi dòng bao gồm một thử nghiệm đơn vị để xác nhận cấu hình (1 chu kỳ), các xét nghiệm sau đó một số đánh giá các giới hạn của hệ thống.
Résultats Kết quả
C’est la partie qui nous (vous) intéresse le plus. Đây là phần mà chúng tôi (bạn) được quan tâm nhất.
Apache + mod_php + MySQL Apache + MySQL + mod_php
Test unitaire, sans charge préalable Đơn vị kiểm tra không cần tải trước
Durée du test : 2.792 sec Kiểm tra thời gian: 2792 sec
Requête la plus lente : 0.226 sec Yêu cầu chậm hơn: 0.226 giây
Avec charge de base, 50 utilisateurs sur l’index Base tải với 50 người dùng trên chỉ số
Durée du test : 10.292 sec Kiểm tra thời gian: 10.292 giây
Requête la plus lente : 1.397 sec Yêu cầu chậm hơn: 1.397 giây
Série avec config de base Series với cấu hình cơ bản
Pas de résultat : le serveur Apache ne tient pas la charge, la mémoire “swap” : les benchmarks n’ont jamais pu être terminés. Không có kết quả: Apache không tải, trao đổi bộ nhớ: Các tiêu chuẩn đã không được hoàn thành. Cette série a donc été supprimée des autres tests également. series này đã được gỡ bỏ từ các xét nghiệm khác cũng có.
Série avec tuning + accélérateur PHP (2Go et 4Go de RAM) Series với điều chỉnh + PHP accelerator (2GB và 4GB RAM)
Ligne B1 : Cible à 2Go de RAM Line B1: Mục tiêu đến 2GB bộ nhớ RAM
Ligne B2 : Cible à 4Go de RAM B2: Mục tiêu đến 4GB bộ nhớ RAM
Le meilleur cycle est obtenu avec 100 utilisateurs simultanés : à ce stade les pages mettent en moyenne 6 secondes pour se charger. Các chu kỳ tốt nhất là thu được với 100 người dùng đồng thời: Tại thời điểm này các trang đang ở trên mức trung bình 6 giây để tải.
On distingue dans ce tableau que l’ajout de RAM ne change guère les performances. Chúng tôi phân biệt trong bảng này có thêm hiệu suất RAM hầu như không thay đổi. Au maximum, 2.2Go ont été utilisés. 2.2Go tối đa được sử dụng. A partir de 100 connexions concurrentes, on constate que le serveur avec 2Go perd un peu de terrain ce qui est probablement dû au “swap”. Từ 100 kết nối đồng thời, chúng ta thấy rằng các máy chủ với 2GB mất một số mặt đất mà có lẽ là do sự trao đổi này.
La page index met environ 25 secondes à se charger avec 300 utilisateurs en parallèle. Các trang chỉ mục mất khoảng 25 giây để tải với 300 người sử dụng song song. Elle met 2.5 sec avec 50 utilisateurs. Nó là 2,5 giây với 50 người sử dụng.
On constate également dans le graphique ci-dessus qu’à partir de 100 connexions concurrentes, le taux d’erreur est de 5%, ce qui est énorme, on le verra plus tard. Nó cũng được tìm thấy trong biểu đồ ở trên là từ 100 kết nối đồng thời, tỷ lệ lỗi là 5% mà là rất lớn, chúng ta sẽ thấy sau này.
Nginx + fastcgi (20 process) + MySQL Nginx + FastCGI (20 quy trình) + MySQL
Dans cette configuration, nous changeons le serveur Apache pour un serveur Nginx. Trong cấu hình này, chúng ta thay đổi máy chủ Apache cho một Nginx máy chủ. La consommation de RAM, qui était précédemment entre 450Mo et 2.2Go pour Apache, descend entre 400Mo et 700Mo. Việc tiêu thụ RAM, mà trước đây giữa 450Mo và 2.2Go cho Apache, và xuống giữa 400MB 700MB.
Voici un petit aperçu de la différence de performance entre Apache et Nginx. Dưới đây là tổng quan về sự khác biệt hiệu năng giữa Apache và Nginx.
B1 = Apache B1 = Apache
B2 = NGinx B2 = nginx
On constate qu’à 100 connexions concurrentes, Apache est en perte de vitesse alors que Nginx monte jusqu’à 250 connexions et reste presque stable jusqu’à 300 connexions. Chỉ có 100 kết nối đồng thời, Apache đang mất đất, trong khi Nginx lên đến 250 kết nối và vẫn còn gần như ổn định lên tới 300 kết nối.
Test unitaire, sans charge préalable Đơn vị kiểm tra không cần tải trước
Durée du test : 1.797 sec Kiểm tra thời gian: 1.797 giây
Requête la plus lente : 0.151 sec Yêu cầu chậm hơn: 0.151 giây
Avec charge de base, 50 utilisateurs sur l’index Base tải với 50 người dùng trên chỉ số
Durée du test : 2.409 sec Kiểm tra thời gian: 2409 sec
Requête la plus lente : 0.207 sec Yêu cầu chậm hơn: 0.207 giây
Série avec tuning + accélérateur PHP (4Go RAM) Series với điều chỉnh + PHP accelerator (4GB RAM)
Comparé à Apache, la configuration Nginx permet une réelle amélioration des performances. So với Apache, Nginx cấu hình cho phép một sự cải thiện hiệu suất thực sự. On constatait avec Apache 5% d’erreur avec 100 connexions. Nó ghi nhận với lỗi 5% Apache với 100 kết nối. Ici, le taux d’erreur reste à 0% pour augmenter uniquement à partir de 300 connexions parallèles. Ở đây, tỉ lệ lỗi vẫn còn ở mức 0% để tăng chỉ từ 300 kết nối song song.
La page d’index mettait 5 secondes à se charger sur Apache. Các trang chỉ mục đặt năm giây để tải về Apache. Avec Nginx, il faut attendre les 200 connexions concurrentes pour atteindre 5 secondes de chargement. Với Nginx, phải mất khoảng 200 kết nối đồng thời đến 5 giây bốc hàng.
Processeur Dual-Core vs Quad-Core Dual-Core vs Quad-Core
Après ces premiers tests, nous avons passé toute la configuration sur un serveur Quad-Core. Sau những thử nghiệm ban đầu, chúng tôi đã dành toàn bộ các thiết lập trên một máy chủ lõi-quad. On avait constaté que l’augmentation de RAM n’avait servi qu’à empêcher Apache de planter. Nó được tìm thấy rằng sự gia tăng trong RAM chỉ phục vụ để ngăn chặn Apache sụp đổ. Ici, on a un gain de 80% par rapport au Dual-Core. Ở đây chúng tôi có được là 80% so với các-Dual Core.
On a pu constater dès le début des tests, et contre toute attente, que le processeur était mis à bien plus rude épreuve que la mémoire. Nó đã được quan sát thấy trong các bài kiểm tra đầu, và chống lại tất cả các tỷ lệ cược, rằng các bộ vi xử lý đã được thực hiện thậm chí còn căng thẳng hơn so với bộ nhớ. On en a maintenant la preuve. Chúng ta đã có bằng chứng.
B1 = Dual-Core B1 = Dual-Core
B2 = Quad-Core B2 = Quad-Core
Ce gain est probablement dû au cache L2 qui est 4x supérieur sur le Quad-Core comparé au Bi-Opteron. tăng này có thể là do bộ nhớ cache L2 lớn hơn 4x lõi tứ Opteron so với kép.
Avec ou sans eAccelerator Có hoặc không có eAccelerator
Voici encore des tests avec et sans eAccelerator . Dưới đây là xét nghiệm có và không có eAccelerator. Le gain ici est énorme également, 180% . đạt được ở đây là rất lớn cũng có, 180%.
B1 = sans eAccelerator B1 = không eAccelerator
B2 = avec eAccelerator B2 = với eAccelerator
php-fpm vs php-cgi php-fpm so với php-cgi
Et finalement, avec et sans php-fpm , le gain est moindre mais non négligeable : 35% . Và cuối cùng, có và không có fpm-php, đạt được là nhỏ hơn nhưng không đáng kể: 35%.
B1 = sans php-fpm B1 = không fpm-php
B2 = avec php-fpm B2 = php-fpm
Pourquoi pas APC ? APC tại sao không?
APC donnait des résultats moins bon que eAccelerator et php-fpm ce qui nous a poussé à le laisser de côté pour ces benchmarks. PCA đã cho kết quả tốt như eAccelerator và php fpm-đó đẩy chúng ta để lại dành cho các tiêu chí chuẩn.
Conclusion Kết luận
Au final, nous obtenons donc pour une charge de 500 connexions concurrentes, avec toutes les optimisations possibles et un serveur performant, 2 secondes de chargement sur la page index, pour 20% de charge CPU, soit 5% de charge par processeur, et ce sans aucune erreur. Cuối cùng, vì vậy chúng tôi có được một tải của 500 kết nối đồng thời, với tất cả các tối ưu nhất có thể và một máy chủ mạnh mẽ, 2 giây tải trên các trang chỉ mục, tải CPU 20%, phí 5% cho mỗi một bộ vi xử lý, và điều này mà không có bất kỳ lỗi nào.
Pour un resultat optimal, un chiffre entre 300 et 350 sessions parallèles donnent déjà de bons résultats. Đối với kết quả tốt nhất, một số từ 300 và 350 phiên song song với nhau đã cho kết quả tốt.
Une remarque importante toute fois, dès 200 connexions parallèles, le besoin de sortir MySQL du serveur se fait sentir. Một lưu ý quan trọng bất kỳ thời gian, trong 200 kết nối song song, sự cần thiết để thoát khỏi máy chủ MySQL phát sinh. Il est donc possible que ces résultats soient encore améliorés si le serveur sert uniquement les requêtes web. Do đó có thể là những kết quả này càng được cải thiện nếu máy chủ phục vụ yêu cầu chỉ web.
Remerciements Lời cảm ơn
Je tiens à remercier Matthieu qui a fait tout ce travail avec beaucoup d’intérêt, dans une salle serveur très bruyante et très mal aérée. Tôi xin cảm ơn Matthew đã làm tất cả điều này với lãi suất rất lớn, trong một phòng máy chủ rất ồn ào và kém thông thoáng.
Nguồn : http://www.wowww.ch/index.php?post/2009/03/23/Zend-Framework-Analyse-des-performances-et-benchmarks