<![CDATA[Latest posts for the topic "[Thảo luận] LAMP - So sánh các cách biên dịch PHP"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net [Thảo luận] LAMP - So sánh các cách biên dịch PHP (Ở đây, tiêu chí mà tôi muốn nói đến là: cách thức hoạt động của PHP sau khi cài xong, chứ không phải là chia theo kiểu: cài từ source, cài từ binary) - Thuận lợi và bất lợi của những cách cài đặt trên? Có thể dùng công cụ nào để kiểm chứng? Trên phương diện bảo mật và hiệu suất hoạt động thì bạn sẽ chọn cách nào? - Vui lòng trình bày chi tiết các cách cài đặt (nếu được)? - ... Mời mọi người cùng thảo luận. ]]> /hvaonline/posts/list/26341.html#160021 /hvaonline/posts/list/26341.html#160021 GMT Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP Có những cách nào khi biên dịch PHP?   Trả lời có 151134368435435643543564354 Cách biên dịch PHP khác nhau. Khác nhau về thư mục cài đặt, về loại trình biên dịch, về hệ điều hành, về NƠI CÀI ĐẶT, về tên file thực thi,... Mình đã từng cài PHP theo vài lối mòn sau : - PHP theo dạng modun, được webservice gọi đến để dịch mã .php , có thể kể đến như .so của apache, hoặc .dll bên IIS window. - PHP dạng thực thi CGI hoặc FastCGI, không thực sự hiểu sâu về nó, nhưng nôm na là PHP hoạt động ở dạng thực thi,tự chạy tiến trình để dịch mã .php và có các cơ chế khác nhau để trả ngược kết quả về webservice - PHP hoạt động như ứng dụng :-/ :-/ <có nghịch chơi thôi > Về phương diện hoạt động và hiệu suất thì không thể nói miệng mà phải trực tiếp test bằng tools để kiểm chứng. Xét về phương diện bảo mật : - PHP dạng modun, vì được webservice triệu gọi nên hoàn toàn dịch mã .php với định danh tiến trình của web service. Điều này cũng không có gì đánh giá về bảo mật cả, tuy nhiên nếu trên phương diện share hosting, chạy toàn bộ các site với cùng một mức truy cập như nhau là điểm yếu về bảo mật khi có localacttack. -PHP chạy dạng thực thi, tự php sẽ có định dang tiến trình riêng,hoàn toàn khác biệt với web service,có nhiều cách để kích hoạt PHP chạy , với Apache có thể thực thi CGI mỗi khi request cần xử lý, cũng có thể có các cơ chế khác để kích hoạt tiến trình PHP chạy sẵn và ở chế độ chờ mỗi khi có request xử lý mã. Quan điểm cá nhân mình thích kiểu này hơn vì nó phân tách được request web đâu là chế độ static <hoàn toàn không nguy hại > và đâu là các srcipt có thể được lợi đụng. - Cái cuối là chạy mã .php nhưng không tạo mã HTML mà để chơi cờ caro chẳng hạn :D - Xét về bảo mật, mình coi phân quyền cấp OS là cao nhất, cụ thể ở mức tiến trình và quyền truy cập file <có gì sai tên gọi chăng> vì thế mình hay sử dụng cách thứ 2 hơn, tiến trình apache và php được triệu gọi riêng biệt, các mã .php được php xử lý còn file static thì apache trả lời luôn. Hơn nữa do được khởi tạo sãn nên cách này có vẻ hiệu quả và bền bỉ hơn việc cứ mỗi request đến lại một lần triệu gọi và nạp php vào bộ nhớ. Hơn nữa, tiến trình PHP được spawn với ID riêng biệt nên có thể giới hạn vùng truy cập và tránh làm ảnh hưởng giữa các site với nhau. More]]> /hvaonline/posts/list/26341.html#160038 /hvaonline/posts/list/26341.html#160038 GMT [Thảo luận] LAMP - So sánh các cách biên dịch PHP

quanta wrote:
- Có những cách nào khi biên dịch PHP? (Ở đây, tiêu chí mà tôi muốn nói đến là: cách thức hoạt động của PHP sau khi cài xong, chứ không phải là chia theo kiểu: cài từ source, cài từ binary) 
Bùng nhùng quá không hiểu gì hết :D Mới vô thì hỏi về "cách biên dịch", sau thì lại "cách hoạt động", rồi câu sau lại là "cách cài đặt"...híc...example 1 phát cho rõ đi nào.]]>
/hvaonline/posts/list/26341.html#160040 /hvaonline/posts/list/26341.html#160040 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
Mình đã từng cài PHP theo vài lối mòn sau : - PHP theo dạng modun, được webservice gọi đến để dịch mã .php , có thể kể đến như .so của apache, hoặc .dll bên IIS window.  
- Web server chứ nhỉ? - Windows có chữ "s".

nbthanh wrote:

quanta wrote:
- Có những cách nào khi biên dịch PHP? (Ở đây, tiêu chí mà tôi muốn nói đến là: cách thức hoạt động của PHP sau khi cài xong, chứ không phải là chia theo kiểu: cài từ source, cài từ binary) 
Bùng nhùng quá không hiểu gì hết :D Mới vô thì hỏi về "cách biên dịch", sau thì lại "cách hoạt động", rồi câu sau lại là "cách cài đặt"...híc...example 1 phát cho rõ đi nào. 
OK bác, ý tôi muốn chia như sau: - PHP được cài như một CGI interpreter - PHP được cài dưới dạng module của Apache: trong này lại chia thành static module và dynamic module

