Cách phát triển từ thiết lập máy chủ đơn


8

Tôi đang tìm kiếm tài nguyên về cách phát triển thiết lập máy chủ của chúng tôi.

Chúng tôi hiện có một máy chủ chuyên dụng có Rackspace ở Anh với thông số kỹ thuật sau:

HPDL385_G2_PrevGen
HP Dual Dual Opteron 2214 (2.2Ghz)
RAM 4GB
2x 10.000 SCSI Ổ đĩa trong RAID 1

Lưu lượng truy cập của chúng tôi lên tới 550.000 UV mỗi tháng.

Trang web chạy một thiết lập PHP và MySQL. Cơ sở dữ liệu bị tấn công tuyệt đối, chúng tôi có nhiều truy vấn phức tạp khi tham gia các bảng nhiều lớp.

Chúng tôi đang sử dụng APC cho bộ nhớ đệm PHP.

Tôi đang đến giai đoạn mà tôi đã thực hiện càng nhiều DB và tối ưu hóa truy vấn càng tốt và tự hỏi bước tiếp theo sẽ là gì ......

Tôi đã xem memcache, nhưng tôi có cảm tưởng rằng anh ta cần một lượng RAM lớn và lý tưởng là một hộp chuyên dụng ....

Vậy là bước tiếp theo để có hai hộp; Một cho cơ sở dữ liệu, một cho Apache? Hoặc có một bước tôi đã bỏ qua.

Tải của chúng tôi thường ở khoảng 2 điểm, nhưng hiện tại nó đã lên đến 20!

Một số biểu đồ từ Munin:

mys CPU ký ức


Tôi sẽ kiểm tra Erik, cảm ơn. Có ai nghĩ rằng việc tăng dung lượng RAM sẽ có tác dụng lớn không? Tôi nghĩ rằng nó đắt từ Rackspace mặc dù, £ 50 / GB / tháng IIRC.

Bạn đang làm MySQL đọc và viết hoặc là một trong những quan trọng hơn so với cái khác?
wag2639

Tôi không tin điều này nên đã được chuyển từ SO. Mở rộng ra ngoài một hộp duy nhất cũng là một vấn đề lập trình vì nó là một vấn đề phần cứng. Hơn nữa, thực sự. Mua phần cứng dễ dàng. Viết mã sử dụng nó theo cách có thể mở rộng theo chiều ngang là khó.
Nông dân Frank

wag2639 phần lớn các truy vấn được chọn. Theo biểu đồ munin của tôi, lượt truy cập bộ nhớ cache chiếm khoảng 50% tổng số .... có cách nào để tôi có thể đăng ảnh không? Đỉnh điểm là 2.160 QPS, trung bình 522 QPS.
Jon M

Câu trả lời:


3

Mua một số phần cứng, nhưng đặt nó trong phòng thí nghiệm thử nghiệm của bạn không phải trong trung tâm dữ liệu. Sau đó nhấn mạnh ứng dụng của bạn trên các kết hợp phần cứng / phần mềm khác nhau cho đến khi bạn tìm thấy một kết hợp hợp lý sẽ làm những gì bạn muốn.

Tất nhiên, bạn sẽ cần phải thiết kế một cái gì đó có thể tạo ra lưu lượng giả dựa trên cơ sở dữ liệu giống như sản xuất đang chạy bản sao thử nghiệm của ứng dụng của bạn. Nhưng ai nói nó sẽ dễ dàng.

Nếu bạn không làm điều này và chỉ đơn giản là làm một số thứ trong sản xuất, bạn sẽ không biết liệu nó có hiệu quả hay không và bạn có thể đã dành RẤT NHIỀU nỗ lực kỹ thuật để thực hiện những thứ như bộ nhớ cache (sẽ đi kèm với chia sẻ công bằng của họ lỗi!) trên một cái gì đó không giúp đỡ.

Kiểm tra, thử nghiệm, và thử nghiệm nhiều hơn nữa. Đừng ném các thay đổi phần cứng / phần mềm vào sản xuất cho đến khi bạn có dữ liệu hiệu suất tốt cho thấy có khả năng cải thiện vấn đề đáng kể. Nỗ lực kỹ thuật là tốn kém, phần cứng thử nghiệm không (đặc biệt).


