Tăng tốc nạp trang web lên 10-15 phần trăm

Submitted by superthin on 23/01/2020 - 10:32:42
Máy chủ LAMP, rất thông dụng

Trang web nạp xuống chậm gây ức chế cho người duyệt web, những người có thể là đối tác, khách hàng tiềm năng. Ngay cả nếu bạn là lãnh đạo, nhân viên của một công ty, trang web của công ty bạn nạp quá chậm, bạn sẽ cảm thấy rất xấu hổ khi giới thiệu đến đối tác. Tăng tốc web là việc phải làm, bài viết này thuộc loạt bài mô tả cách làm.

Giới hạn trong phạm vi web dùng công nghệ LAMP hoặc LEMP

Nếu website của bạn sử dụng công nghệ .NET, Java, hay Python, đây không phải là bài thích hợp, có rất ít điều có thể học hỏi, rút tỉa.

Mô tả chủ yếu dựa trên máy chủ họ Linux với 2 distro thông dụng đó là CentOS và Ubuntu, Apache, MySQL, PHP. Bạn dùng máy chủ với distro khác, hãy dùng lệnh tương ứng với họ Linux đó.

Bài này không đi chuyên sâu step by step vào chi tiết thực hành từng bước với hình minh họa, dòng lệnh,... chỉ mô tả cách làm, giải thích vì sao làm như vậy.

Yêu cầu về hệ thống để có thể thực hiện được những gì bài này nói đến

- Phải có máy chủ server ảo VPS hoặc máy chủ dành riêng dedicated chạy hệ điều hành CentOS hoặc Ubuntu. Mục đích phải có máy chủ mà bạn có toàn quyền truy cập là bởi vì có những thông số cần phải điều chỉnh, cài thêm những thành phần đòi hỏi quyền root.

- Nếu bạn thuê hosting dạng shared hosting, xin chia buồn cùng bạn, gần như không thể làm gì được, đừng cố.

Kiểm tra lại hệ thống xem website bạn đang chạy với những gì?

- Nếu server bạn chưa cài đặt để trờ thành web server phục vụ các trang web, ứng dụng web chạy PHP với các thứ thông dụng WordPress, Joomla!, Laravel, CodeIgniter,... bạn không cần phải kiểm đếm, chắc chắn biết nó có gì.

- Máy chủ web của bạn do ai đó cài đặt hoặc bạn đã cài lâu rồi trước đây đến nỗi không còn nhớ rõ hệ thống đang có gì. Cách đơn giản nhất đó là tạo một file phpinfo.php có nội dung gọi hàm phpinfo() rồi gõ nó lên thanh địa chỉ trình duyệt để xem thông tin, nắm hiện trạng.

- Khi đã có thông tin về máy chủ web, cụ thể: Apache/ nginx, MySQL/ MariaDB, PHP phiên bản nào thì phải ghi chi tiết (ví dụ: Apache 2.4.25 với các module mod_php, mod_rewrite, mod_gzip,...) ra để xem xét cụ thể từng món một. Mục đích của việc làm này: lát nữa khi nâng cấp, ta dùng phiên bản mới hơn, và ổn định nhất thay vì cài đặt một cách hú họa.

- Sau khi đã có danh sách chi tiết về các thứ như vừa kể, bạn cũng xem thử ứng dụng web, trang web, website mà bạn đang chạy trên server gồm có những cái nào, có những mô-đun hay mã viết thêm nào,... tính tương thích ra sao. Mục đích: tránh trường hợp nâng cấp cơ sở dữ liệu MySQL, MariaDB, PHP lên phiên bản mới hơn khiến cho mã code của ứng dụng cũ, sử dụng những hàm lỗi thời (deprecated function) sinh ra thông báo/ báo lỗi hoặc nặng hơn là làm đổ vỡ cả ứng dụng.

- Tra cứu lại ứng dụng PHP đang chạy với danh sách các món Apache/ nginx, MySQL/ MariaDB, PHP xem thử version sẽ nâng cấp lên tối đa được bao nhiêu. Hiện có repository nào có sẵn để có thể gõ lệnh (yum trên CentOS, apt trên Ubuntu) cài đặt tự động hay là phải download các gói rpm, deb về cài đặt thủ công, hay trong trường hợp khắc nghiệt hơn, buộc phải tải source về, compile, rồi mới cài đặt.

- Tự đánh giá kinh nghiệm bản thân/ sự liều lĩnh/ rủi ro để chuyển sang bước thực hành. Ở đây, nếu bạn không thuộc loại "điếc không sợ súng" và chưa có nhiều kinh nghiệm, chỉ nên nâng cấp ở mức gõ lệnh có sẵn, mức tải các gói binary về cài thủ công có thể thử tập tành, còn bước tải source về compile thành binary rồi cài là dành cho người có kinh nghiệm.

