2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

高可扩展分布式应用程序的架构原则

  • 2015-11-02
  • 本文字数:1054 字

    阅读完需:约 3 分钟

Elastisys 云平台诞生于瑞典默奥大学分布式系统研究小组。它由一组以预测性扩展引擎为中心的工具组成,可以自动扩展云部署。近日,其官方网站发表了一篇文章,介绍他们在高可扩展分布式应用程序设计和开发方面的经验。

他们将可扩展性分成了如下四个维度:

  • 性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步性的组件。具备完成通知功能的工作队列要优于同步连接到数据库。
  • 可用性可扩展 CAP 理论表明,分布式系统无法同时提供一致性、可用性和分区容错性保证。许多大规模 Web 应用程序都为了可用性和分区容错性而牺牲了强一致性,而后者则有赖于最终一致性来保证。
  • 维护可扩展:软件和服务器都需要维护。在使用平台 & 工具监控和更新应用程序时,要尽可能地自动化。
  • 成本可扩展:总拥有成本包括开发、维护和运营支出。在设计一个系统时,要在重用现有组件和完全新开发组件之间进行权衡。现有组件很少能完全满足需求,但修改现有组件的成本还是可能低于开发一个完全不同的方案。另外,使用符合行业标准的技术使组织更容易聘到专家,而发布独有的开源方案则可能帮助组织从社区中挖掘人才。

以上各项,他们在设计应用程序时都会考虑和权衡。下面是他们根据上述内容总结出的 10 个设计原则:

  1. 避免单点故障:任何东西都要有两个。这增加了成本和复杂度,但却能在可用性和负载性能上获益。而且,这有助于设计者采用一种分布式优先的思维。
  2. 横向扩展,而不是纵向扩展:升级服务器(纵向)的成本是指数增长的,而增加另一台商用服务器(横向)的成本是线性增长的。
  3. 尽量减少应用程序核心所需要完成的工作。
  4. API 优先:将应用程序视为一个提供 API 的服务,而且,不假定服务的客户端类型(手机应用、Web 站点、桌面应用程序)。
  5. 总是缓存。
  6. 提供尽可能新的数据:用户可能不需要立即看到最新的数据,最终一致性可以带来更高的可用性。
  7. 设计时要考虑维护和自动化:不要低估应用程序维护所需要的时间和工作量。软件首次公开发布是一个值得称赞的里程碑,但也标志着真正的工作要开始了。
  8. 宁异步,不同步。
  9. 努力实现无状态:状态信息要保存在尽可能少的地方,而且要保存在专门设计的组件中。
  10. 为故障做好准备:将故障对终端用户的影响最小化。

关于分布式系统的设计,InfoQ 曾有过一些报道( 1 , 2 ),感兴趣的读者可以对照阅读。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-11-02 18:004921
用户头像

发布了 1008 篇内容, 共 420.0 次阅读, 收获喜欢 346 次。

关注

评论

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

LeetCode-67. 二进制求和(java)

bug菌

Leet Code 7月月更

vue2升级vue3:Vue Router报错,directly inside <transition> or <keep-a

zhoulujun

Vue3 router JSX tsx

Kubernetes网络插件详解 - Calico篇 - 概述

巨子嘉

前端食堂技术周刊第 45 期:Vite3.0、第91次TC39会议、Figma背后的CSS、B 站事故复盘、图片优化工具

童欧巴

前端 deno vite TC39 figma

C#入门系列(三十一) -- 运算符重载

陈言必行

7月月更

算法题每日一练---第10天:时间显示

知心宝贝

算法 前端 后端 7月月更

以寡治众各个击破,超大文件分片上传之构建基于Vue.js3.0+Ant-desgin+Tornado6纯异步IO高效写入服务

刘悦的技术博客

tornado 异步 数据分片 Vue 3 文件上传

C# Serialport的发送和接收

IC00

C# 7月月更

vue2升级vue3:composition api中监听路由参数改变

zhoulujun

Vue3 路由参数 参数监听 路由跳转

vue2升级vue3:vue3创建全局属性和方法

zhoulujun

Vue3 全局变量 全局方法

vue2升级vue3:vue3 hooks库选用

zhoulujun

Vue3 Hooks vueuse ahooks

vue2升级vue3:单文件组件概述 及 defineExpos/expose

zhoulujun

Vue3 expose

为啥谷歌的内部工具不适合你?

laofo

DevOps cicd 研发效能 工具链 谷歌

如何使用Docker内的kafka服务

程序员欣宸

Java kafka 7月月更

这次龙蜥展区玩的新花样,看看是谁的 DNA 动了?

OpenAnolis小助手

龙蜥社区 北京 开放原子全球开源峰会 7 月 27 日-29 日 分论坛

栈与Stack类

未见花闻

7月月更

vue2升级vue3: h、createVNode、render、createApp使用

zhoulujun

Vue3

vue2升级vue3:provide与inject 使用注意事项

zhoulujun

Vue3 provide inject

Prometheus 运维工具 Promtool (二)Query 功能

耳东@Erdong

Prometheus 7月月更 Promtool

信息安全建设原则指导

穿过生命散发芬芳

7月月更 信息安全建设

动画曲线天天用,你能自己整一个吗?看完这篇你就会了!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

互联网协议之 IPFS

devpoint

区块链 IPFS Filecoin 7月月更

第二届中国Rust开发者大会来啦,完整议程大曝光!

Mike Tang

rust rust conf

java零基础入门-异常、线程(上)

喵手

Java 7月月更

模块二作业

薛敏

Bootstrap快捷开发【前端Bootstrap框架】

恒山其若陋兮

7月月更

IPv4地址已经完全耗尽,互联网还能正常运转,NAT是最大功臣!

wljslmz

NAT ipv4 网络技术 7月月更

数据质量:数据治理的核心

奔向架构师

数据治理 7月月更

依法严厉打击违规自媒体运营者:净化自媒体行业迫在眉睫

石头IT视角

vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件

zhoulujun

Vue3 vue2 demij vue2有vue3兼容

高可扩展分布式应用程序的架构原则_语言 & 开发_谢丽_InfoQ精选文章