Memcached chỉ là một tùy chọn và có lẽ bạn không cần phải xem xét nó cho đến khi bạn có bộ nhớ đệm của cơ sở dữ liệu hoạt động tối ưu. Điều này có nghĩa là đặt nó trên một hộp chuyên dụng (tất nhiên là 64 bit) với dung lượng RAM hợp lý (không phải 4G - máy tính xách tay hiện nay có 32G, chắc chắn là giá cả phải chăng) và điều chỉnh phù hợp.

Bạn đã không đề cập đến cơ sở dữ liệu của bạn lớn như thế nào, nhưng nếu nó hoàn toàn khả thi, bạn sẽ muốn thử lấy nó hoàn toàn trong ram (hoặc ít nhất là các bit nóng). Việc cơ sở dữ liệu của bạn hoàn toàn trong ram sẽ làm cho các hoạt động IO đọc biến mất hoàn toàn và do đó không còn là nút cổ chai.

Hồ sơ truy vấn cơ sở dữ liệu của bạn. Có các công cụ gõ xung quanh để làm điều này - bạn sẽ có thể mô phỏng tải sản xuất trong môi trường thử nghiệm của bạn. Bí quyết là tránh các truy vấn chậm và đảm bảo rằng các truy vấn thường được thực hiện nhanh.

Nếu các vấn đề về hiệu suất của bạn có liên quan đến đồng bộ hóa IO, vì bạn chỉ thực hiện quá nhiều giao dịch cho cơ sở dữ liệu, hãy đảm bảo rằng bạn đang sử dụng bộ điều khiển đột kích được hỗ trợ bằng pin đang hoạt động đúng (nói chuyện với nhà cung cấp của bạn về chúng). Chúng cung cấp nhiều thao tác ghi IO hơn so với hoạt động không dùng pin (vì dữ liệu chỉ cần vào bộ đệm trước khi HĐH nhận được xác nhận). Ngoài ra, nếu dữ liệu của bạn không quan trọng đến mức đó, hãy xem xét việc thư giãn các tham số độ bền của cơ sở dữ liệu (đồng bộ hóa innodb trên cam kết).


32G không phải là quá hợp lý khi bạn thuê phần cứng. Và thuê phần cứng thường tiết kiệm hơn khi bạn chỉ có một hoặc hai hộp.
Nông dân Frank

MarkR / Frank, bạn có thể cung cấp thêm thông tin chi tiết dựa trên các biểu đồ tôi đã đăng ở trên không? Báo giá cuối cùng của tôi cho RAM bổ sung là ~ £ 50 / GB / tháng!
Jon M

1

Bằng cách xem xét các giải pháp bộ nhớ đệm, như nhiều người khác đã đề xuất ở đây, bạn có thể mong đợi kết thúc với khoảng 10% tải bạn có ngày hôm nay, có thể ít hơn.

Tuy nhiên, điều này phụ thuộc vào loại dịch vụ bạn chạy trên máy của bạn. Bạn có thể làm rất nhiều với memcached mà không cần nhiều RAM.

Bạn nên cố gắng lập hồ sơ các truy vấn cơ sở dữ liệu nào lâu nhất, bằng cách sử dụng nhật ký truy vấn chậm của MySQL (hoặc tương đương với cơ sở dữ liệu của bạn) hoặc bằng cách sử dụng một công cụ như mytop . Ngoài ra, EXPLAIN SELECTcú pháp của MySQL có thể hữu ích.

Lưu trữ kết quả của một vài truy vấn MySQL đã chọn (thậm chí chỉ trong một khoảng thời gian ngắn) thực sự có thể cải thiện hiệu suất của bạn rất nhiều.


Cảm ơn Vegard. Có, tôi thường xuyên tham khảo nhật ký truy vấn chậm và lệnh giải thích về các truy vấn của mình. Máy chủ gần như chỉ chạy các phiên bản apache và MySQL, nhưng chúng tôi cũng thực hiện một số việc như chuyển đổi video, mà tôi đang trong quá trình chuyển sang máy chủ đám mây.

Nếu vấn đề của bạn thực sự là hết các luồng apache, bạn có thể giảm tải một cách tầm thường bằng cách cài đặt nginx (hoặc một proxy ngược nhẹ khác) trước apache. Nginx sau đó có thể phục vụ nội dung tĩnh và đảm nhận nhiệm vụ cho ăn các byte khách chậm, giải phóng apache để làm những gì nó thực sự cần: hoạt động như một thùng chứa ứng dụng PHP. Để biết tổng quan đầy đủ hơn về khái niệm này, hãy xem: modperlbook.org/html/ Kẻ
Frank Farmer

