分布式系统架构
分布式理论
什么是分布式系统
在《分布式系统原理与范型》⼀书中有如下定义:“分布式系统是若⼲独⽴计算机的集合,这些计算机对于⽤户来说就像单个相关系统”;
分布式系统(distributed system)是建⽴在⽹络之上的软件系统。
⾸先需要明确的是,只有当单个节点的处理能⼒⽆法满⾜⽇益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使⽤更好的CPU)⾼昂到得不偿失的时候,应⽤程序也不能进⼀步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本⾝就是和单机系统⼀样的,⽽由于分布式系统多节点、通过⽹络通信的拓扑结构,会引⼊很多单机系统没有的问题,为了解决这些问题⼜会引⼊更多的机制、协议,带来更多的问题。
整个分布式理论是⼤数据学习的基础。分布式系统和分布式系统计算值得我们去深⼊的学习。
架构演变
随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的垂直应⽤架构已⽆法应对,分布式服务架构以及流动计算架构势在必⾏,急需⼀个治理系统确保架构有条不紊的演进。
在Dubbo的官⽹⽂档有这样⼀张图
单体应⽤架构
其中的第⼀张图 all in one对应的是我们的最开始使⽤的单体架构。当⽹站流量很⼩时,只需⼀个应⽤,将所有功能都部署在⼀起,以减少部署节点和成本。此时,⽤于简化增删改查⼯作量的数据访问框架(ORM)是关键。ORM常⽤的框架例如Mybatis等
适⽤于⼩型⽹站,⼩型管理系统,将所有功能都部署到⼀个功能⾥,简单易⽤。
缺点:
1、性能扩展⽐较难
2、协同开发问题
3、不利于升级维护
垂直应⽤架构
当访问量逐渐增⼤,单⼀应⽤增加机器带来的加速度越来越⼩,将应⽤拆成互不相⼲的⼏个应⽤,以提升效率。此时,⽤于加速前端页⾯开发的Web框架(MVC)是关键。
通过切分业务来实现各个模块独⽴部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更⽅便,更有针对性。
缺点:公⽤模块⽆法重复利⽤,开发性的浪费
分布式和SOA架构
当垂直应⽤越来越多,应⽤之间交互不可避免,将核⼼业务抽取出来,作为独⽴的服务,逐渐形成稳定的服务中⼼,使前端应⽤能更快速的响应多变的市场需求。此时,⽤于提⾼业务复⽤及整合的**分布式服务框架(RPC)**是关键。
当服务越来越多,容量的评估,⼩服务资源的浪费等问题逐渐显现,此时需增加⼀个调度中⼼基于访问压⼒实时管理集容量,提⾼集利⽤率。此时,⽤于提⾼机器利⽤率的资源调度和治理中⼼(SOA)[ Service Oriented Architecture]是关键。
远程调⽤技术
Http协议是通过⽹络的⽆状态协议
在学习远程过程调⽤之前需要先去了解,本地过程调⽤,主要的区别便在于,是否本地之间的调⽤。
也就是说两台服务器A,B,⼀个应⽤部署在A服务器上,想要调⽤B服务器上应⽤提供的函数/⽅法,由于不在⼀个内存空间,不能直接调⽤,需要通过⽹络来表达调⽤的语义和传达调⽤的数据。为什么要⽤RPC呢?就是⽆法在⼀个进程内,甚⾄⼀个计算机内通过本地调⽤的⽅式完成的需求,⽐如不同的系统间的通讯,甚⾄不同的组织间的通讯,由于计算能⼒需要横向扩展,需要在多台机器组成的集上部署应⽤。RPC就是要像调⽤本地的函数⼀样去调远程函数。
RPC协议(远程过程调⽤)
概念:RPC协议
英⽂原义:Remote Procedure Call Protocol
中⽂释义:(RFC-1831)远程调⽤协议 ,最初由RFC-1050定义。
RPC协议假定某些的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI模型中,RPC跨越了和。RPC使得开发包括⽹络分布式多程序在内的应⽤程序更加容易。
调⽤的过程
调⽤的过程主要是实现进程和线程之间的通信问题。(Netty)
Rpc于Resful风格的区别
⽐较项Restful RPC
通信协议HTTP⼀般使⽤TCP
性能略低较⾼
灵活度⾼低
应⽤微服务架构SOA架构
RPC两个核⼼模块:通讯,序列化(反序列化)。
分布式中的CAP原理
先简单介绍⼀下CAP原理是什么:
C:Consistency
即⼀致性,访问所有的节点得到的数据应该是⼀样的。注意,这⾥的⼀致性指的是强⼀致性,也就是数据更新完,访问任何节点看到的数据完全⼀致,要和弱⼀致性,最终⼀致性区分开来。
A:Availability
即可⽤性,所有的节点都保持⾼可⽤性。注意,这⾥的⾼可⽤还包括不能出现延迟,⽐如如果节点B由于等待数据同步⽽阻塞请求,那么节点B就不满⾜⾼可⽤性。
也就是说,任何没有发⽣故障的服务必须在有限的时间内返回合理的结果集。
P:Partiton tolerance
即分区容忍性,这⾥的分区是指⽹络意义上的分区。由于⽹络是不可靠的,所有节点之间很可能出现⽆法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务。
以实际效果⽽⾔,分区相当于对通信的时限要求。系统如果不能在时限内达成数据⼀致性,就意味着发⽣了分区的情况,必须就当前操作在C和A之间做出选择
CAP原理说,⼀个数据分布式系统不可能同时满⾜C和A和P这3个条件。所以系统架构师在设计系统时,不要将精⼒浪费在如何设计能满⾜三者的完美分布式系统,⽽是应该进⾏取舍。由于⽹络的不可靠性质,⼤多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C 和A中做抉择。
RPC框架Dubbo
Dubbo是⼀个专注于通信的RPC框架
Apache Dubbo 是⼀款⾼性能、轻量级的开源Java RPC框架,它提供了三⼤核⼼能⼒:⾯向接⼝分布式和微服务的关系
的远程⽅法调⽤,智能容错和负载均衡,以及服务⾃动注册和发现。
服务提供者(Provider):暴露服务的服务提供⽅,服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务。
服务消费者(Consumer):调⽤远程服务的服务消费⽅,服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选⼀台提供者进⾏调⽤,如果调⽤失败,再选另⼀台调⽤。
注册中⼼(Registry):注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于长连接推送变更数据给消费者
监控中⼼(Monitor):服务消费者和提供者,在内存中累计调⽤次数和调⽤时间,定时每分钟发送⼀次统计数据到监控中⼼
调⽤关系说明
l 服务容器负责启动,加载,运⾏服务提供者。
l 服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务。
l 服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务。
l 注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于长连接推送变更数据给消费者。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论