Browsing Category

Server History

PHP Session

Ở bản cập nhật mới nhất, plugin Super Socializer không còn hoạt động nếu thiếu Session. Vì vậy tạm thời sử dụng phiên bản PHP Session cho Giọt Đắng. Sẽ tìm kiếm giải pháp khác trong tương lai.

[2018/01/30] Cập nhật hệ thống

Cập nhật Ubuntu lên phiên bản 17.10

PHP 5.6.10 -> 5.6.13
PHP 7.1.5 -> 7.1.13
PHP 7.2.1
PHP [No Session] được build với PHP 7.2 thay vì PHP 7.1

MariaDB 10.1.30 -> 10.2.12
Phiên bản 10.2 trở về sử dụng InnoDB thay vì XtraDB

HAProxy 1.7.5 -> 1.8.3
HAProxy 1.8 hỗ trợ HTTP2 hoàn toàn

OpenLiteSpeed 1.4.26 -> 1.4.29

[2017/05/23] Thử nghiệm OpenLiteSpeed

Do Apache chạy khá hao tốn tài nguyên, tuy đã kết hợp cùng Varnish để giảm tải nhưng bản thân Varnish cũng hao tốn kha khá, cộng thêm Varnish ngốn một lượng RAM lớn nên quyết định tìm một HTTP Server khác để thay thế.

Cảm thấy OpenLiteSpeed có nhiều ưu điểm, và sau vài ngày ngâm cứu thấy cũng khá là ưng ý nên từ hôm nay sẽ cho chạy thử OpenLiteSpeed một cách chính thức.

OpenLiteSpeed chạy độc lập, tạm thời tắt Varnish và Hitch.

Phiên bản OpenLiteSpeed sử dụng là 1.4.25

Chuyển sang Server mới

Do Server [Serin] có một vài khó khăn kỹ thuật không thể giải quyết nổi, hoặc có giải quyết thì cũng để lại di chứng nên phương án tốt nhất có lẽ là xây dựng lại một Server mới hoàn toàn. Đồng thời việc thử nghiệm Ubuntu thay vì CentOS có những khía cạnh khả quan, dẫn tới Project Serin sẽ đành phải đi tới hồi kết. Thay vào đó là một Project mới mang tên Hades.

Nền tảng của Server [Hades] sẽ là Ubuntu thay vì CentOS. Tất nhiên với thói quen cá nhân, đã không làm lại thì thôi, một khi làm lại sẽ cố gắng làm tốt hơn, đồng thời phải thêm vào nhiều thứ mới.

Phần cứng

Tăng từ 4 Cores lên 6 Cores

Phần mềm chung

Sử dụng các package build sẵn thay vì manual compiling, trừ PHP

PHP

Tăng thêm số phiên bản PHP hỗ trợ, đồng thời bỏ đi phiên bản PHP 7.0
Các bản PHP hỗ trợ: 7.1 – 5.6 – 5.5 – 5.4 – 5.3 – 5.2
Tất cả các bản PHP đều là bản Non – Thread Safety
Sử dụng PHP-FPM, bỏ hoàn toàn mod_php
Sử dụng Zend OPcache cho tất cả các phiên bản. Tạm thời bỏ XCache
Session Handler: Memcached

MariaDB

Ngoài MariaDB 10.1, hệ thống có thêm bản 5.5 để tương thích cùng PHP 5.2

Hugepages

Sử dụng Hugepages để tùy chỉnh Block Size cho Cache của PHP Zend OPcache và MariaDB
Disable Transparent Hugepages

[2017/04/14] Cập nhật Server

– Update CentOS and all Packages
– Apache 2.4.23 -> 2.4.25
– PHP 7.1.0 -> 7.1.4 (including No Session version)
– PHP 7.0.14 -> 7.0.18
– PHP 5.6.29 -> 5.6.30
– MariaDB 10.1.20 -> 10.1.22
– Varnish Cache 5.0.0 -> 5.1.2
– Hitch TLS 1.4.3 -> 1.4.4
– Memcached 1.4.33 -> 1.4.36

[2016/12/22] Sử dụng PHP-FPM Master Process riêng cho Giọt Đắng

Theo config từ trước tới nay thì mỗi phiên bản PHP chỉ chạy 1 FPM Master Process chung cho tất cả các site.

Trong thời gian gần đây có một vài site khác được đặt tạm trên Server, do không muốn chung đụng nên quyết định sử dụng 1 Master Process riêng chỉ cho Giọt Đắng.

