大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

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

关注

评论

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

变性手术后,产品总监和当当网打起了官司

赵新龙

法律 判决书 案例

linux上强大的字符串匹配工具详解-grep

X先生

Shell grep

第六期总结

GAC·DU

一文快速掌握华为云IPv6基础知识及使用指南

华为云开发者联盟

物联网中台 物联网 网络 华为云

知乎,挣钱?果然有长尾效应

非著名程序员

程序员 副业 副业赚钱 知乎 好物推荐

Java8——Stream流

Java旅途

如何做一次完美的 ABTest?

vivo互联网技术

数据分析 AB testing实战

重读vue2.0风格指南,我整理了这些关键规则

前端有的玩

Java Vue 代码规范

技术科普丨服务发现和负载均衡的来龙去脉

华为云开发者联盟

负载均衡 微服务 开发者工具 服务端 服务

数十家技术社区联名推荐的GeekOnline来了!

Geek_116789

GitHub Actions和mp-ci助力微信小程序持续集成

neo

微信小程序 taro GitHub CI/CD

API接口管理平台YAPI的搭建

Man

DevOps APi设计 YAPI

Java HashMap 的那么多为什么

多选参数

Java Java源码

有了“质量墙”,程序员再也没有秃头的烦恼

华为云开发者联盟

程序员 软件 代码审查 项目 代码

腾讯面了五轮,面委挂了,挂的原因让大家唏嘘...

程序员生活志

腾讯 面试

如何帮助技术员工高效成长?这几家企业的做法值得借鉴

极客时间企业版

研发管理 研发团队培训

探索无限潜能,英特尔神经拟态计算除了有“嗅觉”还能有“触觉”

最新动态

信创舆情一线--十五部门印发指导意见进一步促进服务型制造发展

统小信uos

小白如何学习操作系统?

苹果看辽宁体育

操作系统

我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...

why技术

jdk 高并发 LongAdder

前端杂记-回调地狱

阡陌r

JavaScript 回调地狱

数据分析师完整的指标体系构建 (干货)

博文视点Broadview

数据挖掘 读书笔记 数据分析 数据 求职

有趣的条漫版 HashMap,25岁大爷都能看懂

古时的风筝

hashmap

解决方案|智能消防预警系统突破高层楼房限制

华为云开发者联盟

AI 物联网 边缘计算 华为云

第六期作业

GAC·DU

架构师训练营week06 作业

GunShotPanda

架构师训练营week06 学习总结

GunShotPanda

简单的了解一下K8S,并搭建自己的集群

leonsh

Kubernetes 微服务

优傲机器人以人机协作助力中国“智能制造”落地

Geek_116789

猿灯塔:spring Boot Starter开发及源码刨析(七)

猿灯塔

计算机网络基础(四)---网络层-ARP协议与RARP协议

书旅

laravel 计算机网络 网络协议 计算机基础 网络层

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