Rails Grape Unicorn Nginx Architecture

最近,再次基于 Grape开发 APP API 后端。Grape 有很多优势:RESTful APIs;版本管理;接口参数管理;路由管理等。
之前的博客里有对 Grape 的使用和设计,做了详细的介绍。 这一次,给同事们介绍一下:整个项目的后端架构,科普一下各个组件的特点。

首先,看一张架构图

Nginx 介绍

高性能的 HTTP 和 反向代理 服务器。特点是占用内存少,并发能力强。
功能是:提供静态缓存服务,反向代理,将请求分发到 Rails 应用程序。

上一张 Nginx 官网公布的每秒处理请求,性能图

Nginx 并发连接数计算公式

    Nginx 作为 http 服务器的时候:
    max_clients = worker_processes * worker_connections
    2 * 65535 = 131070

    Nginx 作为 反向代理 服务器的时候:
    max_clients = worker_processes * worker_connections/4
    2 * 65535 / 4 = 32767
  

Unicorn 介绍

基于 Rack 应用程序设计的 HTTP Server。 特点是低延迟,高带宽连接,负载均衡,利用 Unix 的高级特性。
功能:提供 Rails 应用程序请求和响应服务。实现低消耗情况下的热部署。

Unicorn 在 Ruby 环境下,可选的 Rack servers 中的性能数据

阿里云,单台,单核,2G 服务器,跑 Unicorn 数据

    4 个 worker,单个 worker 占用 70MB
    单个 worker 瞬时只能处理一个请求
    AB :并发10,60秒,8.73q/s,100% 处理,平均处理时长超1000ms
  

Rails/Grape 介绍

Rails :基于 Ruby 语言实现的 Web MVC 框架。

Grape :基于 Rack 的 REST API 框架。提供一套简洁的 DSL 编写 RESTful 风格的 API 接口,摒弃 Rails 的路由分发机制。

Rails/Grape 性能数据

Redis 介绍

高性能的 key-value 内存数据库。
功能:存储用户的未读消息数据;频繁读操作的数据缓存。

Redis 性能数据

MySQL,阿里云 RDS 介绍

MySQL 是一个开源的,关系型的数据库。
特点:体积小、速度快、性能卓越、总体拥有成本低。

RDS 资源配置

RDS 并发量测试

RDS 性能报告: QPS

性能测试监控指标

  1. 请求响应时间、响应速度
  对请求在服务器端耗时和响应速度有个整体印象
  2. 访问量、吞吐量
  了解应用访问量的分布时间段和对应的吞吐量
  3. 接口的访问次数、处理时间
  排序后找出最频繁访问的接口和最耗时的请求
  4. CPU负载、内存消耗、带宽占用
  找出系统的瓶颈,对未来的升级提供数据参考
  

参考链接:
The Ruby Web Benchmark Report
RDS for MySQL各规格性能测试报告

2015-02-05

rocket-wing