NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

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

关注

评论

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

Redis 缓存的三大问题及其解决方案

xcbeyond

redis 缓存 6月日更

这个 “少年黑客”,用黑科技守护独居老人

阿里云视频云

阿里云 计算机视觉 音视频 养老

戴着镣铐起舞的算法市场

脑极体

JavaScript 代码逻辑判断的优化

编程三昧

JavaScript 大前端 代码质量 代码优化 编程思想

Kubernetes手记(4)- 命令入门

雪雷

6月日更

Java程序员【面试】与【进阶】3个最佳学习方法

Java架构师迁哥

我的程序员生涯(1)

胡途

程序员 职业生涯

我的程序员生涯(2)

胡途

程序员 职业生涯

应用,才是区块链的终极归宿

CECBC

架构训练营模块 5 作业 - 江哲

江哲

Sprint Review != Demo——《Scrum指南》重读有感(4)

Bruce Talk

Scrum 敏捷 随笔 Agile

El Camino de Santiago

escray

6月日更

【译】编写整洁 React 代码的简单实践

KooFE

大前端 React 6月日更 整洁代码

Atlassian 最受欢迎的分析工具强势融入 Confluence Data Center!

Atlassian

DevOps 知识管理 Atlassian Jira Confluence

MySQL基础之五:其他过滤方式

打工人!

myslq 6月日更

平衡计分卡- 战略落地的工具

石云升

创业 战略 职场经验 6月日更

如何使用Tauri和Ember.js创建小型、快速和酷的桌面应用程序

代码先生

tauri ember.js desktop程序

自制文件系统 —— 02 开发者的福音,FUSE文件系统

奇伢云存储

Linux 文件系统 FUSE

Git使用

xujiangniao

区块链能否为应对气候变化 提供解决方案?

CECBC

区块链+数字政务:成都高新区如何创新

CECBC

5分钟速读之Rust权威指南(十八)

wzx

rust 范型 trait

APISIX2.6微服务网关入门

菠萝吹雪—Code

架构实战营

相似度计算-句子

Qien Z.

nlp 6月日更 tf-idf

Python——注释和字符串的拼接

在即

6月日更

Bzz节点分币系统搭建,Bzz矿机挖矿系统

网络攻防学习笔记 Day38

穿过生命散发芬芳

网络攻防 6月日更

整数划分问题(详解 n > m 情况)

若尘

数据结构 6月日更

理解IM消息“可靠性”和“一致性”问题,以及解决方案探讨

JackJiang

即时通讯 IM 可靠消息最终一致

Bzz节点挖矿系统搭建,Bzz分币系统源码

让JavaScript在WebAssembly上快速运行

代码先生

JIT webassembly WASI

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