其他分享
首页 > 其他分享> > 分布式架构的演变之路

分布式架构的演变之路

作者:互联网

为什么要使用分布式架构

随着物联网行业的发展,系统业务的扩张,对计算机硬件的要求也越来越高了,单台设备做的再好,也很难满足业务需求,而且这样的设备价格也是非常昂贵的,一般企业也购买不起

分布式: 分散压力 解决三高(高性能,高可用,高并发)问题
微服务: 分散能力 解决的是业务耦合问题

PS:本身没有严格的区别和关系,一般来说大型的互联网项目都是基于微服务的分布式架构

分布式的术语

微服务: 系统中存在多个不同的模块相互独立,协调工作
分布式: 每个模块都有多个相同的服务器提供性能和可用性保障

系统中部分节点宕机时,其他节点能够继续顶替它提供服务,则可以任务系统是高可用的

多台服务器作为一个整体提供一类服务,这个整体就叫做集群。
如zookeeper的master和slaver部署在多台服务器上,共同组成一个集中式配置服务,我们客户端只需要连接其中一个服务器(客户端不关注是哪一台机器)即可,当这台机器挂了,其他节点能自动顶替他提供服务,这时候说明系统具有高可用性

请求发送到系统时,使用一定的策略达到集群内部服务器的最优使用

正向代理: 系统内部服务器访问外部网络时,统一通过一个代理服务器将请求发送出去,在外部服务器看来就是代理服务器发起的访问,此时代理服务器实现的就是正向代理

会所对外的广告肯定不能是自己去发漂亮性感技师的传单,可以找各种黄牛进行宣传找客户,这样对于客户来说,只认识黄牛,而不知道会所的情况,也保证了会所的安全性(万一碰上了仙人跳呢)-----这就是正向代理
反向代理: 外部请求进入系统时,代理服务器将该请求转发到系统的某台服务器上,对外部服务器来说,与之交互只有代理服务器,此时服务器实现的就是正向代理
当客户需要会所技师提供服务时,直接找各种黄牛带路去会所找到可以为自己提供DBJ服务的会所技师,这样对于会所来说,服务提供了,钱赚了,同时也避免了直接面对客户(万一碰上了便衣呢)-----这就是反向代理

概念区别

集群: 相同的人干同样的事(A1 A2)
分布式: 不同的人干同一件(配合)事(A1 A2+B1 B2 + C1 C2)

区别SOA微服务
组件大小大块业务逻辑单独或者小块逻辑
耦合性通常是松耦合总是松耦合
开发组织任何类型小型、专注功能交叉团队,为了快速迭代
管理中央管理(整体)分散管理(分散管理)
便利性对人员要求高对人员的要求低一些(团队拓展也快)

分布式架构的演进之路

最开始的应用架构, 一台服务器开着web服务器、数据库,web服务器和数据库共享一个cpu,承受并发能力有限
在这里插入图片描述
单体架构的演变: web服务器和数据库各自单独部署服务器,应用服务器和数据库完隔离开来,相互不影响,增加的系统的可用性
在这里插入图片描述

用户的请求过来,有谁来转发到应用服务器(谁来负责负载均衡)
用户如果每次访问到的服务器不一样,那么如何维护session,达到session共享的目的。

此时,系统架构又有了如下演变
在这里插入图片描述
此时多个服务器都访问同一个数据库,数据库压力大,这个时候就需要对数据进行水平扩展(读写分离)
在这里插入图片描述
由于关系型数据库的上限太小,随着业务增加,访问量继续增加,数据库就成为了瓶颈,这时就引入了搜索引擎和缓存来提升系统性能:
在这里插入图片描述
这时我们系统承受并发能力搞了,但是系统的可扩展性不高,还是一个一个的单一系统,当整个系统庞大起来,难于维护,此时就需要服务化了

分布式架构带来的问题

我们基于网络构建分布式系统,将多个系统连接起来,就要面临我们使用单体架构时不会遇到的问题。

这带来的是系统整体的性能降低,还会带来一些其他问题,如果系统的资源锁定,所以系统调用一般需要设定一个超时时间,但是过度的延迟会有可能会引发系统间的RPC调用超时。这就是分布式系统调用的三态结果:成功、失败、超时,一般能采用的方案就是异步化、重拾等

(1)调用超时:系统A掉系统B,系统得到反馈超时,到不确定系统B是否已经处理结束,就造成结果不一致
(2)掉单:系统A和系统B分别为对方的上下游,如果系统A中存在一个订单,而系统B中不存在,就会导致掉单。
(3)存与数据库的不一致:面对海量的访问请求,我们经常会需要在数据库前加一层缓存,这个缓存与数据库之间如何保证一致性。

对于数据一致性问题,解决模型有三种:
Strong Consistency(强一致性):新的数据一旦写入,在任意副本任意时刻都能读到新值。比如:文件系统、RDBMS、Azure Table都是强一致性的
Week Consistency(弱一致性):不同副本的值有新有旧,需要应用做更多的操作才能获取到新值
Evantual Consistency(最终一致性):一旦更新成功,各副本的数据在最终将达到一致

弱一致性和最终一致性一般来说是异步冗余的,而强一致性一般来说是同步冗余的。异步通常意味这更好的性能,但也意味着更复杂的状态控制,同步意味着简单,但也意味着性能下降

分布式系统中必然存在着分区,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。那么根据CAP定理,C与A我们只能择其一实现。那么为什么实现P的情况下,C与A不可兼得呢,我们来分析一下:

假设节点A与节点B,它们中的数据是一致的,然后我们发起请求,修改了节点A中的数据,节点B中的数据也要相应的更改,但是出现了网络延迟等问题,节点B中的数据没有更改,依然是旧数据。这时,请求节点B中的数据,但是数据还没有同步,那怎么办呢?如果我们要满足一致性,就应阻塞这次请求,等节点B中的数据得到更改,这样可用性就无法满足;而如果我们要满足可用性,那么我们就要返回节点B中的旧的数据,这样一致性就无法满足。所以我们就需要结合实际情况,做出取舍,是满足一致性还是满足可用性。

标签:架构,演变,系统,一致性,服务器,节点,分布式
来源: https://blog.csdn.net/ccccc202/article/details/113913376