2013-06-07 23 views
15

phiên bản ngắn:Tôi nên sử dụng tiêu chí nào để đánh giá một máy chủ ứng dụng "Perl" (thay thế mod_perl)?

gì tiêu chí tôi nên sử dụng để đánh giá các ứng cử viên có thể cho một Perl "máy chủ ứng dụng" (mod_perl thay thế)?

Chúng tôi đang tìm kiếm một số loại khuôn khổ mà sẽ cho phép thực hiện các chương trình Perl khác nhau lặp đi lặp lại (như một dịch vụ) mà không có chi phí:

  1. tái launcing dịch perl một lần cho mỗi thực

  2. tải/biên dịch các module Perl một lần mỗi thực

(cả hai đều là những lợi ích mà chạy mod_ perl cung cấp)

Ghi chú:

  • Chúng tôi chăm sóc không nhiều về bất kỳ lợi ích bổ sung dành bởi mod_perl quá nhiều, như tích hợp Apache sâu.

  • Đây sẽ là máy chủ ứng dụng thuần túy, có nghĩa là không cần bất kỳ chức năng cụ thể nào trên web (không phải là vấn đề nếu máy chủ ứng dụng cung cấp, không cần thiết).

  • Tất nhiên chúng tôi sẽ xem xét các tiêu chí rõ ràng (tốc độ thô, ổn định sản xuất, phát triển tích cực, khả năng chạy trên hệ điều hành mà chúng tôi quan tâm). Điều tôi quan tâm là những thứ nhỏ nhặt và tinh tế mà chúng ta có thể mong muốn từ một khung công tác/máy chủ như vậy.

Bối cảnh:

Tại $ làm việc, quyền hạn mà được quyết định rằng họ muốn thay thế một tình huống hiện tại (webapps đơn giản được phát triển ở Embperl và triển khai thông qua Apache/mod_perl).

Quyết định được đưa ra để sử dụng hệ thống MVC (tự trồng) sẽ có giao diện người dùng Java Spring cho Chế độ xem; và Bộ điều khiển sẽ phân tích các yêu cầu dịch vụ back-end cho các dịch vụ cho từng ứng dụng thực hiện các nhiệm vụ Mô hình (không bị treo lên các chi tiết về điều này - nó không liên quan lắm đến câu hỏi chính).

Một trong các tùy chọn cho dịch vụ back-end là Perl, để chúng tôi có thể tận dụng tất cả IP Perl hiện có của chúng tôi (thư viện, mã phụ trợ webapp), và không phải chuyển 100% của nó sang Java.

Để tóm tắt:

| View | Model/app | Model loaded/executed by:       | 
================================================================================ 
OLD | Empberl | Model.pm | mod_perl has Model.pm loaded, called from view.epl | 
NEW | Java | Model.pm | perl generic_model.pl -model Model (does "require") | 
================================================================================ 

Bây giờ, những người bạn của những người đã làm phát triển Web Perl trong một thời gian, ngay lập tức sẽ nhận thấy vấn đề rõ ràng nhất với thiết kế mới:

| Perl interpreter starts | Perl modules are loaded and compiled | 
======================================================================= 
OLD | Once per mod_perl thread | Once per mod_perl thread 
NEW | Once per EVERY! request | Once per EVERY! request    | 
======================================================================= 

Nói cách khác , trong mô hình mới, chúng tôi không còn có bất kỳ lợi ích hiệu suất nào được cung cấp bởi mod_perl như một thùng chứa ứng dụng phía máy chủ liên tục !!!

Do đó, chúng tôi đang xem xét các vùng chứa ứng dụng có thể có cùng chức năng.

(như một lưu ý phụ, vâng, chúng tôi đã nghĩ đến việc chỉ cần chạy một cá thể của Apache với mod_perl như một vùng chứa ứng dụng, như một khả năng khả thi. Tuy nhiên, vì chức năng web là không cần thiết, tôi muốn xem bất kỳ tùy chọn nào khác có thể phù hợp với hóa đơn).

+0

Giao thức nào sẽ được sử dụng để làm cho java và các phần perl nói chuyện với nhau? – innaM

+0

Nhưng bạn không thể giữ "tính song song" của một khởi động bằng cách tiếp tục chạy các dịch vụ trong một môi trường '' 'apache mod_perl''' (hoặc PSGI) và nói chuyện với tất cả chúng từ điều khoản Java Swing mới của bạn? Đó có phải là quá chậm? Ít nhất thì trình thông dịch '' 'perl''' đang chạy và chờ và sẵn sàng. –

+0

Xin lỗi, tôi có nghĩa là nhận xét trước của tôi là một câu hỏi/phản hồi khác liên quan đến ghi chú phụ của bạn. Bạn đã thử nghiệm phương pháp tiếp cận vùng chứa ứng dụng '' 'mod_perl''' này chưa? Có vẻ như www.apache.org đã chạy hoặc chạy '' 'Qpsmtpd''' để giúp xử lý việc gửi danh sách gửi thư của họ theo cách này (** nghĩa là ** được nhúng dưới dạng dịch vụ SMTP trong một cá thể' '' mod_perl''' của apache). Vì vậy, '' 'apache''' và' '' mod_perl''' ... "chúng không chỉ dành cho web" :-) –

Trả lời

5

Tôi nghĩ rằng bạn đã xác định những gì bạn cần biết và những gì cần kiểm tra: thời gian thực hiện so với bộ nhớ. Bạn cũng cần đánh giá tính linh hoạt và dễ triển khai mà bạn nhận được với mod_perl và chiến thắng lớn trong việc bảo toàn tính hữu dụng của phần mềm bạn đã phát triển (và kinh nghiệm tích lũy của nhân viên của bạn). Hãy nhớ rằng bạn có thể dễ dàng tách các dịch vụ bằng CPU và máy nếu giao diện người dùng mới của bạn sắp được nói chuyện với các ứng dụng của bạn bên trong mạng của riêng bạn. Rất nhiều phụ thuộc vào cách "web-ish" bạn có thể làm cho các dịch vụ của bạn và nếu chúng có thể được "daemonized" hiệu quả. Tất nhiên có rất nhiều cách để kết thúc web để nói chuyện với các dịch vụ khác và perl có thể xử lý khá nhiều tất cả chúng ... TIMTOWTDI.

Kể từ khi bạn đề cập đến "tuits" (tức "nguồn nhân lực") là một hạn chế, có lẽ là phương pháp tốt nhất trong ngắn hạn là để thiết lập một riêng biệt apache - mod_perl dụ như một "thùng chứa ứng dụng" và chạy các ứng dụng của bạn theo cách đó (vì chúng hoạt động tốt theo cách đó, điều này có đúng không?). Xét cho cùng, apache (và mod_perl) nổi tiếng, thử nghiệm chiến đấu và có thể chỉnh sửa được cũng như có thể định cấu hình được. Các tùy chọn triển khai khá linh hoạt (cùng một máy, các máy khác nhau, chuyển đổi dự phòng, cân bằng tải, đám mây, cục bộ, máy ảo) và chúng cũng đã được thử nghiệm tốt.

Sau khi bạn chạy ứng dụng đó, bạn có thể bắt đầu thử nghiệm các phương pháp "nhân lực thấp" khác nhau để thực hiện các ứng dụng và dịch vụ của bạn một cách kỳ diệu mà không cần apache. PlackStarman đã được đề cập, Mojolicious:: là một khung công tác khác có khả năng làm việc với các ổ cắm web JSON, v.v. (và Plack). Chúng cũng đã được thử nghiệm tốt nhưng có lẽ ít quen thuộc hơn mod_perl và Apache. Tuy nhiên nếu bạn là một cửa hàng perl bạn không nên gặp khó khăn khi làm việc với những công cụ "hiện đại" này. Một ngày, nếu bạn kết thúc với nhiều tài nguyên hơn, bạn có thể xây dựng một nền tảng mạng tinh vi cho tất cả các dịch vụ dựa trên perl của bạn và sử dụng tất cả các công cụ "mới" (hoặc ít nhất mới hơn mod_perl) mát mẻ trên CPAN như POE, Plack, v.v. Bạn có thể có rất nhiều niềm vui khi phát triển những nội dung thú vị khi bạn giải quyết vấn đề kinh doanh của mình.

Để làm rõ nhận xét trước của tôi: Ubic (xem Ubic trên MetaCPAN) có thể daemonize (và do đó biên dịch trước) các công cụ perl của bạn và cung cấp một số cơ sở giám sát và quản lý miễn phí. Có một mô-đun Ubic có sẵn được thiết kế để sử dụng với Plack được gọi là Ubic::Service::Plack. Chính bản thân Ubic không cung cấp một giải pháp dễ dàng cho ứng dụng Java/Swing mới của bạn để nói chuyện với các ứng dụng perl của bạn, nhưng nó có thể giúp quản lý/theo dõi bất kỳ giải pháp nào bạn đưa ra.

Chúc may mắn và vui chơi!

+1

"nếu chúng có thể được" daemonized "hiệu quả". " - họ không thể (lý do không phải là công nghệ, nhưng nhân lực requreiments để viết và thử nghiệm daemon), nếu không chúng tôi sẽ không cần một máy chủ ứng dụng, rõ ràng :) – DVK

+0

Lưu ý rằng với [Ubic] (https://metacpan.org/ release/Ubic) bạn có thể "daemonize" khá nhiều thứ (giống như bạn có thể với '' 'runit''',' '' daemontools''', '' 's6''', v.v.). Tôi sẽ chỉnh sửa câu trả lời của mình để làm rõ điều đó. Một chút nghiên cứu so sánh sự đáp ứng của một kịch bản perl chạy như một "daemon" dưới '' 'Ubic''' so với khởi động nó theo yêu cầu hoặc theo' '' mod_perl''' có thể hữu ích. Nhưng để làm cho điều đó hữu ích, chúng tôi sẽ cần phải biết làm thế nào bạn có kế hoạch để có các dịch vụ web và các backends giao tiếp với nhau. Như ghi chú @Miguel nó sẽ khá dễ sử dụng JSON cho việc này. –

7

Starman là một máy chủ web PSGI/Plack làm sẵn hiệu suất cao có thể được sử dụng trong ngữ cảnh đó. Thật dễ dàng để xây dựng một ứng dụng REST phục vụ các đối tượng JSON không trạng thái (đây là một trường hợp sử dụng đơn giản).

Starman là một máy chủ sản xuất sẵn sàng và nó thực sự dễ dàng để cài đặt một tập hợp các trường hợp Starman đằng sau một mục đích ngược-proxy (this SO question may helps you), để mở rộng

1

Bạn có thể tạo một daemon đơn giản sử dụng HTTP::Daemon, và có tất cả các lợi ích của việc biên soạn các phần cần thiết của mã của bạn sau này (require), hoặc trước, trước khi khởi động daemon.

Các vấn đề liên quan