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

Cách xác định điểm tắc nghẽn của máy chủ, nhanh chóng sửa nút thắt này, cải thiện hiệu suất của máy chủ và ngăn chặn sự hồi quy.

Katie Hempenius
Katie Hempenius

Tổng quan

Hướng dẫn này cho bạn biết cách khắc phục máy chủ quá tải qua 4 bước:

  1. Đánh giá: Xác định điểm tắc nghẽn của máy chủ.
  2. Ổn định: Triển khai các biện pháp khắc phục nhanh để giảm thiểu tác động.
  3. Cải thiện: Bổ sung và tối ưu hoá khả năng của máy chủ.
  4. Giám sát: 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ột máy chủ, một hoặc nhiều yếu tố sau có thể trở thành nút thắt cổ chai: CPU, mạng, bộ nhớ hoặc I/O của ổ đĩa. Việc xác định được đâu là điểm tắc nghẽn trong số này, giúp bạn có thể tập trung nỗ lực vào những giải pháp giảm thiểu có tác động mạnh mẽ nhất.

  • CPU: mức sử dụng CPU nhất quán trên 80% nên được điều tra và khắc phục. Hiệu suất của máy chủ thường giảm khi mức sử dụng CPU đạt đến ~80-90% và trở nên rõ ràng hơn khi mức sử dụng gần đến 100%. Việc sử dụng CPU để phân phát một yêu cầu duy nhất là không đáng kể, nhưng việc này ở quy mô lớn gặp phải trong thời gian tăng đột biến về lưu lượng truy cập đôi khi có thể làm quá tải máy chủ. Giảm tải việc phân phối cho cơ sở hạ tầng khác, giảm các thao tác tiêu tốn nhiều tài nguyên 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 thời gian có lưu lượng truy cập cao, công suất mạng cần thiết để thực hiện yêu cầu của người dùng có thể vượt quá công suất. Một số trang web, tùy 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ề chuyển dữ liệu tích luỹ. Việc giảm kích thước và 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 giảm tải xuống đĩ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ớ hết, điều này có thể dẫn đến lỗi Hết bộ nhớ (OOM). Việc điều chỉnh quy trình phân bổ bộ nhớ, sửa lỗi rò rỉ bộ nhớ và nâng cấp bộ nhớ có thể loại bỏ nút thắt cổ chai này.
  • I/O trên ổ đĩa: Tốc độ mà dữ liệu có thể được đọc hoặc ghi từ ổ đĩa bị hạn chế bởi chính ổ đĩa. Nếu I/O ổ đĩa là nút thắt cổ chai, việc tăng lượng dữ liệu được lưu vào bộ nhớ đệm trong bộ nhớ có thể làm giảm vấn đề này (nhưng sẽ tăng mức sử dụng bộ nhớ). Nếu cách này không hiệu quả, có thể cần phải nâng cấp ổ đĩa của bạn.

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 của CPU và mạng. Đối với hầu hết các trang web, CPU và mạng sẽ là điểm tắc nghẽn phù hợp nhất trong thời điểm 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à khởi đầu phù hợp để tìm hiểu điểm tắc nghẽn. 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 của bạn.

Ổn định

Máy chủ quá tải có thể nhanh chóng dẫn đến lỗi xếp tầng ở 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 các thay đổi quan trọng hơn.

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

Giới hạn số lượng yêu cầu 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ủ suy 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 tích cực – làm tăng thêm tải cho máy chủ.

Khắc phục

Mặc dù việc từ chối một yêu cầu sẽ tương đối ít 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 số lượng yêu cầu ở đâu đó ngược dòng từ nguồn cấp dữ liệu – ví dụ: thông qua trình cân bằng tải, proxy ngược hoặc CDN.

Hướng dẫn:

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

Lưu vào bộ nhớ đệm của HTTP

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

Các tiêu đề HTTP như Cache-Control, ExpiresETag cho biết cách bộ nhớ đệm HTTP cần lưu tài nguyên vào bộ nhớ đệm. Kiểm tra và sửa các tiêu đề này sẽ cải thiện chức năng lưu vào bộ nhớ đệm.

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

Chẩn đoán

Chạy Lighthouse, xem bài kiểm tra Phân phát tài sản tĩnh với 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) từ 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 xem có nên tăng TTL hay không. Dưới đây là một nguyên tắc đơn giản:

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

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:

xuống cấp nhẹ

xuống cấp nhẹ là chiến lược giảm tạm thời chức năng để giảm tải quá tải khỏi hệ thống. Khái niệm này có thể được áp dụng theo nhiều cách khác nhau: ví dụ: phân phối một trang văn bản tĩnh thay vì một ứng dụng đầy đủ tính năng, vô hiệu hoá tìm kiếm hoặc trả về ít kết quả tìm kiếm hơn hoặc vô hiệu hoá một số tính năng đắt tiền hoặc không thiết yếu. Bạn nên nhấn mạnh việc loại bỏ những chức năng có thể xóa một cách an toàn và dễ dàng mà không gây ảnh hưởng lớn đế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ể giảm tải từ máy chủ sang mạng phân phối nội dung (CDN) để giảm tải cho việc phân phát tài sản tĩnh.

