Tổng quan về web server và app server trong rails app


Xin chào các bạn,lại là mình đây :).Hôm nay mình xin trình bày một vấn đề mà mình nghĩ bất kỳ ông dev nào lúc mới bắt đầu deploy ứng dụng đều phải đau đầu.
Bài viết này có thể có khá nhiều lí thuyết nên mình sẽ cố gắng giải thích đơn giản nhất có thể để các bạn có thể hiểu mình nói gì nhé =)).

1.Web server là gì?

Web server là một chương trình đưa một request đến website của bạn và thực hiện một số xử lý trên nó.Sau đó nó có thể đưa request cho rails app của bạn.Tức là sao?? =))

Tức là khi bạn gõ lên url của browser 1 đường link abc.com.vn thì đầu tiên webserver sẽ nhận request này và gửi nó đến rails app để xử lý.

Nginx và Apache là hai web server phổ biến hiện nay,nếu request một thứ gì đó không thay đổi thường xuyên như css,javascript,image thì rails app có thể không cần phải check và web server có thể xử lý được request đó mà không cần tương tác với app,cách này sẽ tối ưu tốc độ cho app hơn.

Web server có thể xử lý SSL requests, serve static files and assets, compress requests và rất nhiều thứ khác(hầu hết mọi nhu cầu của website).Và nếu rails app cần xử lý request thì web server sẽ chuyển nó tới app server.

2.App server là gì?

App server mới là thứ thực sự chạy app rails của chúng ta nhóe :D.App server của bạn load code và giữ app của bạn trong bộ nhớ.Khi mà app server nhận được request từ web server,nó cho rails app của bạn biết về request đó.Sau khi rails app đã xử lý xong request thì app server sẽ gửi lại response cho web server(và cuối cùng là người dùng).

Chúng ta có thể chạy hầu hết app server bằng chính nó mà không cần web server ở phía trước(tiền xử lý),đây có thể là những điều chúng ta làm khi chạy chế độ developer(chạy app ở local đấy :D).Tuy nhiên ở môi trường production chúng ta thường có một web server để tiền xử lý.Nó sẽ xử lý nhiều apps cùng một lúc,render assets nhanh hơn và đưa ra rất nhiều tiến trình,bạn sẽ thực hiện theo mọi request.

Có nhiều app server như puma,unicorn... nhưng tóm lại mục đích của chúng cũng chỉ là giữ cho rails app chaỵ và xử lý các yêu cầu.

3.Rack là gì?

Có thể nói Rack là ngôn ngữ chung để Rails(framework) giao tiếp với app server.Bởi vì mỗi bên đều chỉ biết về một ngôn ngữ(rack).Rails nói chuyện với unicorn và ngược lại qua ngôn ngữ trung gian,chúng không cần biết về ngôn ngữ của nhau.

4.Làm sao để chúng liên hệ được với nhau?

Ngắn gọn là khi người dùng gửi một request thì sẽ đưa đến web server trước.Nếu request đó rails app có thể xử lý thì web server sẽ thực hiện một ít xử lý trên request và chuyển tiếp cho app server.App server sẽ sử dụng rack để nói chuyện với rails app.Khi rails app xử lý xong request,rails app của bạn sẽ gửi lại response cho app server và web server sẽ trả lại kết quả cho người dùng.

Nói cụ thể sẽ là nginx chuyển request đến unicorn hoặc puma.Unicorn đưa request để rack cung cấp đúng Rails router(cung cấp đúng router sẽ lấy ra đúng controller để xử lý request).Sau đó response sẽ được trả lại theo các cách khác.

4.Tổng kết

Hình trên nêu ra các điểm khác nhau giữa web server và app server,cả bài biết của mình cũng chỉ xoay quanh các vấn đề này.Qua bài viết này hi vọng các bạn nắm được tổng quan về web server và app server cũng như cách chúng liên hệ với nhau.Ở bài tiếp theo mình sẽ hướng dẫn deploy một rails app lên server,trong đó có sử dụng khá nhiều kiến thức trong bài này các bạn nắm được cơ bản sẽ dễ để hình dung và làm việc hiệu quả hơn.Xin cám ơn các bạn đã lắng nghe.

Nguồn.
www.justinweiss.com

Nhận xét

Bài đăng phổ biến từ blog này

Cài đặt SSL cho website sử dụng certbot

Xây dựng một hệ thống comment real-time hoặc chat đơn giản sử dụng Pusher

CÁC BÀI TẬP SQL CƠ BẢN - PART 1

Xây dựng một hệ thống tracking hành vi người dùng (phần 1)

Xây dựng một hệ thống tracking hành vi người dùng (phần 2)

Enterprise architecture trên 1 tờ A4

Web caching (P2)

Bàn về async/await trong vòng lặp javascript

Web caching (P1)

Cài đặt môi trường để code website Rails