Làm thế nào để bạn kiểm tra tải và lập kế hoạch năng lực cho các trang web?


113

Đây là một câu hỏi kinh điển về lập kế hoạch năng lực cho các trang web.

Liên quan:

Một số công cụ được đề xuất và phương pháp lập kế hoạch dung lượng cho các trang web và ứng dụng web là gì?

Xin vui lòng mô tả các công cụ và kỹ thuật khác nhau cho các máy chủ web, khung, v.v. khác nhau, cũng như các thực tiễn tốt nhất áp dụng cho các máy chủ web nói chung.

Câu trả lời:


127

Câu trả lời ngắn gọn là: Không ai có thể trả lời câu hỏi này trừ bạn.

Câu trả lời dài là việc đo điểm chuẩn khối lượng công việc cụ thể của bạn là điều mà bạn cần phải tự thực hiện, bởi vì nó giống như hỏi "Một đoạn dây dài bao nhiêu?".

Một trang web tĩnh một trang đơn giản có thể được lưu trữ trên Pentium Pro 150 và vẫn phục vụ hàng ngàn lần hiển thị mỗi ngày.

Cách tiếp cận cơ bản bạn cần thực hiện để trả lời câu hỏi này là thử nó và xem điều gì sẽ xảy ra. Có rất nhiều công cụ mà bạn có thể sử dụng để đặt hệ thống của bạn dưới áp lực một cách giả tạo để xem nó khóa ở đâu.

Tổng quan ngắn gọn về điều này là:

  • Đặt kịch bản của bạn vào vị trí
  • Thêm giám sát
  • Thêm lưu lượng
  • Đánh giá kết quả
  • Khắc phục dựa trên kết quả
  • Rửa sạch, lặp lại cho đến khi hạnh phúc hợp lý

Đặt kịch bản của bạn vào vị trí

Về cơ bản, để kiểm tra một số tải, bạn cần một cái gì đó để kiểm tra. Thiết lập một môi trường để kiểm tra chống lại. Đây có thể là một phỏng đoán khá gần với phần cứng sản xuất của bạn nếu có thể, nếu không bạn sẽ bị ngoại suy dữ liệu của mình.

Thiết lập máy chủ, tài khoản, trang web, băng thông, v.v. Ngay cả khi bạn thực hiện việc này trên máy ảo, chỉ cần bạn chuẩn bị để thu nhỏ kết quả của mình.

Vì vậy, tôi sẽ thiết lập một máy ảo trung cấp (hai lõi, RAM 512 MB, ổ cứng 4 GB) và cài đặt bộ cân bằng tải yêu thích của tôi, haproxybên trong Red Hat Linux trên VM.

Tôi cũng sẽ có hai máy chủ web phía sau bộ cân bằng tải mà tôi sẽ sử dụng để kiểm tra căng thẳng bộ cân bằng tải. Hai máy chủ web này được thiết lập giống hệt với hệ thống trực tiếp của tôi.

Thêm giám sát

Bạn sẽ cần một số số liệu để theo dõi, vì vậy tôi sẽ đo xem có bao nhiêu yêu cầu đến máy chủ web của tôi và bao nhiêu yêu cầu tôi có thể thực hiện trong mỗi giây trước khi người dùng bắt đầu nhận được thời gian phản hồi hơn hai giây.

Tôi cũng sẽ theo dõi việc sử dụng RAM, CPU và ổ đĩa haproxyđể đảm bảo rằng bộ cân bằng tải có thể xử lý các kết nối.

Làm thế nào để làm điều này phụ thuộc rất nhiều vào nền tảng của bạn và nằm ngoài phạm vi của câu trả lời này. Bạn có thể cần xem lại tệp nhật ký máy chủ web, bắt đầu bộ đếm hiệu suất hoặc dựa vào khả năng báo cáo của công cụ kiểm tra căng thẳng của mình.

Một vài điều bạn luôn muốn theo dõi:

  • Sử dụng CPU
  • Sử dụng RAM
  • Sử dụng đĩa
  • Độ trễ đĩa
  • Sử dụng mạng

Bạn cũng có thể chọn xem xét các bế tắc SQL, tìm kiếm thời gian, v.v. tùy thuộc vào những gì bạn đang kiểm tra cụ thể.

Thêm lưu lượng

Đây là nơi mọi thứ trở nên vui vẻ. Bây giờ bạn cần phải mô phỏng một tải thử nghiệm. Có rất nhiều công cụ có thể làm điều này, với các tùy chọn cấu hình:

Chọn một số, bất kỳ số nào. Giả sử bạn sẽ thấy hệ thống phản hồi như thế nào với 10.000 lượt truy cập mỗi phút. Không quan trọng bạn chọn số nào vì bạn sẽ lặp lại bước này nhiều lần, điều chỉnh số đó lên hoặc xuống để xem hệ thống phản hồi như thế nào.

