Tìm hiểu về Thin server
1. Mở đầu Tương tự như các sản phẩm đến từ các ngôn ngữ khác, các ứng dụng được phát triển bằng cách sử dụng Ruby có thể được tiếp xúc với thế giớ web phải thông qua một trong các máy chủ web có sẵn. Bài viết này sẽ giới thiệu về 1 trong những máy chủ web đó: máy chủ Thin (Thin server). 2. Thin ...
1. Mở đầu
Tương tự như các sản phẩm đến từ các ngôn ngữ khác, các ứng dụng được phát triển bằng cách sử dụng Ruby có thể được tiếp xúc với thế giớ web phải thông qua một trong các máy chủ web có sẵn. Bài viết này sẽ giới thiệu về 1 trong những máy chủ web đó: máy chủ Thin (Thin server).
2. Thin Server là gì
Thin là một máy chủ web Ruby được gắn kết với nhau bởi 3 thư viện Ruby tốt nhất trong lịch sử web:
- Mongrel parser: 1 web-server tốc độ và bảo mật
- Event Machine: một mạng thư viện vào ra với khả năng mở rộng cao, hiệu suất tốt và ổn định
- Rack: một giao diện tối giản giữa máy chủ web và Ruby frameworks
Điều này làm cho Thin trở thành máy chủ web Ruby an toàn, ổn định, nhanh và có khả năng mở rộng, được gói gọn trong một gem có dễ dàng sử dụng.
3. Thin Server và 1 số Web server khác
3.1 Phusion Passenger
Ngày nay Phusion Passenger đã trở thành máy chủ được khuyến nghị cho Ruby on Rails. Passenger sở hữu tính năng phong phú, đáp ứng các nhu cầu cần thiết, đồng thời đơn giản hoá quá trình set up, khởi tạo thủ tục. Passenger loại bỏ kiến trúc với các máy chủ trung gian truyền thống, thay vào đó tích hợp trực tiếp trong Apache và Nginx.
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 máy chủ.
Phiên bản mã nguồn mở của nó có một chế độ hoạt động đơn luồng đa tiến trình (multi-process single-threaded), trong khi phiên bản Enterprise có thể được cấu hình để làm việc, hoặc đơn luồng (single-threaded) hay đa luồng (multi-threaded).
Đối với người dùng doanh nghiệp, Passenger cung cấp một số tính năng thêm tiên tiến khác như: xử lí đồng thời và xử lý đa luồng, triển khai đồng loạt, kiểm soát và hạn chế tài nguyên ...
3.2 Puma
Puma là một máy chủ Ruby được thiết kế chuyên biệt dành cho Rack. Nó được lấy cảm hứng từ máy chủ web Mongrel, mà đã cách mạng hóa rất nhiều trong suốt thời gian nó đã được phát hành và bị ảnh hưởng như thế nào ứng dụng của Ruby đã phục vụ cho nhiều thế hệ (máy chủ) để đi. Nhà phát triển của Puma, Evan Phoenix, quyết định chuyển đổi cơ cấu hoạt động của Mongrel sang cơ cấu chỉ hoạt động trên Rack (và do đó loại bỏ sự phức tạp gây ra suy giảm hiệu suất) và thiết kế các ứng dụng để hỗ trợ xử lý song song thực sự, cho phép xử lí đồng thời.
Puma có một số chế độ làm việc: nó cho phép bạn thiết lập số lượng tối thiểu và tối đa luồng (thread) có thể sử dụng để làm việc của mình và cũng như cung cấp chế độ clustered nhờ đó mà bạn có thể sử dụng các quá trình fork process để xử lý yêu cầu đồng thời.
Puma không trực tiếp hỗ trợ host nhiều ứng dụng tuy nhiên nó lại có Jungle: một công cụ để giúp đáp ứng nhu cầu đa ứng dụng (multiple applications) của người dùng.
3.3 Unicorn
Unicorn là 1 máy chủ web rất phát triển của Ruby thậm chí tương thích cả với Python. Unicorn là 1 máy chủ web đầy đủ tính năng, tuy nhiên, nguyên tắc làm việc của nó là phủ nhận thiết kế cố gắng làm tất cả mọi thứ, chỉ làm những gì cần phải được thực hiện (bởi một máy chủ ứng dụng web) và ủy thác phần còn lại cho những bộ phận khác có thể làm tốt hơn nó.
Unicorn hỗ trợ khá nhiều các tính năng
- Khả năng quản lí process: Unicorn có khả năng sinh, quản lí, khôi phục lại các worker bị chết.
- Khả năng cân bằng tải: Đảm bảo căn bằng tải, không bao giò để chất đống công việc lên 1 worker
- Khả năng nâng cấp mà không bị mất kết nối. Bạn có thể nâng cấp Unicorn, toàn bộ ứng dụng của bạn, thư viện của Ruby của bạn mà không phải ngắt kết nối. ...
3.4 So sánh với Thin Server
-
Phusion Pasenger
Dễ cấu hình, phổ biến, thích hợp để host nhiều ứng dụng (multiple application).
-
Puma
Không dựa vào EventMachine, thích hợp để chạy (single application)
-
Unicorn:
Nhiều tính năng hơn, hiệu năng cao tuy nhiên đòi hỏi cấu hình phức tạp.
-
Thin:
Dựa trên EventMachine, cấu hình đơn giản, thích hợp với (single application)
4. Cài đặt và sử dụng Thin Server
4.1 Cài đặt
Cài đặt phiên bản mới nhất
gem install thin
Hoặc cài đặt từ source:
git clone git://github.com/macournoyer/thin.git cd thin rake install
4.2 Sử dụng
Việc sử dụng Thin khá đơn giản. Trước hết, hãy đảm bảo bạn đã thêm 'thin' vào Gemfile Sau đó trên di chuyển đến thư mục của app và khởi động Thin
cd to/your/app thin start
4.3 Cấu hình Thin Server
Bạn có thể thiết lập cấu hình của Thin Server trong file yalm (ví dụ config.yalm) và sử dụng lệnh thin -C config.yml để chạy Thin Server với cấu hình đã thiết lập trên.
Dưới đây là 1 mẫu config của Thin Server
--- user: www-data group: www-data pid: tmp/pids/thin.pid timeout: 30 wait: 30 log: log/thin.log max_conns: 1024 require: [] environment: production max_persistent_conns: 512 servers: 1 threaded: true no-epoll: true daemonize: true socket: tmp/sockets/thin.sock chdir: /path/to/your/apps/root tag: a-name-to-show-up-in-ps aux
5. Lời kết
Thin Server là 1 trong những Rails WebServer nhanh, bảo mật, ổn định, được sử dụng khá phổ biến.
Bài viết cũng cung cấp 1 số so sánh giữa Thin Server với các Rails WebServer khác, hi vọng người dùng sẽ sử dụng Thin Server trong những tình huống phù hợp với nhu cầu sử dụng.