Sơ lược các bước tiến hành sau khi đã có đầy đủ thông tin

- Khi đã liệt kê, kiểm đếm ở trên, hoạch định chính xác những gì sẽ làm, ước đoán thời gian mất bao lâu, nên làm vào lúc nào để tránh sự gián đoạn quá lâu, phục hồi khó khăn hay gây ra thảm họa nếu trên server có nhiều ứng dụng web cùng chạy.

- Chuẩn bị đường truyền tốt, kết nối ổn định, hệ thống điện dự phòng,.. càng chu đáo càng tốt, tùy theo việc gián đoạn hệ thống web của bạn gây ra thiệt hại nào mà trang bị tương xứng để việc nâng cấp là nhanh chóng, xong sớm.

- Sao lưu lại tất cả để chắc rằng nếu kém may mắn, việc "lên đời" thất bại, còn có chiêu "undo" để quay về lại hiện trạng cũ. Tránh trường hợp nâng cấp đâu không thấy, chỉ thấy mọi thứ biến mất không thể khắc phục.

- Nên tắt hết các service Apache/ nginx, MySQL/ MariaDB, php-fpm trước khi nâng cấp để tránh hệ thống web đang có người truy cập sẽ tạo ra những giao dịch dở dang, khó dự trù.

Ý tưởng chung về việc nâng cấp

- Nếu web server đang là Apache, dùng mod_php để phục vụ web, hãy chuyển sang dùng module FastCGI (mod_fcgid) kèm với php-fpm. Tại sao được khuyến cáo dùng FastCGI? Bạn đọc đâu đó thấy về mặt lý thuyết, mod_php sẽ cho tốc độ lớn hơn. Giải thích: mod_php cho tốc độ cao hơn nếu tất cả các file đều là mã PHP. Thực tế, website của bạn có nhiều file tĩnh khác như JavaScript, CSS, file văn bản, hình ảnh này nọ... đều phải đi qua "trình biên dịch PHP" chẳng để làm gì, chỉ làm tốc độ giảm xuống. Hơn nữa, có lẽ website của bạn đang dùng SSL/TLS certificate để phục vụ HTTPS theo khuyến cáo của Google nhằm đạt lợi ích về SEO. Lúc này, nếu dùng mod_php sẽ bạn cấu hình HTTP/2 (giúp tốc độ HTTPS nhanh hơn, vì HTTPS chậm hơn so với HTTP) cực kỳ vất vả, nhưng lại dễ dàng với FastCGI + php-fpm.

- Nếu các ứng dụng web không quá phức tạp với các luật rewrite phức tạp, bạn dễ dàng tìm thấy đâu đó sẵn những cấu hình chuyển từ .htaccess sang file .conf của nginx, bạn hãy chuyển từ Apache sang dùng nginx với FastCGI + php-fpm để tiết kiệm tài nguyên hệ thống hơn, tốc độ nạp trang nhanh hơn. Qua nhiều lượt test của nhiều người đánh giá khác nhau, người ta thấy rằng máy chủ nginx phục vụ file tĩnh tốt hơn Apache.

- PHP 5.x cần phải nâng cấp lên PHP 7.x vì tổ chức PHP Group không còn hỗ trợ PHP 5.x nữa, trường hợp này có thể phải sửa lại một số đoạn mã trong ứng dụng web của bạn nếu những ứng dụng đó quá xưa, không được phát triển trên PHP 7.x.

- Mô-đun liên quan đến gzip có khả năng mặc định trước đây chưa cài với Apache/ nginx của bạn hoặc có cài nhưng chưa được enable, hãy enable nó để giúp cho việc nén file nhỏ lại trước khi gửi trả về trình duyệt web, cũng giúp tốc độ nạp trang nhanh hơn.

- Nếu các ứng dụng web của bạn đang có trên server chạy được với MariaDB, hãy sử dụng MariaDB thay cho MySQL bởi vì MariaDB có chu kỳ phát hành nhanh hơn, đưa vào một số cải tiến giúp tốc độ tốt hơn, tài liệu phong phú, tra cứu dễ dàng từ cộng đồng.

- Sau khi đã nâng cấp lần lượt máy chủ web, hệ quản trị cơ sở dữ liệu, PHP, lúc này có thể bật lại một website có mức độ phức tạp cao (nếu server có nhiều website) để theo dõi log có vấn đề gì, nếu có, kịp khắc phục trước khi cho tất cả website hoạt động trở lại.

Bài tiếp theo Thin bàn đến các kỹ thuật "gia cố từng thành phần" để làm web server nhanh hơn, cơ sở dữ liệu nhanh hơn, trình biên dịch mã PHP nhanh hơn.

Mời bạn trong vòng hai tuần quay lại, đón đọc!