2010-09-05 3 views
6

Tôi lấy cảm hứng từ Slashdot, tôi nghe nói rằng nó sử dụng các máy chủ rất hạn chế để hỗ trợ rất nhiều người dùng có phản hồi nhanh. Và có một trang web có tên là slashcode, không chắc chắn nếu slashdot sử dụng mã nguồn của nó.Là perl cách nhanh nhất để viết một trang hiệu suất cao?

Tôi tự hỏi nếu Perl là tốt nhất để viết một trang web hiệu suất cao? Tôi biết bằng cách sử dụng Apache hoặc IIS sẽ có rất nhiều chi phí?

Bất kỳ ý tưởng, sách, giấy tờ, hướng dẫn nào?

+9

Kiến trúc tốt sẽ quan trọng hơn ngôn ngữ. Điều này bao gồm các lớp khác như bộ nhớ đệm, cơ sở dữ liệu, lưu trữ tệp, v.v. –

+0

Có, dấu gạch chéo là mã phía sau Slashdot. Nó sử dụng Apache + mod_perl. –

Trả lời

14

Tôi sẽ giả định rằng bằng "hiệu suất cao", bạn có nghĩa là cả trong thời gian thực được thực hiện để tạo ra một trang và cũng có bao nhiêu nó có thể phục vụ đồng thời.

Ngôn ngữ lập trình không quan trọng bằng máy chủ và thuật toán của bạn. Bạn có thể muốn xem xét The C10k Problem là một loạt các công nghệ mới và sàng lọc các kỹ thuật với mục đích cho phép một máy chủ web duy nhất xử lý đồng thời hơn 10.000 kết nối đồng thời. Những thứ như máy chủ web Nginxlighttpdvarnish bộ nhớ cache xuất hiện từ dự án này.

Chiến thắng lớn đến từ việc sử dụng một máy chủ web rất nhẹ, rất nhanh, rất mô-đun (Apache và IIS không phải là nó) với bộ nhớ cache rất nhẹ, rất nhanh ở phía trước để tránh phải xử lý cùng một điều hai lần . Đối với một máy chủ đồng thời cao, ngay cả bộ nhớ đệm trong vài giây có thể giúp bạn tiết kiệm hàng trăm hoặc hàng ngàn quy trình. Bằng cách cắt một trang tĩnh thành một chuỗi các yêu cầu AJAX, bạn có thể lưu trữ các bit và các phần tĩnh hơn một cách độc lập với các bit thay đổi thường xuyên.

Thay vì sử dụng mod_blah để nhúng chương trình của bạn vào máy chủ web, hãy sử dụng FastCGI hoặc tương tự để đặt chương trình của bạn vào các máy chủ ứng dụng nhỏ của riêng chúng. Điều này cho phép họ chạy độc lập với máy chủ web, có thể trên các máy từ xa và với cân bằng tải. Điều này cho phép bạn dễ dàng mở rộng sức mạnh xử lý của bạn. Cuối cùng, bạn sẽ tối ưu hóa vi mô các bit thực sự quan trọng của mã ứng dụng của bạn đến điểm mà ngôn ngữ quan trọng, nhưng bạn có thể tập trung vào các bit thực sự quan trọng thay vì phải thực hiện toàn bộ dự án theo hiệu suất thô .

0

This post trên serverfault gợi ý rằng bạn có thể viết mô-đun tiện ích mở rộng để nginx để phân phối nội dung động.

Mô-đun như vậy cần phải được biên dịch thành mã máy gốc, vì vậy rất có thể nhanh hơn khi chạy Perl.

+0

Cảm ơn, nhưng một số loại tôi không muốn sử dụng C/C++ để viết các trang web, python có thể được ưa thích ... Hình web.py tốt? –

3

Bất kể mã của bạn nhanh như thế nào, tại một số điểm, nút cổ chai sẽ không còn là mã của bạn nữa, và bắt đầu là máy chủ web.

2

Miễn là bạn không sử dụng giao diện CGI [1] để nói chuyện với máy chủ web, ngôn ngữ sẽ không có tác động đáng kể đến hiệu suất trong 99% các trường hợp. Các ngoại lệ là những thứ mà bạn đang thực hiện xử lý hậu trường nặng hơn là chỉ cần lấy một thứ gì đó ra khỏi cơ sở dữ liệu, nhẹ nhàng xoa bóp nó và gửi nó cho người dùng - và, nếu bạn đang làm điều đó, bạn ' có khả năng tốt hơn khi thực hiện nó một cách không đồng bộ nếu có thể và nhồi nhét các kết quả vào cơ sở dữ liệu để được mát xa nhẹ nhàng và được xem sau này.