BachDuongTM wrote:
- PHP dạng thực thi CGI hoặc FastCGI, không thực sự hiểu sâu về nó, nhưng nôm na là PHP hoạt động ở dạng thực thi,tự chạy tiến trình để dịch mã .php và có các cơ chế khác nhau để trả ngược kết quả về webservice  
Tớ mới chỉ cài thằng này chứ chưa có điều kiện dùng thật sự. Với FastCGI: - Khi có request, web server (Apache) sẽ chuyển đến cho FastCGI để xử lý - FastCGI giao tiếp với web server qua TCP hoặc Unix socket ]]>
/hvaonline/posts/list/26341.html#160043 /hvaonline/posts/list/26341.html#160043 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
- PHP theo dạng modun, được webservice gọi đến để dịch mã .php , có thể kể đến như .so của apache, hoặc .dll bên IIS window.  
Php cài đặt theo dạng Module là một phương thức được recommended, nhiều tài liệu mà mình đọc được đều làm theo cách này, nhưng chỉ nói cài đặt php như một module để tăng performance của webserver chứ không nghe đến các vấn đề khác Biên dịch php theo dạng module có 2 cách: -Một là biên dịch php như một static module của apache, với cách này thì "php module" sẽ được cài đặt chung với Apache và không thể nào remove cũng như cài đặt lại nếu không biên dịch lại apache. Với cách này thì biên dịch cũng như sử dụng php đơn giản, thật ra 2 cách đều đơn giản như nhau. Nhưng nếu như PHP gặp một lỗi nào đó, thì muốn update PHP phải re-compile Apache. -Biên dịch php như một dynamic module, với cách này thì để sử dụng PHP ta chỉ cần loadmodule php đã cài, và nếu cần upgrade php, thì chỉ biên dịch lại php chứ không cần biên dịch apache, tất nhiên nếu apache gặp lỗi thì lại khác :)

BachDuongTM wrote:
Xét về bảo mật, mình coi phân quyền cấp OS là cao nhất, cụ thể ở mức tiến trình và quyền truy cập file <có gì sai tên gọi chăng> vì thế mình hay sử dụng cách thứ 2 hơn, tiến trình apache và php được triệu gọi riêng biệt, các mã .php được php xử lý còn file static thì apache trả lời luôn. Hơn nữa do được khởi tạo sãn nên cách này có vẻ hiệu quả và bền bỉ hơn việc cứ mỗi request đến lại một lần triệu gọi và nạp php vào bộ nhớ. Hơn nữa, tiến trình PHP được spawn với ID riêng biệt nên có thể giới hạn vùng truy cập và tránh làm ảnh hưởng giữa các site với nhau.  
Vì thế này nên request mới được xử lí chậm hơn chứ, việc khởi tạo một module của một ứng dụng với việc khởi tạo riêng một ứng dụng thì mình nghĩ về trước làm hao phí tài nguyên server ít hơn :*- Về phương diện bảo mật, việc config Apache và php theo mình nghĩ mới là quan trọng, hơn nữa trong quá trình cài đặt, nhưng vấn đề về bảo mật cho apache *nếu được ngó tới* cộng với việc chú ý php, thì ở mức modile và ứng dụng không khác là mấy. :P ]]>
/hvaonline/posts/list/26341.html#160046 /hvaonline/posts/list/26341.html#160046 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

mR.Bi wrote:

BachDuongTM wrote:
- PHP theo dạng modun, được webservice gọi đến để dịch mã .php , có thể kể đến như .so của apache, hoặc .dll bên IIS window.  
Về phương diện bảo mật, việc config Apache và php theo mình nghĩ mới là quan trọng, hơn nữa trong quá trình cài đặt, nhưng vấn đề về bảo mật cho apache *nếu được ngó tới* cộng với việc chú ý php, thì ở mức modile và ứng dụng không khác là mấy. :P  
Vì thế này nên request mới được xử lí chậm hơn chứ, việc khởi tạo một module của một ứng dụng với việc khởi tạo riêng một ứng dụng thì mình nghĩ về trước làm hao phí tài nguyên server ít hơn :*-  
:D Đó là sự khác biệt giữa đọc tài liệu và test thực tế. Có nhiểu recommed khác nhau và recomend của mình là đừng vội tin thằng nào hết <theo logic là gồm cả mình :-O :-O > Việc khởi tạo php ứng dụng trước sẽ làm hao phí tài nguyên hệ thống mà cụ thể là RAM , tuy nhiên web service sẽ không cần triệu gọi modun php mỗi khi có request cần biên dịch mà chỉ cần xoay mình kê chân đá gót cho php proc đồng thời dạo mát một vòng đợi nó trả mã về. Với server 4G hoặc 8G ram hiện tại thì tốn vài trăm không là vấn đề gì, vấn đề là mức tải server và thời gian để trả lời request. Trong triển khai thực tế, 1 server mình thường cài không phải 1 mà là 3 tiến trình khác nhau gồm web service chỉ trả lời static request, web service trả lời script và php proc . Bảo mật là bài toán vô cùng, cá nhân mình chú trọng mức thấp nhất là OS cụ thể ở mức tiến trình và quyền truy cập file, giả định apache hoặc php bi bug thì hệ thống ít bị phá hoại nhất có thể.]]>
/hvaonline/posts/list/26341.html#160049 /hvaonline/posts/list/26341.html#160049 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP ..... Với server 4G hoặc 8G ram hiện tại thì tốn vài trăm không là vấn đề gì  Ok, nếu bạn nói vậy thì mình thua :)
Bảo mật là bài toán vô cùng, cá nhân mình chú trọng mức thấp nhất là OS cụ thể ở mức tiến trình và quyền truy cập file, giả định apache hoặc php bi bug thì hệ thống ít bị phá hoại nhất có thể. 
Việc biên dịch php như một module của apache, nếu như apache hoặc php gặp lỗi thì sao? Nó khác gì với việc sử dụng php như một CGI interpreter? Mình thì mình thấy sử dụng CGI còn nguy hiểm hơn nhiều.]]>
/hvaonline/posts/list/26341.html#160051 /hvaonline/posts/list/26341.html#160051 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