Cảm ơn Frank, điều này chắc chắn có vẻ hợp lý, tôi đã chuyển hết mức có thể lên Amazon S3, thực tế nó chỉ là UGC, nhưng bây giờ tôi cũng cố gắng đưa tất cả các yếu tố đồ họa và CSS vào đó. Tôi chắc chắn có một số tinh chỉnh Apache và MySQL sẽ được thực hiện.
Jon M

1

Tôi thực hiện rất nhiều hiệu suất và mở rộng quy mô công việc và những gì tôi đã khám phá ra là:

Mỗi tải ứng dụng là duy nhất

Các phản hồi chung chung như thêm nhiều ram, nhận máy chủ khác, làm y, thử x thường là những bài học trong sự thất vọng và để lại các thiết lập phức tạp.

Đo lường những điều đúng đắn

Một trong những thách thức lớn nhất là xác định điểm chuẩn nào là quan trọng. Điều này thường đòi hỏi một bước lùi và bạn phải đặt mình vào vị trí của khách hàng. Đôi khi, thiết kế trang web đơn giản thay đổi và có nghĩa là lợi ích to lớn cho khách truy cập web. Đây là lý do tại sao tôi thích các công cụ như YSlow! tập trung nhiều vào trải nghiệm của người dùng cuối hơn là cấp độ máy chủ. Khi bạn quyết định điểm chuẩn phù hợp cho trang web của mình là gì, thì bạn có thể bắt đầu điều chỉnh. Điểm chuẩn có thể là tổng thời gian tải trang, tổng kích thước trang, hiệu quả bộ đệm, độ trễ trang, v.v. Bạn phải chọn một điểm hợp lý cho ứng dụng của mình.

Các loại hạt và bu lông

Một bạn đang theo dõi điểm chuẩn đúng, bắt đầu ở mức rất thấp. Tôi thích sử dụng sysstat. Bạn có thể nhận được rất nhiều thông tin từ sysstat và giúp bạn trêu chọc hệ thống nào có thể hạn chế hiệu năng ứng dụng tổng thể. Nói chung, tôi giải quyết các vấn đề về hiệu suất:

  • ngăn xếp mạng
  • ngăn xếp bộ nhớ
  • đĩa io
  • lớp ứng dụng
  • lớp os

Sử dụng sysstat và các công cụ khác, bạn có thể bắt đầu chia tóc và tìm hệ thống hạn chế hiệu suất.

Ví dụ: tôi đã thấy các máy chủ tải cao bị lỗi do cách ứng dụng của chúng được cấu hình. Bộ nhớ đệm kém, thiếu tiêu đề hết hạn trên nội dung tĩnh, sử dụng HTTP so với tệp bao gồm, v.v ... tất cả đều góp phần vào hiệu suất ứng dụng kém. Khắc phục các sự cố ứng dụng này không yêu cầu thay đổi phần cứng. Trong các trường hợp khác, tôi đã thấy các đĩa được tối đa hóa mặc dù có rất nhiều bộ nhớ đệm. Di chuyển đến đĩa nhanh hơn đã khắc phục vấn đề.

Rửa sạch và lặp lại

Thông thường trong quá trình điều chỉnh ứng dụng, bạn sẽ mở nút cổ chai để chỉ tìm một nút khác. Đây là lý do tại sao tôi khuyên bạn nên cố gắng theo dõi bất cứ điều gì bạn đang điều chỉnh.

Ví dụ: giả sử bạn khắc phục sự cố IO đĩa nhưng ứng dụng của bạn vẫn chậm. Bạn có thể nghĩ rằng mình đã lãng phí công sức của mình, nhưng điều xảy ra là bạn đơn giản gặp phải một nút cổ chai khác. Bằng cách theo dõi IO đĩa cẩn thận, bạn có thể chắc chắn rằng mình đang cải thiện IO đĩa ngay cả khi màn hình hiệu suất ứng dụng quan trọng của bạn không thay đổi.

Nhận đúng công cụ

Hãy chắc chắn rằng bạn đang sử dụng các công cụ phù hợp cho công việc. Giám sát, kiểm tra, đo điểm chuẩn, định hình và các kỹ thuật tối ưu hóa khác đều có nhiều công cụ khác nhau. Tìm công cụ phù hợp nhất với tình huống của bạn nhất.

