写点什么

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

评论

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

号外!多个企业数智化领先实践将亮相2023用友BIP技术大会

用友BIP

技术大会 用友iuap 升级企业数智化底座 央国企数智化转型

Nautilus Chain 上首个 DEX PoseiSwap 模型解析

鳄鱼视界

一次排查某某云上的redis读超时经历

蓝胖子的编程梦

redis 性能 线上事故 线上故障 超时

openGemini 1.0版本,带来哪些新特性和性能提升?

华为云开源

数据库 时序数据库 sql

交大翟广涛教授:眼见不实,怎样评价媒体体验质量

小红书技术REDtech

深度学习

低代码是什么意思

优秀

低代码

首次解密小红书“种草”机制:大规模深度学习系统技术是如何应用的

小红书技术REDtech

深度学习 机制策略 活动回顾

复旦邱锡鹏教授:语言模型即服务的五类应用手段,你了解多少

小红书技术REDtech

深度学习 nlp

mysql invalid conn排查

蓝胖子的编程梦

MySQL 性能 线上故障 超时 连接池

一次系统延迟性优化案例

蓝胖子的编程梦

golang 性能 延迟 线上事故 线上故障

不同云平台之间的纳管用什么工具好?有推荐的吗?

行云管家

云计算 云平台

LED显示屏品质如何控制

Dylan

品牌 LED显示屏 全彩LED显示屏

软件测试/测试开发丨Dubbo 接口测试原理及多种方法实践总结

测试人

dubbo 软件测试 接口测试

Spring Cloud微服务网关Zuul过滤链和整合OAuth2+JWT入门实战

Java Spring Cloud OAuth2 JWT Zuul

Web前端组件库OpenTiny项目如何使用?

英勇无比的消炎药

开源 前端 OpenTiny UI组件库

通过4种经典应用,带你熟悉回溯算法

华为云开发者联盟

人工智能 华为云 回溯算法 华为云开发者联盟 企业号 4 月 PK 榜

一站式指标平台 Kyligence Zen 功能详解

Kyligence

数据分析 指标平台

厦门等级保护测评机构地址在哪里?咨询电话多少?

行云管家

等级测评 厦门

【基础知识】PCB布局设计入门步骤

华秋PCB

工具 电路 PCB 布局 PCB设计

【云图说】云数据库GaussDB如何做到卓越性能

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Kubernetes 多集群网络方案系列 1 -- Submariner 介绍

Se7en

一次goroutine 泄漏排查案例

蓝胖子的编程梦

golang 性能 协程 pprof 线上故障

NFT游戏开发交易系统搭建方案

薇電13242772558

NFT

Codepipeline 跨账号访问 Codecommit

亚马逊云科技 (Amazon Web Services)

AI时代,看用友iuap如何推动数智商业创新

用友BIP

AI 技术大会 数智底座 升级企业数智底座

三维设计新帮手|Blender怎么入门?

Finovy Cloud

blender 3D软件

程序员如何打破需求魔咒:为什么人越招越多,活越干越累?

小红书技术REDtech

算法 活动回顾

轻松几秒提升视频清晰度:Perfectly Clear Video Mac版

真大的脸盆

Mac 视频处理 视频增强 Mac 软件 视频画质

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