quanta wrote:
OK bác, ý tôi muốn chia như sau: - PHP được cài như một CGI interpreter - PHP được cài dưới dạng module của Apache: trong này lại chia thành static module và dynamic module 
Rõ hơn rồi đây :D Static module và Dynamic module không khác nhau là mấy trên phương diện sử dụng, chỉ khác nhau nhiều ở phần "cài đặt". Về performance: module > CGI-like Cụ thể hơn thì module = thread, CGI = process; thread thì light-weight hơn process cái đó rõ rồi. Còn cụ thể như thế nào thì lại...tùy vào OS :-) Về bảo mật: chia ra làm 2 trường hợp * Shared hosting: - module: quên chuyện bảo mật với nó đi ;-) - CGI: bảo mật tốt hơn, nhưng vì dạng CGI khá "nặng", cho dù là với FCGI-like cho nên với các shared hosting "rẻ tiền" thì CGI không được ưa chuộng lắm vì chẳng mấy chốc là nó làm server "sụm bà chè". * Dedicated hosting: Module lightweight hơn CGI-like nhiều, nên tôi thì sẽ luôn chọn dạng module (ít ra cũng...chống DOS tốt hơn ;-) ). Tuy nhiên, nếu script viết không tốt, hoặc kẻ tấn công bằng cách nào đó làm "treo" PHP thread thì có thể sẽ làm treo nguyên cả Apache. Nhưng đây cũng không phải là vấn đề...lớn lắm vì nếu nguyên site toàn là PHP, thì nếu kẻ tấn công không làm Apache chết, nhưng làm toàn bộ PHP script của bạn chết thì site của bạn cũng đâu có phục vụ user được chi. Về cách cài đặt: cái này thì ngay trong PHP Manual cũng có chỉ rõ rồi :-)]]>
/hvaonline/posts/list/26341.html#160053 /hvaonline/posts/list/26341.html#160053 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP Về performance: module > CGI-like Cụ thể hơn thì module = thread, CGI = process; thread thì light-weight hơn process cái đó rõ rồi. Còn cụ thể như thế nào thì lại...tùy vào OS :-)  Cái này còn phải xem lại àh nha. Khi nói php là modun thì được hiểu là nó là một thành phần của web service, còn việc web service chạy theo kiểu nào thì còn xem xét tiếp. Apache có thể chạy theo kiểu proc , theard hoặc hybird đó nha. Nói rằng thread chạy nhanh hơn process chỉ đúng với điều kiện process đó shutdown và start liên tục, nếu process đó không bị kill mà ở trạng thái idle đợi request thì cũng chưa bít đâu.
Về bảo mật: chia ra làm 2 trường hợp * Shared hosting: - module: quên chuyện bảo mật với nó đi ;-) - CGI: bảo mật tốt hơn, nhưng vì dạng CGI khá "nặng", cho dù là với FCGI-like cho nên với các shared hosting "rẻ tiền" thì CGI không được ưa chuộng lắm vì chẳng mấy chốc là nó làm server "sụm bà chè". 
Sure, CGI nặng hơn , tuy nhiên nặng về RAM và hiện tại RAM không hẳn là yếu tố đắt đỏ với 1 server 4g- 8g- 16g .Server sụm chủ yếu do hightload hoặc giới hạn về số request xử lý thôi. * Dedicated hosting: Module lightweight hơn CGI-like nhiều, nên tôi thì sẽ luôn chọn dạng module (ít ra cũng...chống DOS tốt hơn ;-) ). Cái này thì nghĩ cả ngày cũng không ra nó liên quan gì đến DOS, khổ chủ vào giải thích xíu]]>
/hvaonline/posts/list/26341.html#160088 /hvaonline/posts/list/26341.html#160088 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
smilie Đó là sự khác biệt giữa đọc tài liệu và test thực tế. Có nhiểu recommed khác nhau và recomend của mình là đừng vội tin thằng nào hết <theo logic là gồm cả mình > :-O :-O :D  
Câu này hơi chạm tự ái, tối quên đọc. Không biết bạn đã có kinh nghiệm thực tế như thế nào, nhưng đừng nhìn vào thực tế của mình để bảo người khác chỉ biết đọc tài liệu mà chưa test trên thực tế. Hơn nữa, trong bài này bạn cứ nhắc đi nhắc lại mấy con server 2GB Ram, 4 GB Ram, 8 GB Ram. Chắc theo bạn chừng đó Ram là nhiều lắm đây :-) ]]>
/hvaonline/posts/list/26341.html#160130 /hvaonline/posts/list/26341.html#160130 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP /hvaonline/posts/list/26341.html#160136 /hvaonline/posts/list/26341.html#160136 GMT Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP /hvaonline/posts/list/26341.html#160164 /hvaonline/posts/list/26341.html#160164 GMT Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