Quy tắc của ngón tay cái

Mặc dù mỗi ứng dụng là duy nhất, tôi tìm thấy một số điểm bắt đầu tiêu chuẩn:

  • cơ sở dữ liệu bộ nhớ yêu bộ nhớ
  • đĩa io bất cứ điều gì nhưng đột kích 10 có thể giết chết hiệu suất cơ sở dữ liệu
  • tối ưu hóa sai - giá trị lớn không chuyển thành hiệu suất lớn
  • ứng dụng - đổ lỗi cho máy chủ cho thiết kế ứng dụng kém

Bước tiếp theo của bạn

Nếu bạn không tìm thấy nút cổ chai của mình, việc thêm máy chủ có thể không giúp ích nhiều. Để giải quyết đĩa IO, bạn có thể cần một máy chủ hoặc SAN khác. Nếu bạn có một nút cổ chai ram, một máy chủ khác sẽ chỉ giải quyết vấn đề ở chỗ nó có thêm RAM. Di chuyển khá tốn kém so với việc chỉ thêm RAM vào máy chủ hiện tại của bạn.

Khắc phục nhanh

Quá triển khai. Tôi đã phải làm điều này khi nó xuất hiện ngăn xếp ứng dụng là vấn đề. Về cơ bản tải lên CPU, RAM và đĩa IO (RAID 10, 15K SCSI hoặc SSD). Đi lớn trên phần cứng và sau đó bắt đầu điều chỉnh. Điều này giữ cho bạn nổi cho đến khi bạn giải quyết vấn đề.


0

Tôi muốn nói bước tiếp theo sẽ là bộ đệm (bộ đệm dữ liệu và / hoặc bộ đệm trang tùy thuộc vào chức năng của bạn). Nếu memcached có vẻ quá phức tạp, bạn có thể bắt đầu với các giải pháp lưu trữ dữ liệu đơn giản như PEAR Cache Lite chỉ cần vài dòng mã nhưng có thể tạo ra sự khác biệt lớn. Bộ nhớ đệm trang (hoặc phần trang) được hỗ trợ bởi công cụ mẫu Smarty chẳng hạn.

Khi bộ nhớ đệm không cắt nó nữa, bạn có thể tăng số lượng máy chủ vì không còn gì nữa.


Cảm ơn lời khuyên của bạn Serg, tôi đã lưu vào bộ nhớ cache HTML ở nhiều nơi và sử dụng một số truy vấn cơ sở dữ liệu qua đêm để điền vào một số bảng "tra cứu nhanh".

0

Nếu bạn có đủ RAM miễn phí, memcached sẽ giúp bạn ngay cả trên cùng một hộp. Hãy thử lưu trữ một số truy vấn nặng nhất và để xem điều gì sẽ xảy ra. Ngoài ra, Apache quá nặng, thay vào đó hãy sử dụng nginx hoặc lighttpd (với ứng dụng PHP hoạt động thông qua FastCGI, xem php-fpm ).


Nếu bạn có đủ RAM miễn phí và mysql chậm trả lời các truy vấn đọc, bạn không điều chỉnh mysql đúng. sử dụng ram cho cơ sở dữ liệu thay thế. Bộ nhớ đệm của MySQL sẽ hoàn toàn trong suốt đối với ứng dụng, không giới thiệu các lỗi và không bao giờ trả lại dữ liệu cũ.
MarkR

Bộ đệm truy vấn mysql, đối với nhiều khối lượng công việc, bị vô hiệu hóa quá mạnh mẽ là đáng giá. Cập nhật một hàng trên một bảng sẽ làm mất hiệu lực mọi truy vấn đối với bảng đó.
Nông dân Frank

0

Bắt đầu bộ nhớ đệm, nhưng bỏ qua MySQL ngay bây giờ. Seriouosly.

Quy tắc nên là - dừng một yêu cầu NHƯ SỚM NHƯ VẬY. Vì vậy, một proxy ngược hoặc bộ đệm ẩn cấp độ Apache phù hợp sẽ mang lại cho bạn kết quả tốt nhất, sau đó lưu trữ kết quả cấp độ sql trong ứng dụng, sau đó lưu trữ bộ nhớ cache cấp độ sql;)

Bạn càng sớm dừng yêu cầu, bạn càng có ít chi phí. Mức bộ đệm đầu ra - thậm chí không cần PHP để chạy, có thể nói như vậy.

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.