Khắc phục máy chủ quá tải

Cách xác định nút thắt cổ chai của máy chủ, nhanh chóng khắc phục tình trạng tắc nghẽn, cải thiện hiệu suất của máy chủ và ngăn chặn sự cố hồi quy.

Katie Hempenius
Katie Hempenius

Tổng quan

Hướng dẫn này sẽ hướng dẫn bạn cách khắc phục máy chủ bị quá tải theo 4 bước:

  1. Đánh giá: Xác định nút thắt cổ chai của máy chủ.
  2. Ổn định: Triển khai các bản sửa lỗi nhanh để giảm thiểu tác động.
  3. Cải thiện: Tăng cường và tối ưu hoá các chức năng của máy chủ.
  4. Theo dõi: Sử dụng các công cụ tự động để giúp ngăn chặn các vấn đề trong tương lai.

Đánh giá

Khi lưu lượng truy cập làm quá tải máy chủ, một hoặc nhiều yếu tố sau đây có thể trở thành nút thắt cổ chai: CPU, mạng, bộ nhớ hoặc I/O đĩa. Việc xác định xem vấn đề nào là nút thắt cổ chai sẽ giúp bạn có thể tập trung vào những biện pháp giảm thiểu có tác động lớn nhất.

  • CPU: Bạn nên điều tra và khắc phục mức sử dụng CPU liên tục trên 80%. Hiệu suất của máy chủ thường giảm khi mức sử dụng CPU đạt khoảng 80-90% và trở nên rõ ràng hơn khi mức sử dụng đạt gần 100%. Mức sử dụng CPU để phân phát một yêu cầu là không đáng kể, nhưng việc này ở quy mô gặp phải trong thời gian lưu lượng truy cập tăng đột biến đôi khi có thể làm quá tải máy chủ. Việc giảm tải việc phân phát sang cơ sở hạ tầng khác, giảm các hoạt động tốn kém và giới hạn số lượng yêu cầu sẽ làm giảm mức sử dụng CPU.
  • Mạng: Trong những khoảng thời gian có lưu lượng truy cập cao, băng thông mạng cần thiết để thực hiện các yêu cầu của người dùng có thể vượt quá công suất. Một số trang web, tuỳ thuộc vào nhà cung cấp dịch vụ lưu trữ, cũng có thể đạt đến giới hạn về việc truyền dữ liệu tích luỹ. Việc giảm kích thước và số lượng dữ liệu được chuyển đến và từ máy chủ sẽ loại bỏ nút thắt cổ chai này.
  • Bộ nhớ: Khi hệ thống không có đủ bộ nhớ, dữ liệu phải được chuyển sang ổ đĩa để lưu trữ. Ổ đĩa truy cập chậm hơn đáng kể so với bộ nhớ và điều này có thể làm chậm toàn bộ ứng dụng. Nếu bộ nhớ bị cạn kiệt hoàn toàn, thì có thể dẫn đến lỗi Hết bộ nhớ (OOM). Bạn có thể loại bỏ nút thắt cổ chai này bằng cách điều chỉnh mức phân bổ bộ nhớ, khắc phục lỗi rò rỉ bộ nhớ và nâng cấp bộ nhớ.
  • I/O ổ đĩa: Tốc độ đọc hoặc ghi dữ liệu từ ổ đĩa bị chính ổ đĩa hạn chế. Nếu I/O của ổ đĩa là nút thắt cổ chai, thì việc tăng lượng dữ liệu được lưu vào bộ nhớ đệm có thể làm giảm vấn đề này (với chi phí là tăng mức sử dụng bộ nhớ). Nếu cách này không hiệu quả, bạn có thể phải nâng cấp ổ đĩa.

Các kỹ thuật trong hướng dẫn này tập trung vào việc giải quyết nút thắt cổ chai CPU và mạng. Đối với hầu hết các trang web, CPU và mạng sẽ là những nút thắt cổ chai phù hợp nhất trong thời gian lưu lượng truy cập tăng đột biến.

Việc chạy top trên máy chủ bị ảnh hưởng là một điểm khởi đầu phù hợp để điều tra nút thắt cổ chai. Nếu có, hãy bổ sung dữ liệu trong quá khứ từ nhà cung cấp dịch vụ lưu trữ hoặc công cụ giám sát.

Ổn định

