写点什么

提升可伸缩性的八项最佳实践

  • 2009-05-19
  • 本文字数:925 字

    阅读完需:约 3 分钟

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

Wille Faler 提出了八项提升系统可伸缩性和性能的最佳实践,其中包括减少数据库操作、使用缓存、减少网络通信等实践。

1. 减少数据库操作 - 尽可能远离数据库。如无必要,就不要打开数据库连接或者启动事务。

2. 缓存带来的显著变化 - 缓存能极大地减低数据库的负担,特别是当系统通过只读方式访问数据库的时候。内存缓存优于磁盘缓存,而磁盘缓存又优于远程缓存和关系型数据库。

3. 尽可能缓存粗粒度对象 - 缓存粗粒度对象“可以省去遍历 n 个缓存单元的 CPU 开销和时间。而且,获得完整的对象关系图也省去了对象关系图的装配时间。”

4. 不要永久性保存瞬态信息 - 避免在数据库里面存储瞬态数据,比如登录的会话信息。

“状态怪物”是一只非常危险的怪兽。根据一般的规律,在持久性存储设施(数据库、磁盘等)里面只需要保存真实的、必要的、关键的,以及需要备录的业务数据,其他的都不在此列。

5. 位置、位置 - 把东西放在靠近需要使用它们的地方。相对于负载均衡器、Web 服务器、应用服务器和数据库多个环节,直接经过负载均衡器和 Web 服务器从 CDN 获取数据要快一些,开销也更小。

6. 约束对有限资源的并发访问 - 如果多个请求需要访问同样的资源,执行同样的计算,最好是只处理首个请求,让其他的请求等待计算完成后直接使用最终结果。让所有的线程去访问同一个资源只会减缓处理的速度。

7. 分阶段地、异步地处理

根据处理过程的异步性,把该过程分散成单独的步骤,通过队列来隔离;每个步骤使用有限数量的工人线程进行处理:这样经常会给可伸缩性和性能同时带来奇迹般的变化。

8. 使网络延迟最小 - 尽可能使应用系统不去做远程访问,因为网络通信要明显慢于内存访问。在 Faler 这篇文章的评论里面, Steve M. Ciske 对减少数据库操作的做法表示了忧虑:

对于减少数据库操作的做法,我持谨慎态度。我见多了人们走向另一个极端,把所有的东西都放在应用层。

Paweł Stradomski 认为远程内存缓存要快于本地磁盘缓存,Faler 也表示了同意:

远程主机(通过网络连接)缓存可能会快于本地磁盘缓存。如果不考虑网络查找的时间,从磁盘顺序读取数据比从远程主机的内存里面读取数据要慢三倍。

延伸阅读:Simon Brown 的文章“可伸缩性原则”。

查看英文原文 8 Best Practices to Improve Scalability

2009-05-19 20:322783
用户头像

发布了 76 篇内容, 共 23.7 次阅读, 收获喜欢 3 次。

关注

评论

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

Python网络编程socket 简易聊天窗

Flychen

JavaScript 学习笔记——数据类型

zjlulsum

Java 学习 大前端 类型推断 入门

Using R for everything: 方差分解(Variation partition)变量筛选与显著性标注

洗衣机用户不会用洗衣机

数据分析 R

【Howe 学 JAVA】Java 类集框架1——List集合

Howe

Java List 集合

当前的经济形势,如何让自己免于风险?

鼎玉谷

给应届毕业生们的七点建议

Neco.W

大学生日常 工作 应届毕业

探寻融云多年领先的秘密:不断创新贴近开发者真实需求

DT极客

【Howe 学 JAVA】Java 类集框架2——Set 集合

Howe

Java 集合 set

每个人都应该知道的性能参数

ElvinYang

C语言if分支结构

C语言技术网-码农有道

C语言 C语言if分支结构

放假了,你还会打开钉钉么?

无箭的丘比特

高效工作 团队管理 企业文化 个人成长 技术管理

保险知识梳理

魁拔

保险 生活质量

对话 CTO | 喜茶也有 CTO?听陈霈霖讲讲茶饮中的技术甜度

ONES 王颖奇

研发管理 CTO 零售

“随大流”的你是不会成功的

小天同学

个人成长 思考 写作平台 感悟 坚持

如何扩大我们的英语词汇量

董一凡

学习

高仿瑞幸小程序 06 layout布局

曾伟@喵先森

小程序 微信小程序 大前端

面试官竟然一直和我聊线程的启动和终止

Simon郎

Java 大数据 后端 多线程

工具集系列 02|还在为海报设计、LOGO 设计发愁?这些在线工具值得收藏

一尘观世界

效率工具 设计 海报 课程封面 知识付费

你还在这样使用MYSQL吗?

无箭的丘比特

MySQL 数据库 数据库规范 数据库设计

深入理解MDL元数据锁

Simon

MySQL

《Linux就该这么学》笔记(一)

编程随想曲

Linux

OceanBase原理与实现分析

ElvinYang

自助设备系列——技术应用

孙苏勇

产品 行业资讯 智能设备

对话 CTO | 听快看漫画 CTO 李润超讲重塑漫画产业的技术推动力

ONES 王颖奇

研发管理 CTO 动画 文化

C语言常量、变量和关键字

C语言技术网-码农有道

C语言 常量 变量 关键字

C语言输入和输出

C语言技术网-码农有道

C语言 输入 输出

物联网资产整合架构

老任物联网杂谈

物联网架构

游戏夜读 | 游戏设计需要天赋?

game1night

C语言运算符

C语言技术网-码农有道

C语言 运算符

办公人员的 python 妙用——抽签结果提取

小匚

Python 远程办公

前端开发的瓶颈与未来之路

keelii

node.js typescript ruby-on-rails 编程 大前端

提升可伸缩性的八项最佳实践_最佳实践_Abel Avram_InfoQ精选文章