learn2hack wrote:
Cảm ơn các bác đã thảo luận :). Em có 1 thắc mắc nhỏ từ câu hỏi của quanta mà chưa ai trả lời, đó là "có công cụ nào để kiểm chứng?". Mỗi phương pháp biên dịch PHP đều có ưu điểm và nhược điểm theo như BachDuongTM, nbthanh và Mr.Bi phân tích. Vậy có cách nào để có thể "quan sát" được mức độ ảnh hưởng của từng yếu tố đến 2 vấn đề là hiệu suất và bảo mật của webserver ko? 
Về hiệu suất, l2h có thể dùng 'món' này: http://httpd.apache.org/docs/2.0/programs/ab.html]]>
/hvaonline/posts/list/26341.html#160166 /hvaonline/posts/list/26341.html#160166 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
Về performance: module > CGI-like Cụ thể hơn thì module = thread, CGI = process; thread thì light-weight hơn process cái đó rõ rồi. Còn cụ thể như thế nào thì lại...tùy vào OS :-) 
Cái này còn phải xem lại àh nha. Khi nói php là modun thì được hiểu là nó là một thành phần của web service, còn việc web service chạy theo kiểu nào thì còn xem xét tiếp. Apache có thể chạy theo kiểu proc , theard hoặc hybird đó nha. Nói rằng thread chạy nhanh hơn process chỉ đúng với điều kiện process đó shutdown và start liên tục, nếu process đó không bị kill mà ở trạng thái idle đợi request thì cũng chưa bít đâu. 
CGI mode thì mỗi khi có request Apache phải chạy external application (=process) để sử lý cái request đó. Như vậy thì Apache dù có hoạt động mở mô hình nào đi nữa thì: PHP cài ở dạng Apache module, mỗi khi có requess thì: Apache[proc/thread/hibrid] PHP cài ở dạng CGI, mỗi khi có requess thì: Apache[proc/thread/hibrid] + 1 external process Như vậy thì lúc nào cài kiểu module cũng lightweight hơn kiểu CGI. Và các external process này rõ ràng là start/stop liên tục theo mỗi request. FastCGI thì số lượng external process có giảm thiểu, nhưng vẫn không tránh khỏi.

BachDuongTM wrote:
Về bảo mật: chia ra làm 2 trường hợp * Shared hosting: - module: quên chuyện bảo mật với nó đi ;-) - CGI: bảo mật tốt hơn, nhưng vì dạng CGI khá "nặng", cho dù là với FCGI-like cho nên với các shared hosting "rẻ tiền" thì CGI không được ưa chuộng lắm vì chẳng mấy chốc là nó làm server "sụm bà chè". 
Sure, CGI nặng hơn , tuy nhiên nặng về RAM và hiện tại RAM không hẳn là yếu tố đắt đỏ với 1 server 4g- 8g- 16g .Server sụm chủ yếu do hightload hoặc giới hạn về số request xử lý thôi. 
Process "nặng" hơn thread bao nhiêu bạn có biết? Mà bạn nghĩ rằng 4g-16Gb là lớn lắm sao? Con laptop cùi ghẻ bạn tôi dùng cũng đã có 4Gb RAM rồi. Con server đặt trong góc phòng ở cty tôi số RAM của nó cũng lớn hơn con số 16Gb nhiều lắm, mà chưa ai trong cty tôi dám nói là "RAM không là yếu tố đắt đỏ" cả.

BachDuongTM wrote:
* Dedicated hosting: Module lightweight hơn CGI-like nhiều, nên tôi thì sẽ luôn chọn dạng module (ít ra cũng...chống DOS tốt hơn ;-) ). Cái này thì nghĩ cả ngày cũng không ra nó liên quan gì đến DOS, khổ chủ vào giải thích xíu 
Với 1 giải pháp lightweight hơn thì giả sử 1 sec server handle được 1000 request. Với 1 giải pháp nặng nề hơn thì giả sử 1 sec server handle được 500 request. Như vậy nếu muốn DOS đạng làm tăng server load/làm hết resource ở server/etc thì kẻ tấn công phải tốn sức gấp đôi chứ nhỉ ;-)]]>
/hvaonline/posts/list/26341.html#160180 /hvaonline/posts/list/26341.html#160180 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP /hvaonline/posts/list/26341.html#160241 /hvaonline/posts/list/26341.html#160241 GMT Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
Lỗi của mình rất là to lớn , đó là việc đang bàn xem php ở dạng module với CGI thì lại đâm ngang apache, và thế là mỗi người một ý sai lệch. Và vì nó lệch nên mình cũng bàn xéo một tý nhé - Với apache : chạy theo kiểu CGI sẽ nặng hơn , điều này hoàn toàn đúng, nhưng chỉ đúng với apache thôi, chính xác hơn là đúng với cơ chế xử lý hiện tại của apache. Mình đang bàn về web service mà, ngoài apache còn một số khác nữa chứ.  
Tiêu đề Topic: LAMP - So sánh các cách biên dịch PHP LAMP=Linux-Apache-Mysql-Php

