Ruby on Rails真实案例三则

2024-03-21 07:32
文章标签 案例 rails 真实 ruby 三则

本文主要是介绍Ruby on Rails真实案例三则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(正如 前一篇文章里所许诺的,这里将列出三个采用RoR开发的真实案例。以下内容出自《 应用Rails进行敏捷Web开发》一书第22章。)

22.7 案例分析:每天运行的Rails

要证明Rails的伸缩性,最好的办法莫过于考察一个确实有效伸缩的应用程序。在这一节中,我们将考察三个真实应用遇到的性能问题,以及它们如何解决这些问题。

37signals开发的Basecampwww.basecamphq.com

Rails就诞生于Basecamp项目。这是一个基于web的项目管理工具,它的用户需要每月付款。Basecamp服务器为成千上万的用户提供项目管理所需的功能服务。

在为Basecamp进行性能优化时,最大的难题在于很难使用缓存:每个人都来自不同的公司、有着不同的权限,因此看到的数据也各有不同。(不过从好的方面来说,只有那些拥有注册账号的人才能访问Basecamp,所以不用担心它会被Slashdot介绍而带来一大堆未授权的用户。)

Basecamp每天处理大约40万个动态请求(从看到登录页面开始算起,直到浏览项目记录板,所有的请求都包含在内)。在无法做任何缓存的情况下,这个负载量是相当可观的。目前有两台web/应用服务器来处理这些请求,每台服务器都有两个至强2.4GHz CPU2GB内存,运行15FastCGI进程和50-100Apache 1.3.x进程。服务器的负荷比通常在0.51.5之间。

MySQL数据库服务器是独立的,但37signals的另外两个应用程序(Ta-da ListBackpack)也使用这个数据库。数据库里的记录数在十万级别上,最大的一张表有大约50万条记录。虽然要为三个应用程序提供服务,但数据库服务器的负荷比通常在0.10.3之间——数据库不是Basecamp的瓶颈所在,这是一个好消息。如果当前的两台服务器不堪重负,只要再加上新的服务器就可以解决问题,而且我们也确实这样做了。

Robot Co-op开发的43 Thingswww.43things.com

43 Things是一个用于“追踪人生目标”的站点。你可以在这里写上你的目标,譬如“我要学日语”,围绕着这个目标撰写blog,并阅读别的有同样目标的人在干什么。这个应用程序的一部分需要身份认证;更多的部分则是公开的,允许未经授权的用户访问。公开内容访问量常有剧烈的变化;不过还好可以对它们进行缓存。

缓存的存储策略采用了memcached——为了改善性能,这个网站大量使用了memcached。由于将用户的session数据保存在memcached中,任何一台服务器都可以在任何时候处理来自任何用户的请求,而不需要任何session同步措施。对于开销较大的数据库查询,其结果也以ActionRecord对象的形式被序列化到memcached中,并打上适当的时间戳。

上线三个月之后,43 Things每天处理约20万个动态请求。它使用了两台web/应用服务器,以及一台专用的数据库服务器,三台机器都有两个3GHz的至强CPU2GB内存。两台web/应用服务器上分别运行着Apache 1.3.x服务器和25FastCGI进程。服务器负荷比很少超过0.3CPU空闲时间经常在80%左右。

抵押处理引擎(www.rapidreporting.com

Rapid Reporting将他们的“身份及收入验证引擎”运行在Rails系统上。美国1000强的抵押担保商有80%都使用这套引擎,每月处理2百万次抵押申请交易。

一开始,Rapid Reporting希望检验Rails是否能够胜任,因此他们从10台集群机器向一个应用程序进行压力测试,每秒发起3千次请求。真实的应用程序大概需要每秒处理300次请求,并执行一系列的业务逻辑。此外,处理抵押业务必须遵循格莱姆-布里勒法规(GLBA),因此很多地方都需要检查授权许可、生成查账索引。

应用程序使用PostgreSQL作为数据库,lighttpd作为web服务器,每台应用服务器运行大约10FastCGI进程,在一台虚拟服务器上用IP隧道技术实现负载均衡(参见http://www.linuxvirtualserver.org/VS-IPTunneling.html 。使用这种部署方式,就可以随时增减FastCGI进程,而不必重启web服务器。由此又可以实现进程管理的自动化:用一个守护进程监视负载情况,当负载达到峰值时分配更多的FastCGI进程。

这是一个真正的商业应用。这些东西听起来也许很乏味,但是否了解它们也许会决定你是否能够得到客户的认可。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=840811


这篇关于Ruby on Rails真实案例三则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832091

相关文章

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模