写点什么

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

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

    阅读完需:约 3 分钟

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:323298
用户头像

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

关注

评论

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

ARTS 挑战打卡第十一周(200720-200726)

老胡爱分享

ARTS 打卡计划

高效程序员的45个习惯:敏捷开发修炼之道(5)

石云升

敏捷开发 熵增 用代码沟通

linux入门系列13--磁盘管理之RAID、LVM技术

程序员潘Sir

Linux centos raid lvm 磁盘挂载

SpreadJS 纯前端表格控件应用案例:立信智能审计云平台(SACP)

葡萄城技术团队

3.7亿条保单数据怎么分析?这个大数据平台有绝招

华为云开发者联盟

大数据 hadoop 数据湖 FusionInsight Kyligence

【程序员自救指南】一个证书,让我哄好了小师妹

华为云开发者联盟

网络安全 浏览器 华为云 SSL证书 安全证书

知识点:操作系统异常的分类

wangkx

操作系统 异常

linux入门系列11--Centos7网络服务管理

程序员潘Sir

Linux centos 网络配置 运维工程师

13年毕业,用两年时间从外包走进互联网大厂!

小傅哥

成长 小傅哥 经历 工作 入职

七夕情人节,程序员的表白方式简直太秀了!

程序员生活志

程序员 七夕

Python实现一个计时功能的装饰器

wangkx

Python 装饰器

SpreadJS 纯前端表格控件应用案例:货运代理客户服务平台

葡萄城技术团队

大数据思维与运用

石云升

大数据 数据建模 数据驱动

追逐影子的人,最终只会是影子

小隐乐乐

java安全编码指南之:基础篇

程序那些事

Java 安全编码 安全编码指南

Docker 最常用的镜像命令和容器命令

哈喽沃德先生

Docker 容器 微服务

ARTS 挑战打卡第十周(200713-200719)

老胡爱分享

ARTS 打卡计划

7. Jackson用树模型处理JSON是必备技能,不信你看

YourBatman

json Jackson ObjectMapper 树模型

七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

华为云开发者联盟

AI 智能高效 华为云 modelarts 七夕

英特尔大小核试水 将推出8+8+1架构酷睿处理器

E科讯

正向代理与反向代理

wangkx

nginx 反向代理 代理 正向代理与反向代理 Proxy

一行代码实现简易服务器并共享文件

wangkx

Python 共享文件

百度联合发布全球最大中文自然语言处理数据共建计划“千言”

百度大脑

人工智能 百度 nlp 百度大脑

新晋“网红”Cat1 是什么

华为云开发者联盟

后端 物联网 华为云 无线通信 Cat.1

ARTS 挑战打卡第十二周(200727-200802)

老胡爱分享

ARTS 打卡计划

linux入门系列12--磁盘管理之分区、格式化与挂载

程序员潘Sir

Linux centos 编辑器 linux运维 vi/vim

linux入门系列14--ssh服务及主机远程管理

程序员潘Sir

Linux centos linux运维 红帽认证

linux入门系列15--文件传输之vsftp服务

程序员潘Sir

Linux centos linux操作 linux运维

惠普精灵家族助力IMC上海站,极致体验尽享电竞狂欢

E科讯

ARTS 挑战打卡第十三周(200803-200809)

老胡爱分享

ARTS 打卡计划

LeetCode题解:20. 有效的括号,for循环replace,JavaScript,详细注释

Lee Chen

大前端 LeetCode

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