写点什么

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

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

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

关注

评论

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

ReactNative进阶(三十六):ES8 中 async 与 await 使用方法详解

No Silver Bullet

Async React Native await 1月月更

Android Studio开发flutter快捷键及文本显示技巧。

坚果

flutter 1月月更

复古冰雪传奇H5游戏详细图文架设教程

echeverra

游戏开发 游戏

git 使用总结

麦可

git 开发工具

模块六

Only

架构师实战营 「架构实战营」

CVE-2021-4034 Linux Polkit 权限提升漏洞挖掘思路解读

腾讯安全云鼎实验室

云原生 漏洞分析

微信朋友圈架构设计

刘洋

#架构实战营

ChaosCraft:和女朋友一起来 Hackathon 表演绝活丨滑滑蛋团队访谈

PingCAP

Centos7下Nginx编译安装与脚本安装的记录

edd

WorkPlus赋能数字政府迈入发展新阶段

BeeWorks

我的架构学习之始

浪飞

微信业务架构 & 学生管理系统架构

凌波微步

「架构实战营」

「架构实战营」模块一作业

hxb

「架构实战营」

LabVIEW仪表盘识别(实战篇—6)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 仪表盘识别

模块一作业--

Leo

「架构实战营」

架构实战营5期模块1作业

lovles

「架构实战营」

写了这么多年后端,你知道事务脚本模式吗?

蜜糖的代码注释

Java 互联网 后端

一起玩转LiteOS组件:TinyFrame

华为云开发者联盟

LiteOS 串口 LiteOS组件 TinyFrame

Linux之ps命令

入门小站

Linux

架构训练营模块一作业

苍狼

[架构实战营]-架构实训一

邹玉麒

「架构实战营」

音视频技术如何为元宇宙提供全真稳的全新体验之漫话腾讯云音视频 | 社区征文

liuzhen007

音视频 1月月更 新春征文

华为云FusionInsight连续三次获得第一,加速释放数据要素价值

华为云开发者联盟

大数据 数据湖 云原生 FusionInsight 华为云

高效管理邮件的方式

NinetyH

工具软件 办公效率 邮件管理

IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?

BeeWorks

什么时候该减少质量投入?

QualityFocus

质量管理 软件测试 测试思维

研发转岗产品经理,有什么需要注意的呢?

石云升

产品经理 产品思维 1月月更

华山论“件”:Kafka、RabbitMQ、RocketMQ技能大比拼

华为云开发者联盟

kafka RocketMQ RabbitMQ 华为云 消息中间件

小程序电商业务微服务拆分及基础设施选型

swallowluo

架构实战营 #架构实战营 「架构实战营」

获奖作品公布,快来看看有没有你!

InfoQ写作社区官方

新春征文 热门活动

JavaScript 之 Proxy

编程三昧

JavaScript 前端 Proxy 1月月更

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