Computer >> Máy Tính >  >> Lập trình >> Ruby

Tại sao chúng ta cần máy chủ ứng dụng trong Ruby? (Như Puma)

Thứ “Puma” này bắt đầu chạy khi bạn sử dụng rails server là gì ?

Đó là một máy chủ ứng dụng!

Hãy để tôi giải thích máy chủ ứng dụng là gì và tại sao chúng ta cần chúng với một ví dụ.

Hiểu Máy chủ Ứng dụng

Giả sử bạn bắt đầu xây dựng ứng dụng web sáng bóng mới của mình trong Ruby.

Và trước khi bạn viết bất kỳ mã nào…

Bạn muốn thấy nó tải trong trình duyệt của mình, ngay cả khi chỉ để xem trang “chào mừng” mặc định.

Vì vậy, bạn mở trình duyệt của mình, bạn trỏ nó vào localhost:3000 hoặc có thể localhost:4567 nếu bạn đang sử dụng Sinatra.

Điều gì xảy ra sau đó?

Trình duyệt của bạn kết nối với localhost , trên cổng 3000 , nơi máy chủ ứng dụng Ruby như Puma đang đợi.

localhost trỏ đến một địa chỉ IP đặc biệt, 127.0.0.1 , luôn đề cập đến máy tính của bạn

Bây giờ :

Công việc của Puma hoặc bất kỳ máy chủ dựa trên giá đỡ nào khác (như Thin / Unicorn), là xử lý yêu cầu của trình duyệt và chuyển nó đến ứng dụng của bạn thông qua một giao diện chung.

Chúng ta đang nói về giao diện nào?

Giá đỡ.

Tôi giải thích chi tiết về Rack trong một bài viết khác.

Quay lại Puma.

Tại sao chúng tôi sử dụng máy chủ ứng dụng thay vì để Rails xử lý trực tiếp các yêu cầu?

Câu hỏi hay.

Chúng tôi làm điều này vì nó cho phép một nguyên tắc thiết kế phần mềm cơ bản.

Tách biệt các mối quan tâm!

Hiểu tách biệt các mối quan tâm

Công việc của Rails và công việc của ứng dụng của bạn là phục vụ yêu cầu của người dùng.

Ví dụ :

  • Tạo một tài khoản mới
  • Kiểm tra xem thông tin đăng nhập có hợp lệ không
  • Hiển thị trang sản phẩm nơi bạn có thể mua một thanh sô cô la ca cao 100%

Dù ứng dụng của bạn làm gì.

  • Rails cung cấp thực đơn gồm những việc mà người dùng có thể làm, nhưng đó cũng là người đầu bếp, nó sẽ hoàn thành công việc
  • Puma là người phục vụ, nhận đơn đặt hàng và chuyển họ vào bếp

Thiết lập mọi thứ theo cách này cho phép mọi người cố gắng hết sức.

Không chỉ vậy…

Nó cũng cho phép bạn chuyển đầu bếp sang Sinatra hoặc bồi bàn thành Thin!

“Khi các mối quan tâm được tách biệt rõ ràng, sẽ có nhiều mức độ tự do hơn để tái sử dụng mô-đun cũng như phát triển và nâng cấp độc lập.”
Wikipedia

Tùy thuộc vào tình huống và sở thích của bạn.

Máy chủ ứng dụng và Máy chủ web (Nginx &Apache)

Tại thời điểm này, bạn có thể tự hỏi…

Máy chủ web như Apache hoặc Nginx khác với máy chủ Ruby như thế nào?

Tại sao chúng tôi không thể sử dụng hai máy chủ này?

Có một sự khác biệt lớn.

Nginx là một máy chủ web chung, nó xử lý một yêu cầu và nếu có tệp phù hợp với yêu cầu đó, nó sẽ trả về tệp đó.

Nhưng Nginx không biết gì về Rack hoặc Ruby.

Đó là lý do tại sao chúng tôi cần Puma hoặc bất kỳ máy chủ web nào khác tương thích với Rack.

Tuy nhiên…

Sử dụng Nginx trong sản xuất vẫn có thể hữu ích.

Nginx có thể xử lý các kết nối hiệu quả hơn và nó có thể phân phát các tài sản tĩnh (tệp css &js) mà không cần phải chuyển tiếp yêu cầu tới ứng dụng của bạn.

Hiểu về Puma

Giờ chúng ta đã hiểu máy chủ ứng dụng là gì và tại sao nó lại hữu ích.

Chúng ta có thể xem xét chính Puma .

Tại sao bạn muốn chọn Puma thay vì các máy chủ khác?

Đầu tiên :

Đó là máy chủ được đề xuất của Heroku.

Lý do chính mà họ đề cập là, nếu bạn sử dụng Unicorn - một máy chủ ứng dụng thay thế - thì bạn dễ bị ứng dụng khách tấn công chậm.

Ngoài ra :

Puma là đa luồng, thường dẫn đến việc sử dụng ít bộ nhớ hơn.

“Hệ điều hành thực hiện ít công việc thay cho một chương trình đa luồng hơn so với một chương trình đa xử lý. Điều này chuyển thành hiệu suất tăng cho chương trình đa luồng. ”
Lập trình PThreads

Máy chủ nào nhanh hơn?

Chạy một ứng dụng Rack đơn giản với lệnh này:

rackup -s thin rack-simple.ru 2>1 &>/dev/null

Đã kiểm tra cái này :

wrk -d 20 https://localhost:9292

Tôi nhận được các kết quả điểm chuẩn này :

  • Webrick 229,97 yêu cầu / giây
  • Yêu cầu 773,20 mỏng / giây
  • Yêu cầu Puma 2035,34 / giây

Trong số ba điều này, có vẻ như Puma giúp bạn có được màn trình diễn tốt nhất.

Nhưng điều đó sẽ không thành vấn đề nếu bạn có một truy vấn SQL chậm hoặc nếu bạn đang lặp qua các mảng có hàng triệu phần tử theo mọi yêu cầu.

Tóm tắt

Bạn đã tìm hiểu về các máy chủ ứng dụng trong Ruby, như Puma &Thin, vì vậy bây giờ bạn đã hiểu rõ hơn về lý do tại sao chúng tôi sử dụng chúng.

Tại sao chúng ta cần máy chủ ứng dụng trong Ruby? (Như Puma)

Bạn sẽ sử dụng cái nào cho dự án tiếp theo của mình?

Cảm ơn vì đã đọc! 🙂