Lý do là, khá đơn giản, kết nối mạng và thời gian truyền dữ liệu sẽ dài hơn nhiều so với thời gian thực hiện chương trình của bạn mà nó thậm chí không vui. Nếu mất 2 giây để thiết lập kết nối mạng đến máy chủ và thực hiện truyền dữ liệu theo từng hướng, sẽ không có ai quan tâm liệu quá trình xử lý trên máy chủ có thêm 0,1 giây hoặc 0,2 giây trên 2 giây hoạt động mạng hay không.

[1] Lưu ý rằng tôi đang nói ở đây về CGI vani "khởi động một tiến trình mới để phục vụ mỗi yêu cầu đến" mô hình, không module CGI Perl (CGI.pm/use CGI). Có nhiều cách để use CGI đồng thời sử dụng quy trình tồn tại lâu dài, xử lý nhiều yêu cầu trong suốt thời gian tồn tại của nó.

1

Kiến trúc và thiết kế hệ thống quan trọng hơn lựa chọn ngôn ngữ cho ứng dụng lưu lượng truy cập cao.

Nhưng chọn ngôn ngữ không phải là điều đầu tiên bạn nên làm, trừ khi bạn định viết mọi thứ từ đầu.

Bạn nên chọn bộ công cụ.

Nếu bạn muốn có thứ gì đó sớm nhất, hãy xem các ứng dụng web hiện có. Điều gì đáp ứng nhu cầu của bạn? Làm thế nào tùy biến là nó? Liệu nó có đáp ứng các yêu cầu về hiệu suất/khả năng mở rộng của bạn không? Nếu vậy, ngôn ngữ bạn sử dụng sẽ là ngôn ngữ mà ứng dụng của bạn sử dụng.

Nếu bạn không thể tìm thấy kết quả phù hợp trong các ứng dụng hiện có, hãy xem các khung công tác, Catalyst, Rails, Squatting, Camping, Jifty, Django. Có a nice list of them on Wikipedia.

Bạn sẽ có thể tìm thấy một khuôn khổ sẽ thực hiện công việc, nhiều trong số đó. Chọn một số ứng cử viên và chọn một ứng cử viên. Ngôn ngữ bạn sử dụng sẽ là ngôn ngữ mà khung của bạn sử dụng.

-1

Tôi không tin nó sẽ nhanh hơn các lựa chọn phổ biến khác như PHP, Python, Ruby, Java hoặc C#.

+0

mod_perl cho phép tích hợp rất chặt chẽ với Apache (chương trình của bạn trở thành một chương trình con bên trong Apache), vì vậy nó có thể nhanh hơn. –

+0

@Alexandr Ciornii wow, cảm ơn vì sự giảm giá. Nhưng, không có bằng chứng cho thấy Perl có hiệu năng cao hơn PHP, Python, Perl, v.v. trên Apache. –

1

Thực sự không có thứ gì như "trang hiệu suất cao". Điều đó giống như yêu cầu những gì chiếc xe nhanh nhất là (và nếu bạn xem đủ Top Gear, bạn biết đó không phải là một câu trả lời đơn giản). Bạn phải suy nghĩ về những gì bạn thực sự muốn làm (tức là nhiệm vụ cụ thể), những gì bạn phải làm để làm cho điều đó xảy ra, và những công cụ nào sẽ làm việc tốt nhất cho điều đó.

Bạn sẽ có nhiều người làm nhiều việc nhỏ, hoặc ít người làm những việc lớn hơn? Có phải tất cả sẽ xảy ra cùng một lúc (tức là tăng đột biến), hoặc nó sẽ là nhu cầu không đổi? Bạn có gửi lại các khối dữ liệu nhỏ hoặc phục vụ các tệp thực sự lớn không?

Giả sử rằng mọi phần đều nhanh nhất có thể. Đó là một tưởng tượng chắc chắn, nhưng hãy xem xét nó anyway. Bây giờ mọi thứ đều nhanh nhất có thể, xếp hạng mọi phần theo mức độ tương đối nhanh của chúng. Phần chậm nhất là gì? Là nó truy cập đĩa? Mạng IO? Ổ cắm sẵn có?

Nếu bạn không ở điểm mà bạn đang nghĩ về điều này, ngôn ngữ có thể không quan trọng ngoài kỹ năng của bạn.

Có rất nhiều sách về hiệu suất web trên mạng. :)