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 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ố tái diễn.

Katie Hempenius
Katie Hempenius

Tổng quan

Hướng dẫn này trình bày cách khắc phục tình trạng máy chủ bị 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: Tăng cường và tối ưu hoá các chức 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áy chủ, một hoặc nhiều yếu tố sau đây có thể trở thành điểm tắc nghẽn: CPU, mạng, bộ nhớ hoặc I/O ổ đĩa. Việc xác định điểm tắc nghẽn nào trong số này giúp bạn có thể tập trung nỗ lực vào các biện pháp giảm thiểu tác động mạnh nhất.

  • CPU: Bạn nên điều tra và khắc phục tình trạng mức sử dụng CPU liên tục vượt quá 80%. Hiệu suất 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ệt hơn khi mức sử dụng gần đạt 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 thực hiện 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 hoạt động 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ẽ giúp 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, thông lượng mạng cần thiết để đáp ứng yêu cầu của người dùng có thể vượt quá dung lượng. 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 chuyể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à đi từ máy chủ sẽ loại bỏ điểm tắc nghẽn 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ữ. Tốc độ truy cập ổ đĩa 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ể điều chỉnh việc phân bổ bộ nhớ, khắc phục lỗi rò rỉ bộ nhớ và nâng cấp bộ nhớ để loại bỏ điểm tắc nghẽn này.
  • I/O trên ổ đĩa: Tốc độ đọc hoặc ghi dữ liệu từ ổ đĩa bị giới hạn bởi chính ổ đĩa đó. Nếu I/O ổ đĩa là điểm tắc nghẽn, thì việc tăng lượng dữ liệu được lưu vào bộ nhớ đệm có thể giảm bớt 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ể cần 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 các điểm tắc nghẽn về CPU và mạng. Đối với hầu hết các trang web, CPU và mạng sẽ là những điểm tắc nghẽn có liên quan nhất khi lưu lượng truy cập tăng đột biến.

Chạy top trên máy chủ bị ảnh hưởng là một điểm khởi đầu tốt để điều tra các điểm tắc nghẽn. Nếu có, hãy bổ sung dữ liệu này bằng 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ủ bị quá tải có thể nhanh chóng dẫn đến lỗi xếp tầng ở nhữ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 những thay đổi quan trọng hơn.

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

Giới hạn tốc độ giúp 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 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 dồn dập, khiến tải máy chủ tăng thêm nữa.

Cách khắc phục

Mặc dù việc từ chối yêu cầu tương đối ít tốn kém, nhưng cách tốt nhất để bảo vệ máy chủ là xử lý giới hạn tốc độ ở một nơi nào đó ngược dòng từ máy chủ, chẳng hạn như 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 HTTP

Tìm cách lưu nội dung vào bộ nhớ đệm một cách linh hoạt 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, giúp giảm tải máy chủ.

Các tiêu đề HTTP như Cache-Control, Expires và ETag cho biết cách một tài nguyên nên được lưu vào bộ nhớ đệm HTTP. Việc kiểm tra và sửa các tiêu đề này sẽ cải thiện khả năng 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 chúng sử dụng một bộ nhớ đệm riêng biệt và là một phần bổ sung, chứ không phải là một giải pháp 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 nỗ lực vào việc tối ưu hoá bộ nhớ đệm HTTP.

Chẩn đoán

Chạy Lighthouse và xem quy trình kiểm tra Phân phát tài sả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) 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. Sau đây là hướng dẫn sơ bộ:

  • 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:

Xuống cấp nhẹ

Xuống cấp nhẹ là chiến lược tạm thời giảm chức năng để giảm tải dư 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 chú trọng vào việc xoá những chức năng có thể xoá một cách an toàn và dễ dàng mà không ảnh hưởng nhiều đế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 cho máy chủ bằng cách chuyển việc phân phát tài sản tĩnh sang một mạng phân phối nội dung (CDN).

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

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

Chẩn đoán

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

Mũi tên chỉ vào nút "Sử dụng CDN hiệu quả"
Kết quả của WebPageTest

Cách khắc phục

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

Mở rộng tài nguyên điện toán

Bạn nên cân nhắc kỹ lưỡng khi quyết định mở rộng 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 này quá sớm có thể gây ra sự phức tạp không cần thiết về cấu trúc và chi phí tài chính.

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 công suất tối đa. 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 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 việc tăng số lượng máy chủ.

Cách khắc phục

Việc thêm trình cân bằng tải giúp 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 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 riêng (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 có 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 cấp tài nguyên bổ sung (GCP, AWS, Azure). Tính năng tự động cấp tài nguyên bổ sung hoạt động kết hợp với tính năng cân bằng tải – tự động cấp tài nguyên bổ sung 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, phương thức tự động cấp tài nguyên bổ sung không phải là phép màu – cần có thời gian để các thực thể mới hoạt động và cần phải định cấu hình đáng kể. Do tính phức tạp của phương thức tự động cấp tài nguyên bổ sung, bạn nên cân nhắc thiết lập dựa trên trình cân bằng tải đơn giản hơn trước.

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 chuyển 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ể nhanh chóng và giảm đá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 giúp gắn cờ các hoạt động 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à đề xuất phù hợp để tối ưu hoá.

Các quy trình kiểm tra có liên quan của Lighthouse:

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

Cách khắc phục

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

Hãy tập trung thời gian vào việc xác định những hình ảnh lớn và thường xuyên được tải, sau đó tối ưu hoá chúng theo cách thủ công bằng một công cụ như Squoosh. Hình ảnh chính thường là lựa chọn 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ẽ có ảnh hưởng tối thiểu đến chất lượng hình ảnh, đồng thời giảm 30-40% kích thước tệp.
  • Định dạng: Sử dụng JPEG cho ảnh thay vì PNG; sử dụng MP4 cho nội dung ảnh độ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 các 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

Quá trình 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 CSS và Rút gọn JavaScript của Lighthouse để xác định những tài nguyên cần được rút gọn.

Cách khắc phục

Nếu bạn không có nhiều thời gian, hãy tập trung vào việc giảm thiểu JavaScript. Hầu hết các trang web đều có nhiều JavaScript hơn CSS, vì vậy, việc này sẽ có tác động lớn hơn.

Giám Sát

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 công cụ 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 quy trình giám sát càng đơn giản càng tốt. Việc thu thập dữ liệu và cảnh báo quá mức sẽ 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ì chi phí thu thập và lưu trữ càng cao; việc cảnh báo quá mức chắc chắn sẽ dẫn đến việc bỏ qua các trang.

Tính năng cảnh báo nên 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 phù hợp 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 biện pháp bổ sung hữu ích nhưng sẽ chỉ phát hiện được một số ít vấn đề. Ngoài ra, việc cảnh báo phải dựa trên hiệu suất quan sát được ở phần đ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, giá trị trung bình có thể dễ dàng che khuất các 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ế miễn phí và nguồn mở tuyệt vời. Bất kể chọn công cụ nào, bạn cũng 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: