写点什么

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:141308

评论

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

99 大促来袭,利用 MSE 服务自治体系为业务保驾护航

阿里巴巴云原生

阿里云 微服务 云原生

低代码是什么意思?低代码平台的技术特点是什么?

优秀

低代码

长安链源码分析启动(3)

长安链

低代码适用于哪些应用开发场景

力软低代码开发平台

阿里云金融创新峰会云原生分论坛圆满举办,加速金融行业落地云原生

阿里巴巴云原生

阿里云 云原生 金融行业

C/C++普通函数与函数模板的区别,调用规则,模板局限性

CtrlX

c c++ C# 8月月更

基于龙蜥操作系统指令加速,降低云原生网关的构建成本

阿里巴巴云原生

阿里云 云原生 云原生网关 龙蜥

聚四方之力,合四方之需:智能云网的持续进化

脑极体

长安链源码分析启动(4)

长安链

2. 操作系统—中断、异常、系统调用

小呆鸟

操作系统 操作 8月月更

长安链源码分析启动(5)

长安链

数据、算力强支撑,佳格天地联合华为云打造农业农村大数据解决方案

IT资讯搬运工

9月17日 杭州站 | Serverless Developer Meetup 开启报名

阿里巴巴云原生

阿里云 Serverless 云原生

[JS入门到进阶] 手写解析URL参数的工具,并部署。用起来又快又爽!

HullQin

CSS JavaScript html 前端 8月月更

前端高频面试题(附答案)

helloworld1024fd

JavaScript 前端

区块链商用案例:网间结算联盟链建设实战

鲸品堂

区块链 运营商 企业号九月金秋榜

测试需求平台2-搭建前后端分离github托管项目

MegaQi

测试平台开发 9月月更

后疫情时代,传统制造业如何打破生产协同瓶颈?

IT资讯搬运工

APICloud AVM 封装验证码输入框组件

YonBuilder低代码开发平台

程序员 前端开发 低代码开发 多端开发

SQL改写系列九:外连接转内连接的常见场景与错误-2

OceanBase 数据库

2022年Q2银行APP活跃用户规模盘点:头部银行增长稳定

易观分析

金融 银行 用户规模

开源一夏 | 一场由serialVersionUID 引发的线上问题

六月的雨在InfoQ

开源 serialVersionUID transient Serializable接口 8月月更

K-进制数(简洁 图解)

Five

算法题 8月月更

Sring源码解析(一)Spring是怎么读取配置Xml文件的

石臻臻的杂货铺

spring 源码 8月月更

Spring源码分析(二)Spring怎么扩展解析xml接口的

石臻臻的杂货铺

spring 源码 8月月更

3. 操作系统—物理内存管理

小呆鸟

操作系统 操作 8月月更

YonBuilder移动开发 AVM框架 封装车牌号输入键盘组件

YonBuilder低代码开发平台

程序员 App 移动开发 多端开发

Prometheus 实战 (1):容器安装

Grafana 爱好者

Prometheus

隗华:OceanBase 企业服务助力客户实现业务无忧

OceanBase 数据库

1. 操作系统—概述

小呆鸟

操作系统 8月月更

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