分布式系统的构建原则

什么是构建一个可维护和可扩展的系统的意义?

在早期,一个系统的形态,只是满足用户和服务器资源之间的通道,唯一要扩展和维护的是系统后面的资源,保证资源的可用和够用,而系统本身的压力并不大。

系统设计跟我们生活中大多数事情一样,都需要花时间提前规划,能够让我们的服务长时间在线。所以,我们了解和总结一些大型系统背后的思考和权衡,能够帮助我们在系统早期做出一些明智和靠谱的决策。

如今,开源组件已经成为构建一些企业系统的基石,伴随着行业的发展,最佳实践和围绕这些系统架构的指导原则也逐渐显现出来了,在什么时候该用什么样的技术,需要考虑到哪些方面,各路牛人早有撰文总结。

本文简单回顾一下,我们在设计一些分布式系统的时候需要考虑的一些关键因素,我们称之为 分布式系统设计原则

640?wx_fmt=png

一,分布式系统的设计原则

我们将这些在构建系统需要考虑的因素称之为分布式架构设计原则,如下图所示,有六个部分,右边是我们设计系统要达到的基本要求,包括可用、可靠以及性能,这也是 一个可维护和可扩展系统最大的意义,而左边是系统设计和开发期间要考虑的三个部分,包括扩展性、维护性和成本控制。

我把原则分为俩个大的方面,目标原则 和 实践原则,

640?wx_fmt=png

先来看一下目标原则,

站在用户和公司的角度,要求我们设计的系统都必须要满足以下几个原则,特别是互联网性质的系统,这三个原则都是非常重要的。

  1. 可用性,系统的正常在线可用时间,对许多公司的产品声誉来说是绝对至关重要的指标,例如一些大型的零售商网站,几分钟的不可用会导致巨大的损失,长此以往,客户也会流失殆尽。
    因此,设计这些系统能够长期稳定在线,并有系统一定的容错能力是当代企业和科技公司必备的基本能力。做到高可用,要在分布式系统中要求我们深思熟虑的对一些关键组件进行冗余设计,发生故障时,能够即时恢复,或者优雅降级(降级通常不解决问题,优化用户体验的一种妥协的做法);

  2. 可靠性,系统的可靠性,能够保证数据分区后,数据的一致性和持久性,相同的请求同一时间返回一致的数据,数据更新以后用户能够获取最新的数据,如果是最终一致,或延迟一致要保证数据的持久性;

  3. 性能,系统性能,由于用户和流量的不断增长,逐渐成为很多公司关注的另一个焦点,因为虽然做到可用,但系统响应速度也会直接影响用户的使用和满意度,如果是网站的话,也会影响搜索引擎的排名,最终影响用户的粘度和收益。
    所以,优化系统的响应速度,降低延迟,提高吞吐量,也是非常关键的。

满足以上目标原则,我们要考虑系统的实现,如何来满足以上的目标原则,我把他称为 实现原则,能够在不同的阶段,让系统都能够适应需求的变化,并在提高成本的情况下,持续满足以上几个目标原则。

来看一下实现原则:

  1. 扩展性,当今但凡谈到分布式系统,扩展性是首要考虑的一个方面,Google在这方面表现的尤为激进,可以让系统做到无限扩展,例如Spanner,用空间换效率,用规模覆盖算法的次优选。所以,扩展系统的各个部分,几乎是达到可用性、可靠性和性能要求的主要手段。
    扩展性涉及系统的方方面面,通常是俩个纬度,scale up 和 scale out,当然,在《The Art Of Scalability》中,提到的Scale Cube,是从三个不同纬度来扩展系统,也是扩展的一种方法,稍后单开一篇介绍,这里就不展开了; 

    640?wx_fmt=png


  2. 维护性,正所谓,一个系统配套好的运维工具,能够千方百计的弥补和设法绕过系统实现上的缺陷,使得系统整体可用性比较高,相反,会让系统的任何的问题都会毫无掩盖的暴露给用户,没有任何预警信息,同时也会增加发现问题和排查问题的成本。
    因此,在设计和实现一个系统的时候,如何做到容易维护是另一个重要的考量,几乎跟扩展性同样重要,当问题发生,我们如何及时的诊断和了解问题原因,甚至能够及时的做出行动,影响系统,控制损失,降低故障级别;
    (本人多次在这方面吃亏,经历了血的教训,开始把运维工具与功能开发提到同样的重要级别,确保问题能够及时发现,甚至提前预警)

  3. 成本控制,成本当然也是一个重要的方面,包括开发、维护、培训和硬件等成本,系统开发完成上线之后,硬件的持续投入会让成本不断增加,要让成本的投入看到效能的成倍增长,同时,根据业务量,伸缩成本的投入,按需开资,不过度设计和过度冗余,导致资源闲置,浪费。

