写点什么

Rails 综合报道:Rails 2.2 将会是线程安全的,Rails Edge 支持 ETags

  • 2008-09-08
  • 本文字数:1234 字

    阅读完需:约 4 分钟

David Heinemeier Hansson 最近提到 Rails 2.2 将会修补一个 Rails 存在已久的问题:其缺乏线程安全性。Charles Nutter 在文章中进一步阐述了线程安全的 Rails 意味着什么

本质上,其意味着去掉每个输入的请求所添加的较为粗糙的锁,取而代之的是为需要在线程间共享的资源加上更为精细的锁。采用的方法如,日志子系统中的数据结 构要么修改成不在线程间共享,要么需要设计恰当的锁机制以保证两个线程之间不会发生交互,不会影响彼此的数据结构或发生冲突。对于一个数据库实例我们不是 分别建立其单独的数据库连接,而是使用连接池,这样使得 N 个数据库连接可以供 M 个并发请求使用。这同时意味着潜在的包含执行数据库操作的请求不需要耗费一个连接,因此活动的连接数目通常少于可以并发处理的请求个数。

Rails Github repository 提交的例子和说明显示了最近完成的线程安全相关的工作: - “MemoryStore 是唯一‘不安全’的存储。保证其缺省是线程安全的。”

由于 Rails 缺乏线程安全的机制,需要使用多个独立的 Ruby 进程来为 Rails 应用服务,也就是使用非共享的方法。为了解决这个问题,也提出了很多技术和解决方案。 比如 Phusion Passenger 使用了一个修改的 Ruby 版本(基于写时拷贝友好的 GC),这种方法使得可以在 Ruby 实例间共享一些加载好的代码。这样也让管理一组程序的变得更为容易了。JRuby 允许在相同的 JVM(允许一定的代码共享) 中运行多个 JRuby 实例,从而减少多个 Rails 实例的运行开销。 即便是有线程安全的特性,Rails 站点仍然需要多个实例。其中的一个原因在于在 Ruby 1.8 中的用户空间线程系统,一个阻塞的 I/O 调用会阻塞解释器中所有的线程。尽管当前很多 I/O 库都使用非阻塞方式,但当前的 Mysql 适配器不是 (实际上,问题源于 C 库没有释放解释器的锁)。不过有些数据库适配器支持非阻塞的请求,比如 Postgresql 适配器。

Never_block 是一个方便这些适配器使用的库,尽管暂时需要 Ruby 1.9 版本。 将应用分布于多个解释器也可以利用多核系统的优势,但实际上,纯用户空间线程不允许这样。

Rails Edge 的另一个新特性是支持更简单的有条件 Get

“有条件 GET” 是专用于 HTTP 的一个功能,其提供给 web 服务器一种方法来告知浏览器,GET 请求的结果没有变化,因此可以放心的从浏览器缓存中直接获取结果。

Tim Bray 对 ETags 进行了简单的介绍同时对其解决的问题也做了说明:

但是有的时候,一个单独的时间戳信息不够服务器判断客户端是否需要刷新其所请求的拷贝。
ETags 正是用于这种情况下的。其工作的原理是:当一个客户端发送 GET 请求时,除了将其请求的结果发送回去外,还需要返回一个 HTTP 头,格式类似于:
ETag: “1cc044-172-3d9aee80”
在引号中的是一个签名,反映了请求的资源的当前状态。

查看英文原文: Rails Roundup: Rails 2.2 Will Be Threadsafe, ETags Support in Rails Edge

2008-09-08 21:14807

评论

发布
暂无评论
发现更多内容

如有神威,办公小浣熊助我轻松拿捏数据分析

战场小包

小浣熊 AI办公助手

上班摸鱼全靠AI办公助手-小浣熊

不叫猫先生

AI 办公小浣熊 办公助手

我的数据清洗能手小浣熊

轻口味

征文活动 办公小浣熊 小浣熊家族

ToB市场部如何选择最优的合作平台

客户在哪儿AI

ToB营销 ToB获客 ToB增长 ToB销售

ToB活动营销先要区分战略级活动、常规级活动和与我无关的活动

客户在哪儿AI

ToB营销 活动营销 ToB获客 ToB销售

供配电学习笔记 day4

万里无云万里天

自动化 电力 工厂运维

蓝易云 - linux IP地址原理,分类,子网划分,VLAN,TRUNK详解

百度搜索:蓝易云

运维 Web IP 网络 云服务器

蓝易云 - C++中的const成员变量和成员函数

百度搜索:蓝易云

c++ 运维 云服务器 const 服务器租用

信创里程碑:TapData 与 OceanBase 产品完成兼容互认证,加速推进金融等传统行业自主创新与数字化革新

tapdata

oceanbase 信创国产化 TapData 实时数据平台 国产信创数据库

我的数据分析大师-办公小浣熊

黑白相间

数据分析 办公小浣熊

破解缺陷管理:挑选顶尖系统的秘籍

爱吃小舅的鱼

缺陷跟踪

小浣熊家族:自媒体新手的快速成长指南

程序员海军

AI 办公小浣熊 小浣熊家族 小浣熊

蓝易云 - 如何在云服务器上搭建网站?建站的4大步骤

百度搜索:蓝易云

云计算 运维 云服务器 服务器租用 高防服务器

小浣熊,本领强,助我轻松把活忙

知日

AI #人工智能 小浣熊家族

万字长文—带你深度体验小浣熊办公助手,全方位提升工作效率

数字扫地僧

办公小浣熊 代码小浣熊 小浣熊家族

ToB活动营销痛点——用最少场次的活动投入覆盖最多的目标客户

客户在哪儿AI

ToB获客 ToB增长 ToB销售

如何彻底解决ToB企业市场和销售脱节的问题

客户在哪儿AI

ToB营销 ToB获客 ToB销售

开源创新引领未来|酷克数据亮相PostgreSQL中国技术大会,荣获数据库杰出贡献奖

酷克数据HashData

蓝易云 - Linux网络配置文件:MAC,UUID,设备名,子网掩码,网关,DNS等底层结构、架构图,工作原理 ,使用场景详解

百度搜索:蓝易云

Linux Mac 网络 DNS 云服务器

从0-100:钓鱼场小程序开发笔记(上)

CC同学

一个老程序员对小浣熊 AI 办公助手的使用体验

汪子熙

Python 人工智能 办公小浣熊 小浣熊家族 小浣熊

蓝易云 - Apollo配置中心介绍

百度搜索:蓝易云

云计算 Linux 运维 云服务器 Apollo

java+uniapp实现微信JSSDK扫码功能

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

Rails综合报道:Rails 2.2将会是线程安全的,Rails Edge支持ETags_Ruby_Werner Schuster_InfoQ精选文章