Máy chủ quá tải có thể nhanh chóng dẫn đến loạt sự cố ở nơi khác trong hệ thống. Do đó, điều quan trọng là phải ổn định máy chủ trước khi cố gắng thực hiện những thay đổi quan trọng hơn.

Giới hạn số lần gọi

Giới hạn tốc độ bảo vệ cơ sở hạ tầng bằng cách giới hạn số lượng yêu cầu đến. Điều này ngày càng quan trọng khi hiệu suất của máy chủ giảm: khi thời gian phản hồi tăng lên, người dùng có xu hướng làm mới trang một cách mạnh mẽ – làm tăng thêm tải máy chủ.

Cách khắc phục

Mặc dù việc từ chối yêu cầu tương đối không tốn kém, nhưng cách tốt nhất để bảo vệ máy chủ của bạn là xử lý việc giới hạn tốc độ ở một nơi nào đó phía trước máy chủ, chẳng hạn như thông qua bộ cân bằng tải, proxy ngược hoặc CDN.

Hướng dẫn:

Tài liệu đọc thêm:

Hoạt động lưu vào bộ nhớ cache HTTP

Tìm cách lưu nội dung vào bộ nhớ đệm hiệu quả hơn. Nếu một tài nguyên có thể được phân phát từ bộ nhớ đệm HTTP (cho dù đó là bộ nhớ đệm của trình duyệt hay CDN), thì tài nguyên đó không cần được yêu cầu từ máy chủ gốc, từ đó giảm tải máy chủ.

Các tiêu đề HTTP như Cache-Control, ExpiresETag cho biết cách bộ nhớ đệm HTTP lưu tài nguyên vào bộ nhớ đệm. Việc kiểm tra và khắc phục các tiêu đề này sẽ cải thiện việc lưu vào bộ nhớ đệm.

Mặc dù trình chạy dịch vụ cũng có thể được dùng để lưu vào bộ nhớ đệm, nhưng các trình này sử dụng một bộ nhớ đệm riêng biệt và là phần bổ sung chứ không phải thay thế cho việc lưu vào bộ nhớ đệm HTTP thích hợp. Vì lý do này, khi xử lý máy chủ bị quá tải, bạn nên tập trung vào việc tối ưu hoá tính năng lưu vào bộ nhớ đệm HTTP.

Chẩn đoán

Chạy Lighthouse và xem quy trình kiểm tra Phân phát thành phần tĩnh bằng chính sách bộ nhớ đệm hiệu quả để xem danh sách tài nguyên có thời gian tồn tại (TTL) ngắn đến trung bình. Đối với mỗi tài nguyên được liệt kê, hãy cân nhắc việc tăng TTL. Dưới đây là một số nguyên tắc chung:

  • Tài nguyên tĩnh phải được lưu vào bộ nhớ đệm với TTL dài (1 năm).
  • Tài nguyên động phải được lưu vào bộ nhớ đệm với TTL ngắn (3 giờ).

Cách khắc phục

Đặt lệnh max-age của tiêu đề Cache-Control thành số giây thích hợp.

Hướng dẫn:

Suy giảm nhẹ

Giảm tải linh hoạt là chiến lược tạm thời giảm chức năng để giảm tải thừa khỏi hệ thống. Bạn có thể áp dụng khái niệm này theo nhiều cách: ví dụ: phân phát trang văn bản tĩnh thay vì ứng dụng đầy đủ tính năng, tắt tính năng tìm kiếm hoặc trả về ít kết quả tìm kiếm hơn hoặc tắt một số tính năng tốn kém hoặc không cần thiết. Bạn nên tập trung xoá những chức năng có thể xoá một cách an toàn và dễ dàng mà ít ảnh hưởng đến hoạt động kinh doanh.

Cải thiện

Sử dụng mạng phân phối nội dung (CDN)

Bạn có thể chuyển việc phân phát các thành phần tĩnh từ máy chủ sang mạng phân phối nội dung (CDN), nhờ đó giảm tải.

Chức năng chính của CDN là phân phối nội dung đến người dùng một cách nhanh chóng bằng cách cung cấp một mạng lưới lớn các máy chủ nằm gần người dùng. Tuy nhiên, hầu hết các CDN cũng cung cấp các tính năng khác liên quan đến hiệu suất như nén, cân bằng tải và tối ưu hoá nội dung nghe nhìn.

Thiết lập CDN