BachDuongTM wrote:
............. Vấn đề là tại thời điểm hiện tại, nút thắt của một máy chủ web thông dụng và đơn lẻ nằm ở ổ cứng chứ không phải là RAM hay CPU nữa.Vì thế nếu nói về biên dịch php để tiết kiệm RAM hoặc biên dịch PHP hoạt động thế nào đó tốn ram hơn thì vấn đề đó không phải là quá quan trọng,mà quan trọng là khả năng đáp ứng chung .  
Xin lỗi, chỗ này mình thực sự không hiểu, bạn có thể giải thích?]]>
/hvaonline/posts/list/26341.html#160256 /hvaonline/posts/list/26341.html#160256 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
Đó là sự khác biệt giữa đọc tài liệu và test thực tế ... Server sụm chủ yếu do hightload hoặc giới hạn về số request xử lý thôi.  
Chào bạn! Chắc bạn đã có kinh nghiệm thực tế với các cách triển khai LAMP server. Rất vui nếu bạn có thể chia sẻ những thông tin lý thú về vấn đề này. Như mình thì cũng không có thời gian để khai triển hết những cách trên rồi kiểm nghiệm thực tế là khai triển cách nào là tốt hơn và trong trường hợp nào.

BachDuongTM wrote:
Vấn đề là tại thời điểm hiện tại, nút thắt của một máy chủ web thông dụng và đơn lẻ nằm ở ổ cứng chứ không phải là RAM hay CPU nữa. 
Lại thêm 1 vấn đề lý thú, bạn có thể chia sẻ cùng mọi người. Thú thật là mình chưa từng thấy webserver bị nghẽn ở đĩa cứng, hay là do ứng dụng của mình không sử dụng nhiều đĩa cứng?]]>
/hvaonline/posts/list/26341.html#160285 /hvaonline/posts/list/26341.html#160285 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

quanta wrote:

learn2hack wrote:
Cảm ơn các bác đã thảo luận :). Em có 1 thắc mắc nhỏ từ câu hỏi của quanta mà chưa ai trả lời, đó là "có công cụ nào để kiểm chứng?". Mỗi phương pháp biên dịch PHP đều có ưu điểm và nhược điểm theo như BachDuongTM, nbthanh và Mr.Bi phân tích. Vậy có cách nào để có thể "quan sát" được mức độ ảnh hưởng của từng yếu tố đến 2 vấn đề là hiệu suất và bảo mật của webserver ko? 
Về hiệu suất, l2h có thể dùng 'món' này: http://httpd.apache.org/docs/2.0/programs/ab.html 
có món nào ngon hơn ko? ví dụ như trong win thì có WAPT: tạo kịch bản, chỉ định những trang nào sẽ test? bao nhiêu user sẽ phi vào? bao nhiêu request?]]>
/hvaonline/posts/list/26341.html#160332 /hvaonline/posts/list/26341.html#160332 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

toantoet wrote:

