【AICon 全球人工智能与大模型开发与应用大会】改变 AI 时代下写代码的模式 >>> 了解详情
写点什么

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

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

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

关注

评论

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

软件开发的 5 条核心原则,让工作事半功倍

沉默王二

程序员 软件开发

C++的匿名函数(lambda表达式)

良知犹存

c++ 编程开发

架构师训练营第一期-第二周课后-作业二

极客大学架构师训练营

线上医疗未来的发展

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

网易伏羲问鼎全球AI文创大赛:用户可零门槛生产音视频动画

核桃Eason

人工智能 AI 动画 网易

双亲委派模型与 Flink 的类加载策略

Apache Flink

flink

多端消息推送的设计思考

TaurusCode

Java spring 设计模式 消息推送

LeetCode题解:83. 删除排序链表中的重复元素,迭代,JavaScript,详细注释

Lee Chen

大前端 LeetCode

LeetCode题解:83. 删除排序链表中的重复元素,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构师 0 期 | 大数据相关技术

刁架构

架构师训练

学习Java的三个阶段(学习目标+知识点),一起努力吧!

Java架构师迁哥

极客大学架构师训练营-架构师技术图谱-大作业二

叶鹏

动图演示:手撸堆栈的两种实现方法!

王磊

Java 数据结构 算法

极客大学 - 架构师训练营 第二周

9527

10个常见的软件架构模式

GuoYaxiang

架构模式 软件架构 架构设计

iOS造轮子 - UITableView字母索引条

iOSer

ios 面试 UITableView

小前端探索HTTP

Lam

Java 面试 大前端 网络 HTTP

极客大学架构师训练营 - 同城快递业务架构设计 - 大作业一

叶鹏

架构师训练营第一期-第二周课后-作业一

极客大学架构师训练营

不一样的面向对象(一)

书旅

php 面向对象

聊聊布隆过滤器

大头星

滴滴开源AgileTC:敏捷测试用例管理平台

滴滴技术

开源 滴滴技术 滴滴开源

免费CA证书安装配置与背后原理浅析

陈德伟

你的页面健康吗?

Lam

Java 大前端 浏览器 性能分析

TensorFlow 篇 | TensorFlow 2.x 基于 Keras 的模型构建

Alex

tensorflow keras model

99%的人都能看懂的分布式系统「补偿」机制

华为云开发者联盟

分布式 高可用 系统

Git:改变世界的一次代码提交

华为云开发者联盟

git Linux 代码

高难度对话读书笔记—认知篇

wo是一棵草

Java经典面试题详解,突围金九银十面试季(附详细答案)

Java架构师迁哥

面试官,ThreadLocal 你要这么问,我就挂了!

小傅哥

Java 面试 小傅哥 ThreadLocal 开放寻址

HashMap源码解析

彭阿三

hashmap HashMap底层原理

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