二,小结:

这些原则作为在分布式系统架构设计的基本决策的原则,并不是绝对真理,在实践当中,有时候会发生冲突和矛盾,需要做出一些牺牲和平衡,例如,在实践扩展性的时候,会增加维护和开销成本,甚至会影响可靠性。

不管怎么说,在设计分布式系统的时候,关注这些原则是非常重要的,即使有时候需要做出一些牺牲和平衡,但,这就是技术,这也是生活。

三,参考:

  1. http://www.aosabook.org/en/distsys.html 《Scalable Web Architecture and Distributed Systems》

  2. https://microservices.io/articles/scalecube.html 《The Scale Cube》


原文地址:https://www.cnblogs.com/xguo/p/10549030.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[HEOI2016TJOI2016]排序(二分+线段树)

problem 洛谷链接 solution 在一个丝毫没有单调性的问题中很难想到将其转化为二分。 二分最后在第 ppp 位置上的值 xxx。 然后将所有 ≥x\ge x≥x 的赋为 111&#xff0c;所有 <x<x<x 的赋为 000。 经过一系列区间排序操作后&#xff0c;最后我们只在乎第 ppp 位…

可持久化4--可持久化并查集

可持久化并查集 可持久化并查集 按秩合并并查集 可持久化数组 首先并查集不能采用路径压缩&#xff0c;这是因为一次findR操作中&#xff0c;fa数组的很多位置&#xff08;u->ru&#xff09;会发生修改&#xff0c;由于每次修改都需要在可持久化数组上复制产生log个新结…

ASP.NET Core 2.2中的Endpoint路由

在ASP.NET Core 2.2中&#xff0c;新增了一种路由&#xff0c;叫做Endpoint&#xff08;终结点&#xff09;路由。本文将以往的路由系统称为传统路由。本文通过源码的方式介绍传统路由和Endpoint路由部分核心功能和实现方法&#xff0c;具体功能上的差异见官方文档。在升级到AS…

AtCoder2063 [AGC005E] Sugigma The Showdown(博弈论)

problem 洛谷链接 solution 考虑一条 (u,v)(u,v)(u,v) 的红边&#xff0c;在蓝树上 u,vu,vu,v 两点距离 ≥3\ge 3≥3。 如果先手到达 u,vu,vu,v 其中任何一点且下一步后手行动无法抓住先手&#xff0c;那么这个游戏就将进入死循环了。 通过画图&#xff0c;你会发现这个结…

基于ASP.NET Core的模块化设计: 虚拟文件系统