Tốt nhất, bạn nên phân phối 10.000 yêu cầu này qua nhiều máy khách / nút kiểm tra tải để một máy khách không trở thành nút cổ chai của yêu cầu. Ví dụ, Kiểm tra từ xa của JMeter cung cấp giao diện trung tâm để khởi chạy một số máy khách từ máy Jmeter kiểm soát.

Nhấn nút ma thuật Go và xem các máy chủ web của bạn tan chảy và sụp đổ.

Đánh giá kết quả

Vì vậy, bây giờ bạn cần quay lại các số liệu bạn đã thu thập ở bước 2. Bạn thấy rằng với 10.000 kết nối đồng thời, haproxyhộp của bạn hầu như không bị đổ mồ hôi, nhưng thời gian phản hồi với hai máy chủ web chỉ mất 5 giây. Điều đó không thú vị - hãy nhớ rằng, thời gian phản hồi của bạn đang nhắm đến hai giây. Vì vậy, chúng ta cần thực hiện một số thay đổi.

Khắc phục

Bây giờ, bạn cần tăng tốc trang web của mình hơn hai lần. Vì vậy, bạn biết rằng bạn cần phải tăng quy mô hoặc mở rộng quy mô.

Để mở rộng quy mô, hãy lấy máy chủ web lớn hơn, RAM nhiều hơn, đĩa nhanh hơn.

Để mở rộng quy mô, có được nhiều máy chủ hơn.

Sử dụng số liệu của bạn từ bước 2 và thử nghiệm để đưa ra quyết định này. Ví dụ, nếu bạn thấy rằng độ trễ của đĩa là rất lớn trong quá trình thử nghiệm, bạn biết rằng bạn cần mở rộng quy mô và nhận được các ổ cứng nhanh hơn.

Nếu bạn thấy rằng bộ xử lý đã ở mức 100% trong quá trình thử nghiệm, có lẽ bạn cần mở rộng ra để thêm các máy chủ web bổ sung để giảm áp lực cho các máy chủ hiện có.

Không có câu trả lời đúng hay sai chung chung, chỉ có những gì phù hợp với bạn. Hãy thử nhân rộng và nếu điều đó không hiệu quả, thay vào đó hãy mở rộng ra. Hoặc không, tùy thuộc vào bạn và một số suy nghĩ bên ngoài hộp.

Hãy nói rằng chúng tôi sẽ mở rộng quy mô. Vì vậy, tôi quyết định sao chép hai máy chủ web của mình (chúng là VM) và bây giờ tôi có bốn máy chủ web.

Rửa sạch, lặp lại

Bắt đầu lại từ Bước 3. Nếu bạn thấy rằng mọi thứ không diễn ra như bạn mong đợi (ví dụ: chúng tôi đã nhân đôi máy chủ web, nhưng thời gian phản hồi vẫn còn hơn hai giây), sau đó xem xét các nút thắt khác. Ví dụ: bạn đã nhân đôi các máy chủ web, nhưng vẫn có một máy chủ cơ sở dữ liệu xảo quyệt. Hoặc, bạn đã nhân bản nhiều máy ảo hơn, nhưng vì chúng trên cùng một máy chủ vật lý, bạn chỉ đạt được sự tranh chấp cao hơn đối với tài nguyên máy chủ.

Sau đó, bạn có thể sử dụng quy trình này để kiểm tra các phần khác của hệ thống. Thay vì nhấn bộ cân bằng tải, hãy thử đánh trực tiếp máy chủ web hoặc máy chủ SQL bằng công cụ đo điểm chuẩn SQL .


1
Điều này là tuyệt vời để kiểm tra tải, nhưng nói rất ít về kế hoạch năng lực. Ai có thể viết về kiến ​​trúc có thể mở rộng của Google, được hình thành từ rất sớm hoặc các lựa chọn thay thế sử dụng các hộp ít hơn và đắt hơn.
rleir

10

Lập kế hoạch năng lực bắt đầu bằng đo lường, trong trường hợp này là thời gian đáp ứng so với tải. Khi bạn biết mức độ mà các chương trình chậm lại với tải, KHÔNG phải là hàm tuyến tính, bạn có thể chọn mục tiêu thời gian đáp ứng, sau đó khám phá những tài nguyên nào sẽ cần để đáp ứng mục tiêu đó cho một lượng tải nhất định.

Đo lường hiệu suất luôn được thực hiện với các đơn vị thời gian , như

  • họ là những gì người dùng quan tâm
  • chúng có thể được thu nhỏ lên xuống

Những thứ như% CPU và IOPS là dành riêng cho hệ thống, vì vậy bạn chỉ sử dụng chúng khi bạn đã lên kế hoạch cho hệ thống và đo lường nó trước khi sản xuất, để hoạt động như một "thay thế" cho điều bạn quan tâm, thời gian.


8

Kế hoạch năng lực là một con thú rắc rối. Đó là khoa học nhiều như nghệ thuật (nếu chắc chắn là một bóng tối).