quanta wrote:
Về hiệu suất, l2h có thể dùng 'món' này: http://httpd.apache.org/docs/2.0/programs/ab.html 
có món nào ngon hơn ko? ví dụ như trong win thì có WAPT: tạo kịch bản, chỉ định những trang nào sẽ test? bao nhiêu user sẽ phi vào? bao nhiêu request? 
Bác thử tham khảo: /hvaonline/posts/list/26105.html]]>
/hvaonline/posts/list/26341.html#160336 /hvaonline/posts/list/26341.html#160336 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP /hvaonline/posts/list/26341.html#160628 /hvaonline/posts/list/26341.html#160628 GMT Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
- Trong các mô hình khác, một trong số mình cài đặt là sử dụng lighttpd + php , khi đó quá trình khởi tạo php được tiến hành ban đầu, các tiến trình php đựoc khởi tạo và ở trạng thái chờ. Ứng với mỗi request, lighttpd không gọi modun php mà chuyển giao trực tiếp qua socket đến tiến trình php đang đợi sẵn. Và vì không cần thêm các quá trình trung gian nữa, nên thời gian đáp ứng request của PHP nhanh hơn 20% so với kiểu load modun apache. 
1. Module chỉ phải load 1 lần chứ không phải mỗi khi có request là load module! 2. Process được tạo sẵn để chờ request thì thread của module không thể được tạo sẵn để chờ request hay sao? 3. Truyền dữ liệu qua lại giữa 2 process, chưa kể cộng thêm cơ chế nếu phải chuyển user id từ apache sang user id của mỗi process thì lại nhanh hơn việc truyền dữ liệu giữa 2 thread trong cùng 1 process? 4. PHP chạy trên lighttpd như bạn nói là ở mode FastCGI. Apache HTTPD cũng hỗ trợ FastCGI, tuy nhiên với cài đặt mặc định thì thường lighttpd + FastCGI nhanh hơn Apache + FastCGI vì lighttpd nói chung là lightweight hơn Apache. Nhưng bạn cũng thấy đây là vấn đề của webserver + FastCGI, đâu có dính gì nhiều tới PHP ;-)]]>
/hvaonline/posts/list/26341.html#160676 /hvaonline/posts/list/26341.html#160676 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP 1. Module chỉ phải load 1 lần chứ không phải mỗi khi có request là load module!  Nếu php được build static với apache thì điều này thậm chí là không còn, tuy nhiên thời gian để khởi tạo thành công 1 process lại lâu hơn. Còn nếu ở dạng modun động, apache cần time để phân loại request rồi mới quyết định có gọi php modun hay không. Sau khi đã load ổn, thì tiến trình đó sẽ vẫn tiếp tục hoạt động tốt, tuy nhiên nếu phải khởi tạo lại apache process thì quá trình trên lại lặp lại.Và vì thế, việc nạp hay không nạp vẫn luôn làm thời gian tiêu tốn nhiều hơn là việc khởi tạo sẵn tiến trình và chờ đợi request xử lý.
4. PHP chạy trên lighttpd như bạn nói là ở mode FastCGI. Apache HTTPD cũng hỗ trợ FastCGI, tuy nhiên với cài đặt mặc định thì thường lighttpd + FastCGI nhanh hơn Apache + FastCGI vì lighttpd nói chung là lightweight hơn Apache. Nhưng bạn cũng thấy đây là vấn đề của webserver + FastCGI, đâu có dính gì nhiều tới PHP ;-) 
Nếu tính PHP chỉ là thời gian từ khi php biên dịch đến khi biên dịch xong, thì mình không có thông tin gì về time giữa modun và cgi, chắc là như nhau. Suy cho cùng, vậy topic có kết luận gì về các cách biên dịch php. Thời gian chỉ là 1 trong số nhiều yếu tố .]]>
/hvaonline/posts/list/26341.html#160684 /hvaonline/posts/list/26341.html#160684 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
1. Module chỉ phải load 1 lần chứ không phải mỗi khi có request là load module! 
Nếu php được build static với apache thì điều này thậm chí là không còn, tuy nhiên thời gian để khởi tạo thành công 1 process lại lâu hơn. Còn nếu ở dạng modun động, apache cần time để phân loại request rồi mới quyết định có gọi php modun hay không. Sau khi đã load ổn, thì tiến trình đó sẽ vẫn tiếp tục hoạt động tốt, tuy nhiên nếu phải khởi tạo lại apache process thì quá trình trên lại lặp lại.Và vì thế, việc nạp hay không nạp vẫn luôn làm thời gian tiêu tốn nhiều hơn là việc khởi tạo sẵn tiến trình và chờ đợi request xử lý.
4. PHP chạy trên lighttpd như bạn nói là ở mode FastCGI. Apache HTTPD cũng hỗ trợ FastCGI, tuy nhiên với cài đặt mặc định thì thường lighttpd + FastCGI nhanh hơn Apache + FastCGI vì lighttpd nói chung là lightweight hơn Apache. Nhưng bạn cũng thấy đây là vấn đề của webserver + FastCGI, đâu có dính gì nhiều tới PHP ;-) 
Nếu tính PHP chỉ là thời gian từ khi php biên dịch đến khi biên dịch xong, thì mình không có thông tin gì về time giữa modun và cgi, chắc là như nhau. Suy cho cùng, vậy topic có kết luận gì về các cách biên dịch php. Thời gian chỉ là 1 trong số nhiều yếu tố . 
Tôi đề nghị bạn nên nghiên túc xem xét lại...kiến thức của mình!

BachDuongTM wrote:
1. Module chỉ phải load 1 lần chứ không phải mỗi khi có request là load module! 
Nếu php được build static với apache thì điều này thậm chí là không còn,... 
Build static hay build dynamic gì thì module cũng chỉ được load 1 lần, chỉ có khác là load trước, hoặc load sau (on-demand/lazy) mà thôi.

BachDuongTM wrote:
Còn nếu ở dạng modun động, apache cần time để phân loại request rồi mới quyết định có gọi php modun hay không. 
Điều này hoàn toàn sai! Apache lúc nào nó cũng phải "phân loại" request như bạn nói, khi thấy 1 request được đăng ký handle bởi 1 module nào đó thì Apache sẽ chuyển sang cho module đó xử lý. Nếu mà module đó là build dynamic thì ở cái request đầu tiên Apache sẽ load cái module đó lên; còn lại từ request thứ 2 trở về sau thì static hay dynamic cũng thế. Và đây là cơ chế hoạt động của Apache, áp dụng chung cho các module chứ không riêng gì PHP module!

BachDuongTM wrote:
...tuy nhiên nếu phải khởi tạo lại apache process thì quá trình trên lại lặp lại.... 
Tại sao lại dính gì tới chuyện khởi tạo lại Apache process nhỉ? 1 năm, 1 tháng, 1 tuần hay 1 ngày bạn restart/reload lại Apache mấy lần?

BachDuongTM wrote:
Và vì thế, việc nạp hay không nạp vẫn luôn làm thời gian tiêu tốn nhiều hơn là việc khởi tạo sẵn tiến trình và chờ đợi request xử lý. 
Không hiểu bạn nói gì luôn. Câu trước thì tự nhiên bạn bắt "khởi tạo lại Apache process", trong khi ở điều kiện ổn định có khi cả tháng Apache mới phải restart lại 1 lần. Vậy giờ tôi cũng bắt "khởi tạo lại FastCGI" thì bạn nghĩ sao? Và cuối cùng, đề nghị bạn đừng nên lôi topic đi lung tung 1 cách không cần thiết như thế. Nếu bạn chưa nắm được topic đang bàn về vấn đề gì...bạn nên vui lòng đọc lại trang 1, quanta đã có nói rõ là topic này đang bàn về vấn đề gì. Ở đây chúng ta đang nói về cách biên dịch & sử dụng PHP: - Module (static, dynamic) - CGI - FastCGI Các web server thông dụng đều hỗ trợ cả 3 "cách" trên cả. Apache là 1 web server thông dụng (nếu không muốn nói là thông dụng nhất) nên được lấy ra làm ví dụ. Bạn đi lôi lighttpd ra nữa thì không có ý nghĩa gì cả vì ở đây chúng ta chỉ bàn về: Module vs CGI vs FastCGI chứ không phải đang bàn về Module+Web Server X vs CGI+Web Server Y vs FastCGI+Web Server Z Qui chung về 1 webserver nào đó thì mới có cơ sở để mà thảo luận so sánh.]]>
/hvaonline/posts/list/26341.html#160688 /hvaonline/posts/list/26341.html#160688 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
Nếu tính PHP chỉ là thời gian từ khi php biên dịch đến khi biên dịch xong, thì mình không có thông tin gì về time giữa modun và cgi, chắc là như nhau. Suy cho cùng, vậy topic có kết luận gì về các cách biên dịch php. Thời gian chỉ là 1 trong số nhiều yếu tố . 
Có ai tính đến thời gian biên dịch trong topic này đâu? Mà "nếu" như bạn muốn bàn về vấn đề này thì có thể qua box Phần Cứng, chúng ta có thể thảo luận lâu hơn về sức mạnh của máy chủ hiện nay (j/k). Nếu không có thông tin gì về thời gian xử lí cũng như performance của 2 cách biên dịch php trên, bạn có thể đi một vòng google và kiểm chứng, mình chắc là có rất nhiều người có dư kinh nghiệm hơn cả bạn và mình rất nhiều cũng viết ra những bài tương tự như so sánh 2 cách biên dịch trên từ rất lâu, nhưng với tất cả những gì mọi người nói ra ở trên thực sự chưa đủ cho bạn thấy là bạn đã sai hay sao? Thay vì việc cố bảo vệ luận điểm của mình một cách không hợp lí, bạn nên chuyển qua lắng nghe và thấu hiểu đi là vừa :P ]]>
/hvaonline/posts/list/26341.html#160699 /hvaonline/posts/list/26341.html#160699 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP Và cuối cùng, đề nghị bạn đừng nên lôi topic đi lung tung 1 cách không cần thiết như thế. Nếu bạn chưa nắm được topic đang bàn về vấn đề gì...bạn nên vui lòng đọc lại trang 1, quanta đã có nói rõ là topic này đang bàn về vấn đề gì.  
Nếu không có thông tin gì về thời gian xử lí cũng như performance của 2 cách biên dịch php trên, bạn có thể đi một vòng google và kiểm chứng, mình chắc là có rất nhiều người có dư kinh nghiệm hơn cả bạn và mình rất nhiều cũng viết ra những bài tương tự như so sánh 2 cách biên dịch trên từ rất lâu, nhưng với tất cả những gì mọi người nói ra ở trên thực sự chưa đủ cho bạn thấy là bạn đã sai hay sao? 
Tôi đề nghị bạn nên nghiên túc xem xét lại...kiến thức của mình!  
mình trân trọng những ý kiến này và sẽ ghi nhớ để bổ xung lại nghiêm túc kiến thức của mình thay vì nói những điều mình không chắc chắn cho dù mình đúng hay là sai]]>
/hvaonline/posts/list/26341.html#160857 /hvaonline/posts/list/26341.html#160857 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP Code:
<?php
echo "Hello world!\n";
echo $a;
echo "Goodbye!\n";
?>
Kết quả chạy:
Hello world! PHP Notice: Undefined variable: a in test1.php on line 3 Goodbye! 
Việc không có biến $a không làm cho script bị fail, nó vẫn chạy từ đầu chí cuối (Goodbye được in ra). Vì thiếu biến không phải là vấn đề gì quá nghiêm trọng. test2: hàm không tồn tại: Code:
<?php
echo "Hello world!\n";
no_defined_func();
echo "Goodbye!\";
?>
Kết quả chạy:
Hello world! PHP Fatal error: Call to undefined function no_defined_func() in test2.php on line 3 
Hàm không tồn tại, nhưng php vẫn chạy từ đầu đến chỗ không thể bỏ qua chạy tiếp được. Câu Hello thì có nhưng Goodbye không được in ra. test3: hàm không tồn tại, gọi sai cú pháp (tôi cố tình thừa dấu mở ngoặc): Code:
<?php
echo "Hello world!\n";
no_defined_func(();
echo "Goodbye!\n";
?>
Kết quả chạy:
PHP Parse error: syntax error, unexpected ')' in test3.php on line 3 
Rõ ràng là khâu kiểm tra cú pháp đã phát hiện và stop ngay khi phát hiện sai cú pháp. Không một dòng nào được thực thi cả. Ta nên biết việc kiểm tra cú pháp này không bao gồm việc tạo ra cây thực thi (một việc tốn nhiều bộ nhớ và CPU), do không có cây thực thi, php không thể kiểm tra tính đúng đắn của từ khóa hoặc sự tồn tại của hàm/biến người dùng tự định nghĩa. Do đó, chỉ đến khi thông dịch dòng đó nó mới báo là từ khóa/hàm không tồn tại. Vì mục đích chính là viết cho Web Service, nên php nó sử dụng các kỹ thuật khác nhau nhằm tăng hiệu năng. Nếu chạy dưới dạng Module thường trực của Apache, php_module được load vào chung vùng nhớ với apache process và nó đứng đó để hứng các request apache chuyển cho. Kiểu module có 1 cái lợi lớn nhất: php load các module của nó 1 lần duy nhất, và các biến, các handle của module tương ứng có thể được giữ lại trong bộ nhớ sau khi thực thi, nhằm tận dụng lại cho lần sau, khỏi phải khởi tạo lại. Đó các persistent connection/handle như mysql, socket... Một điểm nữa, để đỡ công kiểm tra cú pháp, PHP có thể "cache" lại các source nào mà nó đã kiểm tra cú pháp thành công, sau nếu có request gọi lại, nó sẽ bỏ qua bước kiểm tra cú pháp. Nếu có sự sửa đổi bất kỳ 1 file nào hoặc depencies, thì nó sẽ làm lại việc kiểm tra cú pháp. Việc support cái này được cung cấp bởi các php accelerator. Tìm hiểu sâu, từ phiên bản 4.0 trở đi, php kiểm tra cú pháp và "biên dịch" source đó thành bytecode, sau đó thực thi bytecode này, qua sự hỗ trợ của Zend Engine. Cách này tăng tốc đáng kể so với các "thông dịch" từ source, do nó không những bỏ qua việc kiểm tra cú pháp, mà còn có sự đúng đắn của hàm và biến, object..., và mã bytecode thì luôn được xử lý hiệu qủa hơn text-proccessing. Tất nhiên, nó cũng ngốn bộ nhớ hơn cách thông dịch thẳng tuột như ban đầu do phải cache lại các phần bytecode. Tóm lại, php hiện có 2 cách xử lý với php source: kiểm tra cú pháp -> thông dịch/thực thi và kiểm tra cú pháp/biên dịch thành bytecode -> thực thi bytecode. Phải chăng đó là các cách biên dịch của PHP mà bạn muốn đề cập tới? Tham khảo: http://en.wikipedia.org/wiki/PHP http://www.auxy.com/discuz/viewthread.php?tid=665]]>
/hvaonline/posts/list/26341.html#166694 /hvaonline/posts/list/26341.html#166694 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

myquartz wrote:
Phải chăng đó là các cách biên dịch của PHP mà bạn muốn đề cập tới? 
Có lẽ là...không :-) Topic đang bàn về vấn đề "compile php (engine) trên Linux" thì đúng hơn chứ hoàn toàn không nói đến vấn đề 1 PHP script được thực thi như thế nào.]]>
/hvaonline/posts/list/26341.html#166749 /hvaonline/posts/list/26341.html#166749 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