Đã cân nhắc về FPM Pool nhưng việc chạy 1 Master Process riêng mang lại nhiều lợi ích hơn. FPM Master Process dành riêng cho Giọt Đắng được config với Process Manager ở chế độ ondemand thay vì dynamic, và vẫn sử dụng phiên bản PHP đã loại bỏ Session.

[2016/12/17] Server is Up to Date

Đã rất lâu rồi không cập nhật Software mới nhất cho Web Server, thôi thì dành riêng một buổi để nâng cấp một loạt.

Như thường lệ, các Package của CentOS cập nhật bằng yum, còn các Software thì Compile thủ công từ Source.

– Trọng tâm của đợt cập nhật này là phiên bản PHP mới ra lò 7.1.0: mặc định sử dụng PHP 7.1 cho toàn Server thay cho PHP 7.0
– Theo đó sử dụng riêng một bản PHP 7.1.0 [No Session] cho WordPress
– PHP 7.0.10 -> 7.0.14
– Bỏ PHP 7.0 [No Session]
– PHP 5.6.25 -> 5.6.29
– MariaDB 10.1.16 -> 10.1.20
– Hitch 1.2.1 -> 1.4.3
– Varnish 4.1.3 -> 5.0.0
– Memcached 1.4.31 -> 1.4.33

Tùy chỉnh: Chuyển Child Processes của PHP 7.0 FPM từ dynamic sang ondemand.

[2016/09/01] Sử dụng phiên bản PHP không hỗ trợ Session cho WordPress

Khái niệm Session trong PHP: http://php.net/manual/en/book.session.php

Mặc định, khi Compile PHP sẽ đi kèm Session.

Việc sử dụng Session có một nhược điểm, thuật ngữ tiếng anh gọi là “Session Locking”. Nôm na là trong phiên làm việc, Session sẽ bị khóa, và các Session khác phải chờ cho tới khi Session đó hoàn thành (hoặc khi session_write_close được gọi) mới được xử lý. Vì vậy nếu có nhiều phiên Session liên tiếp thì đây chính là nơi thắt cổ chai trong toàn bộ quá trình giao tiếp giữa Server với trình duyệt.
Session Locking là nhược điểm, nhưng cũng chính là điều cần thiết để tránh hiện tượng Session bị thay đổi ngay trong quá trình đang xử lý, thuật ngữ tiếng Anh gọi là “Race Conditions”. Cũng giống như việc khóa ROW của MySQL với Table dạng MyISAM.

Nhưng với WordPress, việc PHP hỗ trợ Session là vô nghĩa. Lý do bởi trong mã nguồn của WordPress chỉ sử dụng Cookie chứ không sử dụng chút nào Session. Thậm chí việc bật Session còn làm WordPress trở nên ỳ ạch hơn, do có thể có một hay vài Session nào đó đang xử lý và việc hiển thị trang phải chờ cho tới khi Session đó được hoàn thành.
Ví dụ dễ nhận thấy là trong quá trình WordPress Update hay bật/tắt Plugin nào đó, việc chuyển trang trong WordPress sẽ phải chờ tới khi quá trình Update hoàn thành (hoặc tệ hơn là timeout).

Kết hợp với việc Server cây nhà lá vườn, điều kiện có thừa nên từ hôm nay sẽ sử dụng 1 bản PHP được Compile không hỗ trợ Session để dành riêng cho WordPress. Phiên bản PHP sử dụng là 7.0, đảm bảo hiệu năng tốt nhất và cập nhật những bản vá một cách nhanh nhất.

Sử dụng PHP không hỗ trợ Session sẽ kéo theo một số Plugin hay Theme cho WordPress không hoạt động được (hoặc ra trang ERROR nếu Enable). Trong tình huống này là Plugin WP Ajaxify Comments và Theme Enfold.
WP Ajaxify Comments là một Plugin rất hay giúp những Comments được gửi sẽ hiển thị dạng AJAX thay vì Load lại trang. Còn Enfold là một Theme rất đẹp, nhẹ và nhiều chức năng dành cho WordPress. Trong danh sách Best Seller của ThemeForest thì Enfold đứng thứ 3. Mấy hôm trước đã có ý định sử dụng Enfold cho trang Blog, và thực sự đã bắt tay vào chỉnh sửa rất nhiều thứ để hoàn thiện Enfold, nhưng nay thật tiếc nuối phải chuyển sang một Theme khác. Thực sự rất tiếc.

Để đảm bảo tính tương thích, các mã nguồn khác (như vBulletin) vẫn sẽ sử dụng bản PHP có hỗ trợ Session.