土牛亲自录制的本文介绍视频Abp中文网(https://cn.abp.io/)提供翻译字幕基于ASP.NET Core的模块化设计: 虚拟文件系统简介创建模块化的应用程序很困难. 构建模块化的用户界面更加困难. 需要单独开发模块的页面和组件,但是最后要把它们集成在一起像单个UI一样创建这样的模块化架…

[SDOI2012]吊灯(结论)

problem 洛谷链接 solution 显然&#xff0c;颜色相同的灯泡形成一个连通块&#xff0c;且连通块的大小 i∣ni\mid ni∣n。 这道题要能发现一个结论&#xff1a;一定至少存在一种颜色的连通块 满足该联通块内的任意一个节点 都不是异种颜色点 的父亲。 即&#xff0c;至少…

一文带你全面认识Excel催化剂系列功能

2018年1月1日决定打造一款Excel插件&#xff0c;取名为Excel催化剂&#xff0c;历时半年的时间&#xff0c;在努力打造出和传统插件有功能差异化的基础上&#xff0c;让大家可以真正得到一些有价值非鸡肋的功能&#xff0c;对开发什么样的功能也构思了许久&#xff0c;同时对免…

可持久化汇总(讲解+题目)

可持久化(一) 可持久化(二) 可持久化3–可持久化01Trie 可持久化4–可持久化并查集 各模块的例题都在各自讲解下面有写 下面是加强练习 练习题讲解——肖然老师的博客 练习题&#xff1a; P4137 Rmq Problem / mex P4587 [FJOI2016]神秘数 CF484E Sign on Fence CF1080F Katya …

[学习笔记] 乱世之神杀疯了 —— K-D tree

文章目录K-D tree建树合并插入删除查询(估价函数)旋转坐标系题目练习[SDOI2012]最近最远点对[Violet]天使玩偶/SJY摆棋子[CQOI2016]K远点对[国家集训队]JZPFARThe closest M points简单题巧克力王国[BOI2007]Mokia 摩基亚[CH弱省胡策R2]TATT[BZOJ3815]卡常数[NOI2019]弹跳A sim…

【春华秋实】.NET Core之只是多看了你一眼

技术学习是一件系统性的事情&#xff0c;如果拒绝学习&#xff0c;那么自己就会落后以至于被替代。.NET也是一样&#xff0c;当开源、跨平台成为主流的时候&#xff0c;如果再故步自封&#xff0c;等待.NET的就是死路一条&#xff0c;幸好.NET Core问世了&#xff0c;社区反响积…

[SDOI2010]粟粟的书架

[SDOI2010]粟粟的书架 题意&#xff1a; 一个R * C的矩阵&#xff0c;每个位置都有个数page[ij]&#xff0c;现在选定一个小矩阵范围(给左上角坐标&#xff0c;和右下角坐标)&#xff0c;问这个范围内的数总和是否大于h&#xff0c;如果大于h的话最少选几个数aij 对于50%的数…

基于Asp.Net Core的简单社区项目源代码开源

2019年3月27号 更新版本 本项目基于 ASP.NET CORE 3.0EF CORE 3.0开发使用vs2019 sqlserver 2017(数据库脚本最低支持sql server 2012/)使用步骤:1.下载相关开发工具2.运行数据库脚本目录下的相关脚本3.默认前端账号密码: 18812345678 1234564.默认后台账号密码: admin 123456开…

[学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理

群与子群 <G,op><G,op><G,op> 是一个群需要满足以下条件&#xff1a; opopop 是一个满足结合律的二元运算&#xff0c;如 *&#xff0c;。GGG 是一个集合&#xff0c;存在单位元 eee。GGG 中所有元素都有逆元。即 GGG 对 opopop 运算封闭&#xff0c;封闭简单…

P2469 [SDOI2010]星际竞速

P2469 [SDOI2010]星际竞速 题意&#xff1a; 有n个点&#xff0c;m个边&#xff0c;边是单向边(只能从小编号点到大编号点)&#xff0c;你也可以花费ai直接到达点i。问将1~n所有点都经过一边最小费用是多少&#xff1f; 题解&#xff1a; 最小费用最大流&#xff0c;网络流…

为什么从前那些.NET开发者都不写单元测试呢?

楔子四年前我虽然也写了很多年代码&#xff0c;由于公司虽然规模不小&#xff0c;却并非一家规范化的软件公司&#xff0c;因此在项目中严格意义上来说并没有架构设计、也不写单元测试&#xff0c;后来有幸加入了一家公司&#xff0c;这家公司虽然也是一家小公司&#xff0c;但…

git 命令的使用

git 各个命令的详细使用方法参考git-docs。 Table of Contents git Table of Contents add archive blame branch checkout cherry-pick clone commit config diff fetch for-each-ref github init log & show merge mv pull push rebase remote r…

求和(莫比乌斯反演)

由于找不到提交网站&#xff0c;所以不保证正确性哦~ problem 已知积性函数 F(1)1&#xff0c;F(pk)pk1F(1)1&#xff0c;F(p^k)p^k1F(1)1&#xff0c;F(pk)pk1。&#xff08;ppp为质数&#xff0c;k∈Zk∈Z^k∈Z&#xff09; 给定 nnn&#xff0c;求 ∑i1nF(i)\sum_{i1}^n F…

P2467 [SDOI2010]地精部落

P2467 [SDOI2010]地精部落 题意&#xff1a; 有n个山脉高度分别是1到n&#xff0c;现在让你按照山峰山谷的顺序依次摆放(第一个可以是山峰也可以是山谷)&#xff0c;问有多少方案(答案mod p) 题解&#xff1a; dp&#xff0c;但是自己推不出来 这个博客讲的非常详细&#x…

使用 xUnit 编写 ASP.NET Core 单元测试

还记得 .NET Framework 的 ASP.NET WebForm 吗&#xff1f;那个年代如果要在 Web 层做单元测试简直就是灾难啊。.NET Core 吸取教训&#xff0c;在设计上考虑到了可测试性&#xff0c;就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的。其中面向接口和依赖注入…

[刷题记录] luogu网络流24题 及 网络流心得体会 及 经典模型不定期更新

文章目录信息汇总表格飞行员配对方案问题分配问题运输问题数字梯形问题最小路径覆盖问题魔术球问题圆桌问题试题库问题深海机器人问题航空路线问题火星探险问题太空飞行计划问题方格取数问题骑士共存问题最长不下降子序列问题孤岛营救问题汽车加油行驶问题[CTSC1999]家园 / 星际…