Puma
Puma 是 Rails 的默认 Web Server,在创建 Rails 项目时已经自动添加了 Puma 的依赖。Puma 是用了多进程加多线程模型,它可以同时在 fork 出来的多个 worker 中创建多个线程来处理请求;不仅如此 Puma 还实现了用于提高并发速度的 Reactor 模块和线程池能够在提升吞吐量的同时,降低内存的消耗。
1 | gem 'puma', '~> 3.7' |
创建 config/puma.rb
配置文件,下面是文件内容:
1 | # Puma can serve each request in a thread from an internal thread pool. |
Unicorn
与 Thin 同年发布的 Unicorn 虽然也是 Mongrel 项目的一个 fork,但是使用了完全不同的并发模型,每Unicorn 内部通过多次 fork 创建多个 worker 进程,所有的 worker 进程也都由一个 master 进程管理和控制。由于 master 进程的存在,当 worker 进程被意外杀掉后会被 master 进程重启,能够保证持续对外界提供服务,多个进程的 worker 也能够充分的利用多核 CPU 的性能,尽可能地提高请求的处理速度。
1 | gem 'unicorn', '~> 5.5', '>= 5.5.1' |
创建 config/unicorn.rb
配置文件,下面是文件内容。
1 | # 启动 unicorn |
Thin
Thin 使用 Reactor 模型处理客户端的 HTTP 请求,每一个请求都会交由 EventMachine,通过内部对事件的分发,最终执行相应的回调,这种事件驱动的 IO 模型与 node.js 非常相似,使用单进程单线程的并发模型却能够快速处理 HTTP 请求。
1 | gem 'thin', '~> 1.7', '>= 1.7.2' |
Thin 提供了生成配置文件的功能,在项目根目录输入 thin config -C config/thin.yml
可以快速的创建一份配置文件。
1 |
|
参考文献
- http://www.mojidong.com/rails/2013/04/20/rails-nginx-unicorn/
- https://ruby-china.org/topics/4709
- https://bogomips.org/unicorn/
- https://read01.com/zh-hk/zm5B.html#.Xc1XC-u-t0t
- https://ruby-china.org/topics/25276
- https://ruby-china.org/topics/10832
- https://stackoverflow.com/questions/4113299/ruby-on-rails-server-options
- https://draveness.me/ruby-webserver