CDN được hưởng lợi từ quy mô, vì vậy, việc vận hành CDN của riêng bạn hiếm khi hợp lý. Bạn có thể thiết lập cấu hình CDN cơ bản khá nhanh (~30 phút) và bao gồm việc cập nhật bản ghi DNS để trỏ đến CDN.

Tối ưu hoá mức sử dụng CDN

Chẩn đoán

Xác định các tài nguyên không được phân phát từ CDN (nhưng đáng lẽ phải được phân phát) bằng cách chạy WebPageTest. Trên trang kết quả, hãy nhấp vào hình vuông phía trên mục "Sử dụng CDN hiệu quả" để xem danh sách tài nguyên cần phân phát từ CDN.

Mũi tên trỏ đến nút "Sử dụng CDN hiệu quả"
Kết quả WebPageTest

Cách khắc phục

Nếu CDN không lưu một tài nguyên vào bộ nhớ đệm, hãy kiểm tra để đảm bảo rằng tài nguyên đó đáp ứng các điều kiện sau:

Điều chỉnh theo tỷ lệ tài nguyên điện toán

Bạn cần phải cân nhắc kỹ lưỡng trước khi quyết định mở rộng quy mô tài nguyên điện toán. Mặc dù thường cần phải mở rộng quy mô tài nguyên điện toán, nhưng việc làm như vậy sớm có thể tạo ra sự phức tạp về cấu trúc và chi phí tài chính không cần thiết.

Chẩn đoán

Thời gian cho byte đầu tiên (TTFB) cao có thể là dấu hiệu cho thấy máy chủ sắp đạt đến giới hạn. Bạn có thể tìm thấy thông tin này trong quy trình kiểm tra Giảm thời gian phản hồi của máy chủ (TTFB) của Lighthouse.

Để điều tra thêm, hãy sử dụng một công cụ giám sát để đánh giá mức sử dụng CPU. Nếu mức sử dụng CPU hiện tại hoặc dự kiến vượt quá 80%, bạn nên cân nhắc tăng số lượng máy chủ.

Cách khắc phục

Việc thêm bộ cân bằng tải cho phép phân phối lưu lượng truy cập trên nhiều máy chủ. Trình cân bằng tải nằm trước một nhóm máy chủ và định tuyến lưu lượng truy cập đến máy chủ thích hợp. Các nhà cung cấp dịch vụ đám mây cung cấp trình cân bằng tải của riêng họ (GCP, AWS, Azure) hoặc bạn có thể thiết lập trình cân bằng tải của riêng mình bằng HAProxy hoặc NGINX. Sau khi thiết lập bộ cân bằng tải, bạn có thể thêm các máy chủ khác.

Ngoài tính năng cân bằng tải, hầu hết các nhà cung cấp dịch vụ đám mây đều cung cấp tính năng tự động mở rộng quy mô (GCP, AWS, Azure). Tính năng tự động mở rộng hoạt động cùng với tính năng cân bằng tải – tính năng tự động mở rộng sẽ tự động tăng và giảm tài nguyên điện toán theo nhu cầu tại một thời điểm nhất định. Tuy nhiên, tính năng tự động điều chỉnh quy mô không phải là một phép màu – cần có thời gian để các thực thể mới hoạt động và cần có cấu hình đáng kể. Do tính năng tự động điều chỉnh quy mô đòi hỏi thêm nhiều yếu tố phức tạp, nên trước tiên, bạn nên cân nhắc việc thiết lập dựa trên bộ cân bằng tải đơn giản hơn.

Bật nén

Các tài nguyên dựa trên văn bản phải được nén bằng gzip hoặc brotli. Gzip có thể giảm kích thước truyền tải của các tài nguyên này khoảng 70%.

Chẩn đoán

Sử dụng quy trình kiểm tra Bật tính năng nén văn bản của Lighthouse để xác định những tài nguyên cần được nén.

Cách khắc phục

Bật tính năng nén bằng cách cập nhật cấu hình máy chủ. Hướng dẫn:

Tối ưu hoá hình ảnh và nội dung nghe nhìn

Hình ảnh chiếm phần lớn kích thước tệp của hầu hết các trang web; việc tối ưu hoá hình ảnh có thể giúp giảm kích thước trang web một cách nhanh chóng và đáng kể.

Chẩn đoán

Lighthouse có nhiều quy trình kiểm tra gắn cờ các phương án tối ưu hoá hình ảnh tiềm năng. Ngoài ra, bạn có thể sử dụng DevTools để xác định các tệp hình ảnh lớn nhất – những hình ảnh này có thể là ứng cử viên phù hợp để tối ưu hoá.

