写点什么

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

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

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

关注

评论

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

整天都在讨论使用SpringBoot,可你居然连缓存都不清楚

小Q

Java 缓存 学习 面试 springboot

华为云&跟谁学|华为云API入门学习赛·AI人脸识别 未来工程师梦想的起点

DT极客

AOT星辰生态系统APP开发|AOT星辰生态软件开发

系统开发 现成系统

🤳你要悄悄变优秀,然后惊艳所有人

蚂蚁集团移动开发平台 mPaaS

mPaaS 智能投放 界面改版 产品资讯

从零开始搭建Kafka+SpringBoot分布式消息系统

小Q

kafka zookeeper 学习 面试 springboot

开发技巧 | mPaaS 小程序自定义事件,如何取消注册?

蚂蚁集团移动开发平台 mPaaS

小程序 API mPaaS

接口测试之post常见数据提交方式

测试人生路

post 接口测试

专访阿里云 Serverless 负责人:无服务器不会让后端失业

阿里巴巴云原生

Serverless 微服务 云原生 CloudNative 无服务器

稳坐开发领域霸主之位,揭秘C语言无可取代的几大原因!

华为云开发者联盟

c rust Go 语言

年轻人,快来看看分布式与集群的区别是什么?

程序员小灰

redis 分布式 后台开发 集群 Linux服务器开发

高并发的核心 - AQS【哪些琐是基于AQS来实现的】

Java架构师迁哥

框架设计

raox

极客大学架构师训练营

小心踩雷,一次Java内存泄漏排查实战

AI乔治

Java 架构 JVM 内存

语音识别端到端模型解读:FSMN及其变体模型

华为云开发者联盟

大数据 模型 语音识别

了不起的 Deno:带你极速获取各大平台今日热榜

华为云开发者联盟

Java 安全 deno

「五大常用算法」一文搞懂分治算法

bigsai

算法 分治算法;

SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis最拿得出手的功能之一

比伯

Java 编程 架构 面试 计算机

记一次GC频繁且间隔较长解决实战总结

AI乔治

Java 架构 JVM GC

解锁高速 IT 团队利器:Jira Service Management

Atlassian

DevOps Atlassian Jira ITSM ITIL

AWS IoT Core设计解析

soolaugust

边缘计算 AWS 工业4.0 工业物联网 iiot

LiteOS基于Sensorhub的超声波模组移植

华为云开发者联盟

物联网 LiteOS 超声波

为什么short、byte会被提升为int?及基本类型的真实大小

烫烫烫个喵啊

Java JVM

「linux」Socket缓存是如何影响TCP性能的?

linux大本营

Linux 后台开发 socket 架构师 TCP/IP

数字货币管理三大新模式

CECBC

数字货币

淦!终于有人把Java 8和Spring 5完美合体了,业界堪称“神迹”

Java架构追梦

Java spring 架构 面试 springboot

双非本硕四面百度竟意外成功?看完我的面试经历 网友都称:过于优秀

比伯

Java 编程 架构 面试 计算机

深入解读:KubeVela 与 PaaS 有何不同?

阿里巴巴云原生

阿里云 开源 容器 云原生 CloudNative

架构师训练营 -week11-作业

大刘

极客大学架构师训练营

3本书免费学习数据科学与统计学

计算机与AI

统计学

面对日益严峻的网络安全问题,CDN可以做什么?

阿里云Edge Plus

将项目发布到 Homebrew 官方仓库

郭旭东

macos brew homebrew

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