报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

评论

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

揭秘ChaosBlade CPU故障:实现CPU故障的黑科技

柠檬汁Code(binbin0325)

源码分析 cpu 混沌工程 ChaosBlade 故障模拟

2023年广西等保测评机构名单看这里!新增一家哦!

行云管家

广西 等级保护 等保测评

4个维度重构组织能力,实现人力资源数智化

用友BIP

人力资源

Vulkan并非“灵药“

江湖修行

移动端 opengl Android; 渲染

共话AIGC与企业数字化转型 PolarDB开源数据库技术沙龙南京站报名中!

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

软件测试 | MySQL创建或者修改视图

测吧(北京)科技有限公司

测试

Swagger 自动生成 Api 文档:提高效率的利器

Liam

程序员 接口文档 swagger 自动生成 API 文档

Docker 入门教程(简明易懂、零基础篇)

搞大屏的小北

Docker 容器 Docker-compose 入门 Docker 镜像

HDMI接口需注意的PCB可制造性设计问题

华秋PCB

接口 工具 PCB PCB设计 可制造性

实践分析丨AscendCL应用编译&运行案例

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 7 月 PK 榜

软件测试 |BTREE索引与HASH索引

测吧(北京)科技有限公司

测试

中小微企业选择哪家云管平台好?理由有哪些?

行云管家

云计算 云管平台 云管理

软件测试 | 创建触发器

测吧(北京)科技有限公司

测试

数据库集群方案详解

KaiwuDB

KaiwuDB 数据库集群技术

MobPush 创建推送

MobTech袤博科技

前端 消息推送 智能推送 前端‘’ 推送系统

中原银行SQL治理实践

中原银行

SQL优化

前端视角的可观测性(一)

林十二XII

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布

JackJiang

网络编程 即时通讯 IM

MatrixOne:HTAP数据库中的OLAP设计

MatrixOrigin

云原生 超融合 HTAP MatrixOrigin MatrixOne

使用 njs 0.7.7 提高 NGINX 配置的模块化程度和可复用性

NGINX开源社区

Flink Metrics&REST API 介绍和原理解析

腾讯云大数据

流计算 Oceanus

从分片传输到并行传输之大文件传输加速技术

镭速

大文件传输

扫盲低代码

互联网工科生

前端 低代码 应用开发

GaussDB(for Redis)多租户:读写权限控制和数据库隔离的完美融合

华为云开发者联盟

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

5分钟迁移关系型数据库到图数据库

华为云开发者联盟

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

动态QPS压测模型【Go语言】

FunTester

用友BIP助力企业全球化运营与人才管理

用友BIP

中企出海 数智人力

PingCAP 陈煜琦:深耕中国市场,构建客户成功生态

PingCAP

MySQL 数据库 开源 TiDB pingCAP

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