Chức năng chính của CDN là phân phối nội dung tới người dùng một cách nhanh chóng bằng cách cung cấp một mạng lưới máy chủ lớn đặt gần người dùng. Tuy nhiên, hầu hết các CDN cũng cung cấp thêm các tính năng 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ý. Cấu hình CDN cơ bản được thiết lập khá nhanh chóng (khoảng 30 phút) và bao gồm việc cập nhật các bản ghi DNS để trỏ đến CDN.

Tối ưu hoá việc sử dụng CDN

Chẩn đoán

Xác định tài nguyên không được phân phát từ CDN (nhưng nên đượ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 "Sử dụng hiệu quả CDN" để xem danh sách các tài nguyên nên được 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

Khắc phục

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

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

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

Chẩn đoán

Chỉ số Thời gian đến byte đầu tiên (TTFB) cao có thể là dấu hiệu cho thấy máy chủ sắp hết dung lượng. Bạn có thể tìm thấy thông tin này trong bài 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 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 xem xét tăng máy chủ.

Khắc phục

Khi thêm trình cân bằng tải, bạn có thể 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 đặt trước một nhóm các máy chủ và định tuyến lưu lượng truy cập đến máy chủ phù hợp. 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 trình cân bằng tải, bạn có thể thêm các máy chủ khác.

Ngoài khả 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 phương thức tự động cấp tài nguyên bổ sung (GCP, AWS, Azure). Phương thức tự động cấp tài nguyên bổ sung hoạt động kết hợp với cân bằng tải – tính năng tự động cấp tài nguyên tự động mở rộng tài nguyên điện toán theo nhu cầu tại một thời điểm nhất định. Mặc dù vậy, phương thức tự động cấp tài nguyên bổ sung không phải là điều kỳ diệu – cần thời gian để các thực thể mới xuất hiện trên mạng và đòi hỏi phải có cấu hình đáng kể. Do quy trình tự động cấp tài nguyên bổ sung phức tạp hơn, trước tiên, bạn nên cân nhắc việc thiết lập dựa trên trình 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ể làm giảm kích thước chuyển của các tài nguyên này xuống khoảng 70%.

Chẩn đoán

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

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ủ của bạn. 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 hóa hình ảnh có thể làm giảm nhanh và đáng kể kích thước của một trang web.

Chẩn đoán

Lighthouse có nhiều quy trình kiểm tra để gắn cờ các biện pháp tối ưu hoá hình ảnh tiềm năng. Ngoài ra, một chiến lược khác là sử dụng Công cụ cho nhà phát triển để 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 viên sáng giá để tối ưu hoá.

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

Quy trình công cụ của Chrome cho nhà phát triển:

Khắc phục

Nếu bạn không có nhiều thời gian...

Tập trung thời gian vào việc Xác định những hình ảnh lớn, thường xuyên tải và tối ưu hoá những 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à ứng viên tốt để 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: Nói chung, mức chất lượng 80-85 sẽ có ảnh hưởng tối thiểu đến chất lượng hình ảnh trong khi giảm kích thước tệp từ 30-40%.
  • Định dạng: Sử dụng tệp 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 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 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 khá đơn giản nhưng yêu cầu 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 Lighthouse Rút gọn CSSRút gọn JavaScript để xác định các tài nguyên cần giảm thiểu.

Khắc phục

Nếu bạn có thời gian hạn chế, hãy tập trung vào việc giảm kích thước JavaScript của mình. Hầu hết các trang web đều có nhiều JavaScript hơn CSS, nên việc này sẽ có tác động mạnh mẽ hơn.

Theo dõi

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 tính năng này có thể giúp ngăn ngừa và giảm thiểu các vấn đề về hiệu suất của máy chủ trong tương lai.

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

Tính năng cảnh báo phải sử dụng các chỉ số giúp 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 nhiều vấn đề và liên quan trực tiếp đến trải nghiệm người dùng. Việc đưa ra 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 cách bổ sung hữu ích nhưng sẽ phát hiện được một số vấn đề nhỏ hơn. Ngoài ra, cảnh báo nên dựa trên hiệu suất quan sát được ở đuôi (nói cách khác là phân vị thứ 95 hoặc 99), thay vì mức trung bình. Nếu không, số liệu trung bình có thể dễ dàng che giấu những vấn đề mà không ảnh hưởng đến tất cả người dùng.

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ể 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ụ này trên từng 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 cảnh báo.

Hướng dẫn: