Thứ hai, 25/11/2013 | 00:00 GMT+7

So sánh web server (Rack) cho Ứng dụng Web Ruby

Tương tự như các sản phẩm từ các ngôn ngữ khác, các ứng dụng được phát triển bằng Ruby có thể được đưa vào World-Wide-Web thông qua một trong nhiều web server có sẵn. Mặc dù mỗi cái trong số chúng đều có những phẩm chất riêng biệt và cung cấp các khả năng khác nhau để tạo ra giải pháp hoàn hảo, nhưng có một điểm chung mà các server này chia sẻ: một cách (một giao diện) để nói chuyện với ứng dụng của bạn được gọi là Rack .


Trong bài viết DigitalOcean này, ta sẽ so sánh các web server phổ biến khác nhau cung cấp năng lượng cho các ứng dụng web dựa trên Ruby. Tuy nhiên, trước khi đi sâu vào, ta sẽ giới thiệu về cơ chế đằng sau cách thức hoạt động của quy trình được đề cập ở trên khi ta làm quen với đặc tả Rack và bộ sưu tập phần mềm trung gian.

Nếu bạn tò mò về chính xác thuật ngữ phần mềm trung gian hơi khó hiểu có thể nghĩa là gì, bạn có thể thích đọc một chút về nó trên Wikipedia .

Giá đỡ


Ngày nay, việc tạo cơ hội kết hợp các web server với các ứng dụng web và các công nghệ khác [cho các nhà phát triển] là một khía cạnh rất mạnh mẽ, cần thiết và thực sự là nhu cầu của bất kỳ ngôn ngữ và khuôn khổ lập trình nào. Một ví dụ rất cơ bản cho điều này là nhu cầu của các môi trường khác nhau để phát triển , thử nghiệm và / hoặc production .

Với mục tiêu biến điều này thành hiện thực, năm 2007, Christian Neukirchen đã phát hành Rack, cái mà sau đó anh gọi là “giao diện web server Ruby module ”. Ngày nay, nó được điều chỉnh bởi nhiều web server và khung phát triển ứng dụng web như Espresso, Mack, Ruby on Rails, Sinatra, v.v.

Mặc dù các quy ước đặt tên và các giải thích khác nhau trên các ngôn ngữ và domain [lập trình], các thông số kỹ thuật cho giao diện [ứng dụng] rất giống nhau, nếu không muốn nói là tương đồng (mặc dù không giống như WSGI của Python - một nguồn cảm hứng cho Rack và những người khác, Rack ở đây không chỉ là một đặc tả mà còn - có lẽ hơi khó hiểu - một ứng dụng phần mềm trung gian cũng vậy).

Phần mềm trung gian Rack ( đá quý ), triển khai đặc tả Rack , hoạt động bằng cách chia các yêu cầu HTTP đến thành các giai đoạn liên kết khác nhau và xử lý chúng theo từng phần cho đến khi nó gửi lại phản hồi đến từ ứng dụng web của bạn (bộ điều khiển). Nó có hai thành phần riêng biệt: Bộ xử lý và Bộ điều hợp, được sử dụng để giao tiếp với web server và ứng dụng (khuôn khổ) tương ứng.

Giới thiệu về So sánh


Trong bài so sánh này, ta sẽ nói về một số lựa chọn server ứng dụng web phổ biến và có sẵn hiện nay. Ta sẽ xem xét điều gì làm cho cái này nổi bật so với cái kia và chúng khác biệt như thế nào ở một số khía cạnh nhất định so với phần còn lại. Mục đích ở đây là giúp bạn có hiểu biết tổng thể tốt hơn để có thể khớp các server với nhu cầu ứng dụng của bạn để tạo ra giải pháp bạn yêu cầu.

Server Web (theo thứ tự bảng chữ cái)


Phusion Passenger: Web server và server ứng dụng nhanh


Passenger ngày nay đã trở thành server được đề xuất cho các ứng dụng Ruby on Rails. Nó là một sản phẩm hoàn thiện, giàu tính năng nhằm đáp ứng các nhu cầu cần thiết và các lĩnh vực triển khai ứng dụng đồng thời đơn giản hóa đáng kể các thủ tục cài đặt và bắt đầu. Nó loại bỏ kiến trúc cài đặt server trung gian truyền thống bằng cách tích hợp trực tiếp trong web server ApacheNGINX (mặt trước). Nó còn gọi là mod rails / mod rack vì lý do này giữa cộng đồng Ruby (Rails).

Ghi chú


Passenger cung cấp khả năng làm việc với nhiều ứng dụng được lưu trữ trên cùng một server .

Nó có khả năng xử lý các client chậm. Các yêu cầu và phản hồi với Hành khách được lưu vào cache đầy đủ, giúp bản thân không bị ảnh hưởng bởi các cuộc tấn công nhắm đến làm tắc nghẽn tài nguyên của hệ thống.

Hành khách rất phổ biến và được sử dụng rộng rãi trong nhiều kịch bản [sản xuất]. Do đó, bạn có thể tiếp cận và tìm các chuyên gia cũng như giải quyết các vấn đề của bạn trên các cộng đồng trực tuyến. Nó cũng có một công ty chuyên phát triển sản phẩm, cung cấp hỗ trợ thương mại hiệu quả cho những người quan tâm.

Phiên bản open-souce của nó có chế độ hoạt động đa quy trình đơn stream , trong khi version Doanh nghiệp có thể được cấu hình để hoạt động theo stream đơn hoặc đa stream .

Đối với user doanh nghiệp, Passenger cung cấp thêm một số tính năng “nâng cao” như: đồng thời và đa stream , triển khai đồng thời, kiểm soát và giới hạn tài nguyên, v.v.

Để tìm hiểu thêm về Hành khách, bạn có thể truy cập trang web chính thức của Hãng tại https://www.phusionpassenger.com/ . Đối với Doanh nghiệp Hành khách, vui lòng truy cập phần Doanh nghiệp trên cùng trang.

Puma: Web server hiện đại, đồng thời cho Ruby


Puma là một server ứng dụng web Ruby độc quyền của Rack. Sự sáng tạo và ra đời của nó được lấy cảm hứng rất nhiều từ web server Mongrel kế thừa, server này đã cách mạng hóa rất nhiều trong thời gian nó được phát hành và ảnh hưởng đến cách các ứng dụng Ruby được phục vụ trong nhiều thế hệ ( server ) sau này. Nhà phát triển của Puma, Evan Phoenix , quyết định chuyển mọi thứ về phía trước, đã chuyển đổi cấu trúc hoạt động của Mongrel để chỉ hoạt động trên Rack (và do đó loại bỏ sự phức tạp gây giảm hiệu suất) và thiết kế ứng dụng để hỗ trợ song song thực sự , cho phép đồng thời (giải thích thêm bên dưới).

Ghi chú


Ứng dụng này có dung lượng khá nhỏ, cả về kích thước và tài nguyên thực thi.

Puma có một số chế độ làm việc: nó cho phép bạn đặt số lượng stream tối thiểu và tối đa mà nó có thể sử dụng để thực hiện công việc của bạn và cũng hoạt động ở chế độ theo group , theo đó bạn có thể sử dụng các quy trình đã tách để xử lý các yêu cầu đồng thời.

Nó dựa trên trình phân tích cú pháp của Mongrel - và rất nhiều bản viết lại cơ sở mã của nó.

Mặc dù được thiết kế như " server truy cập" cho Rubinius, nó cũng hoạt động tốt với JRuby.

Nó đi kèm với một tùy chọn cấu hình đơn giản nhưng quan trọng được cài đặt để thích ứng web server cho cả nhu cầu production và phát triển theo nhiều cách.

Mặc dù Puma không hỗ trợ trực tiếp lưu trữ nhiều ứng dụng ngay lập tức, nhưng nó có công cụ Jungle : a (Puma as a service) để giúp đáp ứng nhu cầu production của nhiều ứng dụng.

Để tìm hiểu thêm về Puma, bạn có thể truy cập kho mã chính thức của nó tại https://github.com/puma/puma , nơi bạn cũng có thể tìm thấy hướng dẫn để cấu hình và bắt đầu.

Mỏng: Server HTTP nhỏ, nhanh và vui nhộn


Thin là một server ứng dụng rất phổ biến, nó tự xưng là “ web server Ruby an toàn, ổn định, nhanh và có thể mở rộng” nhất. Vẫn được phát triển tích cực, nó dựa trên, và do đó là sản phẩm của ba thư viện Ruby quyết định:

  • Trình phân tích cú pháp của Mongrel
  • Thư viện I / O mạng Máy sự kiện
  • Phần mềm trung gian Rack

Ghi chú


Server HTTP mỏng được thiết kế để hoạt động với bất kỳ khuôn khổ nào triển khai đặc tả Rack, bao gồm phần lớn ngày nay. Nó thực hiện điều này bằng cách tải trực tiếp các file cấu hình Rack.

Là một server ứng dụng dựa trên Sự kiện / Máy, Thin có khả năng xử lý các yêu cầu chạy dài không giống như một số lựa chọn khác mà không cần sự trợ giúp của giải pháp Reverse Proxy mặt trước.

Để tìm hiểu thêm về Thin, bạn có thể truy cập trang web chính thức của nó tại http://code.macournoyer.com/thin/ .

Unicorn: Rack HTTP Server cho Fast Clients và Unix


Unicorn là một server ứng dụng web [Ruby] rất trưởng thành, đến nỗi nó cũng được điều chỉnh để sử dụng với Python. Nó có đầy đủ tính năng, tuy nhiên, nó phủ nhận bằng cách thiết kế cố gắng làm mọi thứ: Hiệu trưởng của Unicorn đang làm những gì cần phải làm [bởi một server ứng dụng web] và giao phần còn lại trách nhiệm cho những người làm tốt hơn.

Ghi chú


Quy trình tổng thể của Unicorn tạo ra các công nhân, theo yêu cầu của bạn, để phục vụ các yêu cầu. Quá trình này cũng giám sát công nhân để ngăn chặn bộ nhớ và xử lý các vấn đề đáng kinh ngạc liên quan. Điều này nghĩa là đối với administrator hệ thống là nó sẽ giết một quy trình nếu (ví dụ) mất quá nhiều thời gian để hoàn thành một tác vụ hoặc sự cố bộ nhớ xảy ra.

Như đã đề cập ở trên, một trong những lĩnh vực mà Unicorn giao nhiệm vụ là sử dụng hệ điều hành để cân bằng tải. Điều này cho phép các yêu cầu không chồng chất lên các công nhân bận rộn được sinh ra.

Giống như NGINX, với Unicorn, bạn có thể thực hiện và triển khai các ứng dụng của bạn (nghĩ đến các bản cập nhật / nâng cấp) mà không làm mất các kết nối và client còn sống.

Một số tính năng nâng cao khác của nó:

  • Tất cả nhân viên chạy trong một không gian địa chỉ biệt lập nhất định, phục vụ một yêu cầu tại một thời điểm.

  • Các móc before_forkafter_fork để xử lý các quy trình đã phân nhánh.

  • Khả năng được sử dụng với quản lý bộ nhớ thân thiện sao chép-ghi-chép để tiết kiệm bộ nhớ.

  • Khả năng nghe nhiều giao diện.

Để tìm hiểu thêm về Unicorn và các tính năng tuyệt vời của nó, bạn có thể truy cập trang web chính thức của Unicorn tại http://unicorn.bogomips.org/ .

<div class = “author”> Gửi bởi: <a href=osystemhttps://twitter.com/ostezerosystem> OS Tezer </div>


Tags:

Các tin liên quan

So sánh các web server cho các ứng dụng web dựa trên Python
2013-10-28
Cách sử dụng node.js, request và cheerio để thiết lập Web-Scraping đơn giản
2013-09-16
Cách tạo một ứng dụng web nhỏ với CakePHP trên VPS (Phần 1)
2013-08-23
Cách mở rộng ứng dụng web trên Ubuntu 12.10
2013-04-11