写点什么

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

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

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

关注

评论

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

揭开进程的概念、状态、通信的迷雾。看完瞬间豁然开朗

Linux服务器开发

线程 网络编程 Linux服务器开发 Linux后台开发 进程管理

想要跳槽拿高薪,却没有大型性能调优经验怎么办?淘宝架构师手把手带你前进

Java架构师迁哥

2021年您应该知道的技术之一!Java工程师一天工作多久

策划Java工程师

Java 程序员 面试 后端

2021春招BAT面试真题详解,mysqlloaddata自增id

策划Java工程师

Java 程序员 面试 后端

Java磁盘文件IO

文件I/O

Drools 入门

LeifChen

drools 规则引擎 8月日更 业务规则

程序员有哪些不可或缺的效率神器?

Jackpop

开发

Text classification with TensorFlow Hub: Movie reviews

毛显新

tensorflow

开发者必备神器,你真的会用吗?

Jackpop

各国纷纷推出数字货币,数字货币发展正当其时

CECBC

牛客网爆火!面试命中率高达 90% 的阿里 10W 字面试笔记已被疯传

Java 程序员 架构 面试 计算机

音视频详细学习路线和权威资料

hanaper

音视频 ffmpeg 语音识别 语音合成 图形图像处理

北鲲云超算平台如何提高高性能计算在云环境下的可行性?

北鲲云

阿里面试官把以往的Java面试题全部总结在这份《Java10W字面试复盘笔记》里面了

Java 程序员 架构 面试 计算机

Fil行情:什么时候投资fil合适?

区块链 分布式存储 IPFS fil fil行情

毕业总结

请弄脏我的身体

架构实战营

外包学生管理系统的架构设计

架构0期-Bingo

【翻译】数据包的旅程 - 关键角色

luojiahu

交换机 路由器 OSI模型 ARP协议

程序员专属的搜索主页

程序员阿杜

搜索技巧 搜索引擎;

体验设计工具:18格窗口

石云升

用户体验 7月日更 体验设计

区块链产业政策红利加速释放

CECBC

2021春招BAT面试真题详解,从单体式架构迁移到微服务架构

策划Java工程师

Java 程序员 面试 后端

网络安全现状,一个黑客真实的收入

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞分析

「SQL数据分析系列」13. 索引和约束

Databri_AI

sql 分布式

Introduction to the Keras Tuner

毛显新

tensorflow

2021春招面试,mysql自增主键最大值

策划Java工程师

Java 程序员 面试 后端

redis,memcached,nginx网络组件

赖猫

nginx redis memcached 网络组件

Tensorflow日常随笔(一)

毛显新

tensorflow

操作系统--虚拟内存

en

熬夜整理的c/c++万字总结(一)

C语言与CPP编程

c c++

Druid 查询返回引擎版本困惑的地方

HoneyMoose

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