nbthanh wrote:

myquartz wrote:
Phải chăng đó là các cách biên dịch của PHP mà bạn muốn đề cập tới? 
Có lẽ là...không :-) Topic đang bàn về vấn đề "compile php (engine) trên Linux" thì đúng hơn chứ hoàn toàn không nói đến vấn đề 1 PHP script được thực thi như thế nào. 
Vậy thì có phải là mấy cách biên dịch php engine ấy là: dịch lấy bằng gcc, dịch bằng Intel C++ compiler, dịch bằng cách dịch từng file nguồn một, dịch bằng cách chạy make script.. Còn nữa: dịch các module thành shared object hay static link, dịch ra i386 hay x86_64, dịch ra dạng thread-safe cho multi-thread hay không... Dịch bằng ... gì đó không biết nữa. ;). Các cách này đều cho ra mấy dạng binary: php (cli), php-cgi, mod_php, mấy cái này dùng nào thế nào thì tuỳ.]]>
/hvaonline/posts/list/26341.html#166791 /hvaonline/posts/list/26341.html#166791 GMT
Re: [Thảo luận] LAMP - So sánh các cách biên dịch PHP

BachDuongTM wrote:
việc build LAMP, tức là build Apache+PHP,  
Là thế nào! B-) Script PHP đâu phải nhanh nhất - nhẹ nhất, lên đánh giá (hiệu suất - sự tiêu tốn tài nguyên - tấc độ load - Bảo mật) của 1 project viết bằng PHP mà chỉ đề cập tới vấn đề biên dịch PHP thôi sao. Sorry bác chủ topic em không cố ý vi phạm tiêu đề của topic. B-) ]]>
/hvaonline/posts/list/26341.html#168075 /hvaonline/posts/list/26341.html#168075 GMT