Web Server và App Server? Phân biệt như thế nào

Khi bạn google để triển khai một ứng dụng Rails, bạn sẽ thấy một loạt các tên như Apache, Unicorn, Puma, Phusion Passenger, Nginx, Rainbows, … nhiều hơn nữa. Tất cả chúng đều có vẻ phù hợp để “triển khai Rails”, nhưng có một từ chỉ ra sự khác biệt giữa chúng. Một số là máy chủ web và một số khác là máy chủ ứng dụng.

Khi bạn hiểu được cái nào là cái nào và vị trí của chúng trong hệ thống của bạn, việc triển khai sẽ có ý nghĩa hơn rất nhiều. Tuy nhiên, sự phân biệt giữa chúng không phải lúc nào cũng rõ ràng.

Máy chủ web là gì, nó khác với máy chủ ứng dụng như thế nào? Bạn có thể chỉ sử dụng một cái mà không cần cái kia? Rack ở đâu?

một máy chủ web là gì?

Máy chủ web là một chương trình nhận yêu cầu từ trang web của bạn và thực hiện một số xử lý cho yêu cầu đó. Sau đó, sẽ chuyển yêu cầu đó đến Ứng dụng Rails. Nginx và Apache là hai máy chủ web lớn mà bạn sẽ bắt gặp.

>> Có thể bạn quan tâm: Tất tần tật những điều cơ bản về Web Server bạn phải biết

Nếu yêu cầu là thứ không thường xuyên thay đổi, chẳng hạn như File CSS, JS hoặc hình ảnh, thì yêu cầu này có thể không cần Rails. Máy chủ web có thể tự xử lý mà không cần thông báo cho ứng dụng, theo cách này sẽ nhanh hơn.

Máy chủ web có thể xử lý các yêu cầu SSL, cung cấp các File và nội dung tĩnh, nén các yêu cầu và thực hiện một số việc mà hầu như bất kỳ trang web nào cũng cần. Và nếu ứng dụng Rails cần xử lý yêu cầu, máy chủ web sẽ chuyển yêu cầu đó đến máy chủ ứng dụng.

Mình nghĩ bạn cần xem =>  Fileless malware, "sát thủ vô hình" thách thức các hệ thống an ninh mạng

Máy chủ ứng dụng là gì?

Máy chủ ứng dụng là thứ thực sự chạy trong ứng dụng Rails của bạn. Máy chủ ứng dụng tải lên mã của ứng dụng và giữ ứng dụng trong bộ nhớ. Khi máy chủ ứng dụng nhận được yêu cầu từ máy chủ web, nó sẽ báo cáo lại cho ứng dụng Rails. Sau khi ứng dụng xử lý xong yêu cầu, máy chủ ứng dụng sẽ gửi phản hồi trở lại máy chủ web (và cuối cùng là cho người dùng).

Bạn có thể chạy hầu hết các máy chủ ứng dụng một mình mà không cần máy chủ web. Đó cũng là những gì bạn đã làm trong môi trường phát triển. Trong môi trường sản xuất, thường cần phải có một máy chủ web ở phía trước. Nó sẽ xử lý nhiều ứng dụng cùng một lúc, hiển thị nội dung nhanh hơn và xử lý nhiều yêu cầu.

Có hàng tá máy chủ ứng dụng cho các ứng dụng Rails, như Mongrel, Unicorn, Thin, Rainbows và Puma. Mỗi cái đều có thế mạnh riêng, nhưng xét cho cùng, chúng đều làm được điều giống nhau – giữ cho các ứng dụng chạy và xử lý các yêu cầu.

Hành khách thì sao?

Phusion Passenger có một chút khác biệt. Ở “chế độ độc lập”, nó hoạt động giống như một máy chủ ứng dụng. Nhưng nó cũng có thể được xây dựng ngay bên trong máy chủ web, vì vậy bạn không cần một máy chủ ứng dụng riêng để chạy ứng dụng Rails.

Điều này thực sự tiện dụng, đặc biệt nếu bạn đang có kế hoạch chạy nhiều ứng dụng và không muốn mất thời gian thiết lập máy chủ ứng dụng cho mỗi ứng dụng Rails. Sau khi cài đặt Passenger, bạn chỉ cần trỏ máy chủ web của mình trực tiếp vào ứng dụng Rails (thay vì trỏ vào máy chủ ứng dụng) và ứng dụng Rails sẽ bắt đầu xử lý các yêu cầu.

Mình nghĩ bạn cần xem =>  Trêu hay Chêu? Trêu đùa hay Chêu đùa ? Trêu chọc hay chêu chọc

Hành khách là một lựa chọn tuyệt vời, nhưng có một máy chủ ứng dụng riêng thì tốt hơn. Giữ riêng máy chủ ứng dụng sẽ giúp bạn linh hoạt hơn trong việc chọn máy chủ ứng dụng phù hợp nhất với mục đích của mình và bạn có thể dễ dàng nâng cấp và thay thế nó sau này.

Vậy còn Rack thì sao?

Rack là khá tuyệt vời. Nó cho phép bất kỳ máy chủ ứng dụng nào chạy các ứng dụng Rails (hoặc ứng dụng Sinatra hoặc ứng dụng Padrino, v.v.).

Bạn có thể coi Rack là ngôn ngữ chung cho các khuôn khổ web Ruby (Rails là một trong số đó) và các máy chủ ứng dụng để hai bên có thể giao tiếp với nhau. Bởi vì cả hai bên đều “nói” cùng một ngôn ngữ nên Rails có thể “giao tiếp” với Unicorn và ngược lại mà Rails và Unicorn không cần biết gì về nhau.

Vậy chúng liên quan như thế nào?

Làm thế nào để tất cả chúng hoạt động cùng nhau?

Trong số các phần này, trước tiên một yêu cầu web sẽ chuyển đến máy chủ web. Nếu đó là một yêu cầu mà Rails có thể xử lý, máy chủ web sẽ thực hiện một số hành động với nó và đưa nó trở lại máy chủ ứng dụng. Máy chủ ứng dụng sử dụng Rack để giao tiếp với ứng dụng Rails, khi ứng dụng kết thúc hoạt động với yêu cầu đó, ứng dụng Rails sẽ gửi phản hồi trở lại máy chủ ứng dụng và máy chủ web gửi phản hồi lại cho người sử dụng ứng dụng.

Cụ thể hơn, Nginx có thể gửi yêu cầu đến Unicorn. Unicorn đưa yêu cầu đó đến Rack, gửi nó đến bộ định tuyến Rails để gọi bộ điều khiển chính xác. Sau đó trả lời (theo một cách khác).

Mình nghĩ bạn cần xem =>  11 thư viện Javascript phổ biến nhất bạn cần biết

Đây chỉ là một tổng quan được đơn giản hóa. Nhưng sẽ giúp bạn đưa ứng dụng của mình vào đúng chỗ, đúng tinh thần với từng phần.

Sau khi bạn hiểu cách máy chủ ứng dụng và máy chủ web nói chung hoạt động, bạn sẽ dễ dàng hơn nhiều để gỡ lỗi các sự cố liên quan đến máy chủ mà bạn gặp phải.

Tóm tắt bản dịch justinweiss.

Theo viblo.asia

✤ Top 20 bài viết Tổng Hợp mới nhất :

Xem thêm nhiều Tổng Hợp mới hay

Leave A Reply

Your email address will not be published.