Trường hợp tốt nhất của bạn là bạn đưa ra quyết định sáng suốt vận may / may mắn ủng hộ bạn bằng cách thực tế đáp ứng các giả định của bạn. Nếu năng lực của bạn cần những giả định phù hợp với thực tế, bạn trông giống như một hành giả thần bí. Thật không may, nếu các giả định của bạn vượt quá thực tế, bạn sẽ xuất hiện để có quá nhiều và quá mức. Thật không may, nếu các giả định của bạn thấp hơn thực tế cuối cùng (hoặc không chính xác), bạn sẽ thiếu năng lực mà bạn cần, và sẽ phải tranh giành để giảm thiểu những thất bại của cơ sở hạ tầng rên rỉ, khiến bạn trông như thiếu năng lực.

Không áp lực...

Thật không may, nghệ thuật lập kế hoạch dung lượng tối đa có thể được chắt lọc một cách hợp lý vào một câu trả lời Lỗi Máy chủ duy nhất; thực sự, đó là một chủ đề xứng đáng với sách.

May mắn thay, có một cuốn sách như vậy: " Nghệ thuật lập kế hoạch năng lực "


5

Để mở rộng bài đăng của Mark Henderson, tôi đang viết cụ thể này cho Apache. Để nhắc lại những gì ông nói, "Câu trả lời ngắn gọn là: Không ai có thể trả lời câu hỏi này ngoại trừ bạn." Văn bản của câu trả lời này được mượn rất nhiều từ câu trả lời của tôi cho một câu hỏi tương tự về hiệu suất của trang web Drupal .

Định cấu hình Apache với Mod_Prefork

Apache được cho là một trong những máy chủ web phổ biến nhất (nếu không phải là). Nó là nguồn mở và vẫn được duy trì tích cực. Bạn có thể chạy nó trên cả hệ điều hành Linux và Windows, nhưng phổ biến hơn trong thế giới Linux / Unix.

Bạn không bao giờ nên sử dụng cấu hình Apache ngoài luồng. Bạn luôn cần điều chỉnh Apache đến trang web của bạn. Tệp cấu hình chính của Apache trên CentOS được đặt tại /etc/httpd/conf/httpd.confvà tệp cấu hình chính của Apache trên các hệ thống Ubuntu thường được đặt tại /etc/apache2/apache2.conf. Các tệp cấu hình bổ sung được sử dụng cho những thứ như Máy chủ ảo .

Giống như nhiều phần mềm, Apache được xây dựng để linh hoạt và tùy chỉnh theo nhu cầu của một trang web cụ thể. Có các Mô-đun đa xử lý khác nhau mà Apache có thể được cấu hình để sử dụng để liên kết với một cổng mạng và chấp nhận & xử lý các yêu cầu.

Hầu hết thời gian trên các cài đặt Apache mặc định đi kèm với máy chủ CentOS và Ubuntu, MPM " mod_prefork " được sử dụng. Giả sử bạn đang sử dụng mod_prefork (nếu bạn không chắc chắn, thì điều đó càng có khả năng, nhưng chỉ bạn mới có thể xác định điều đó) Đây là những điều cơ bản về cách định cấu hình nó:

  • Chỉ ra dung lượng bộ nhớ tối đa bạn muốn Apache có thể sử dụng.
  • Kiểm tra trang web của bạn một cách mạnh mẽ và xác định số lượng bộ nhớ mà mỗi quy trình Apache sử dụng (sử dụng hàng đầu).
  • Lấy quy trình Apache ở trên cùng sử dụng nhiều bộ nhớ nhất, thêm một chút vào đó để có biện pháp tốt và sau đó chia số đầu tiên của bạn (số lượng bộ nhớ tối đa bạn muốn Apache sử dụng) cho số mới này.
  • Số bạn nhận được phải là MaxClients& ServerLimitbiến của bạn .

Đây chắc chắn không phải là câu trả lời cuối cùng. Điều chỉnh máy chủ Apache của bạn cần có thời gian và yêu cầu kinh nghiệm để làm cho đúng.


1
Việc sử dụng bộ nhớ chỉ dựa trên đầu là hơi thiếu sót, vui lòng kiểm tra Fe stackoverflow.com/questions/7880784/, ngoài ra bạn có thể muốn sử dụng tập lệnh python "ps_mem.py" thay vì sử dụng bộ nhớ trực tiếp hoặc thậm chí sử dụng các giá trị được đính kèm theo quy trình / Proc
Dennis Nolte

1
Toàn bộ câu trả lời là có giá trị vì ghi chú bạn đã thêm: "Bạn không bao giờ nên sử dụng cấu hình Apache ngoài luồng". Chúng ta không bao giờ có thể nhấn mạnh điều này đủ.
ezra-s

0

Ngoài ra tôi sẽ đề nghị nói chuyện với Kiến trúc sư & Kỹ sư đã thiết kế / xây dựng các ứng dụng để cố gắng xác định các tắc nghẽn, các điểm lỗi đơn và các giới hạn cấp phép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.