Các bài kiểm tra có liên quan trên Lighthouse:

Quy trình làm việc của Chrome DevTools:

Cách khắc phục

Nếu bạn có ít thời gian…

Hãy tập trung vào việc xác định những hình ảnh lớn và thường xuyên được tải, đồng thời tối ưu hoá các hình ảnh đó theo cách thủ công bằng một công cụ như Squoosh. Hình ảnh chính thường là những hình ảnh phù hợp để tối ưu hoá.

Những điều cần lưu ý:

  • Kích thước: Hình ảnh không được lớn hơn mức cần thiết.
  • Nén: Nhìn chung, mức chất lượng 80-85 sẽ ảnh hưởng rất ít đến chất lượng hình ảnh trong khi giảm kích thước tệp từ 30 đến 40%.
  • Định dạng: Sử dụng ảnh JPEG cho ảnh thay vì PNG; sử dụng MP4 cho nội dung động thay vì GIF.

Nếu bạn có thêm thời gian…

Hãy cân nhắc việc thiết lập CDN hình ảnh nếu hình ảnh chiếm một phần đáng kể trên trang web của bạn. CDN hình ảnh được thiết kế để phân phát và tối ưu hoá hình ảnh, đồng thời sẽ giảm tải việc phân phát hình ảnh từ máy chủ gốc. Việc thiết lập CDN hình ảnh rất đơn giản nhưng bạn cần cập nhật URL hình ảnh hiện có để trỏ đến CDN hình ảnh.

Tài liệu đọc thêm:

Rút gọn JS và CSS

Việc rút gọn sẽ xoá các ký tự không cần thiết khỏi JavaScript và CSS.

Chẩn đoán

Sử dụng quy trình kiểm tra Rút gọn CSSRút gọn JavaScript của Lighthouse để xác định những tài nguyên cần rút gọn.

Cách khắc phục

Nếu bạn có ít thời gian, hãy tập trung vào việc rút gọn JavaScript. Hầu hết các trang web đều có nhiều JavaScript hơn CSS, vì vậy, điều này sẽ có tác động lớn hơn.

Giám Sát

Các công cụ giám sát máy chủ cung cấp tính năng thu thập dữ liệu, trang tổng quan và cảnh báo về hiệu suất của máy chủ. Việc sử dụng các tính năng này có thể giúp ngăn chặn và giảm thiểu các vấn đề về hiệu suất máy chủ trong tương lai.

Bạn nên thiết lập chế độ giám sát càng đơn giản càng tốt. Việc thu thập và cảnh báo dữ liệu quá mức sẽ gây ra chi phí: phạm vi hoặc tần suất thu thập dữ liệu càng lớn thì chi phí thu thập và lưu trữ càng cao; việc cảnh báo quá mức sẽ dẫn đến việc bỏ qua các trang.

Tính năng cảnh báo phải sử dụng các chỉ số phát hiện vấn đề một cách nhất quán và chính xác. Thời gian phản hồi của máy chủ (độ trễ) là một chỉ số đặc biệt hiệu quả cho việc này: chỉ số này phát hiện được nhiều vấn đề và có mối tương quan trực tiếp với trải nghiệm người dùng. Cảnh báo dựa trên các chỉ số cấp thấp hơn như mức sử dụng CPU có thể là một phần bổ sung hữu ích nhưng sẽ phát hiện được một số ít vấn đề. Ngoài ra, hệ thống sẽ gửi cảnh báo dựa trên hiệu suất được ghi nhận ở phần đuôi (tức là phân vị thứ 95 hoặc 99), thay vì hiệu suất trung bình. Nếu không, giá trị trung bình có thể dễ dàng che khuất những vấn đề không ảnh hưởng đến tất cả người dùng.

Cách khắc phục

Tất cả các nhà cung cấp dịch vụ đám mây lớn đều cung cấp công cụ giám sát riêng (GCP, AWS, Azure). Ngoài ra, Netdata là một giải pháp thay thế nguồn mở và miễn phí tuyệt vời. Bất kể bạn chọn công cụ nào, bạn đều cần cài đặt tác nhân giám sát của công cụ đó trên mỗi máy chủ mà bạn muốn giám sát. Sau khi hoàn tất, hãy nhớ thiết lập tính năng cảnh báo.

Hướng dẫn: