微服务粗略

什么是分布式和微服务?相似点和不同点?

我们之前写的代码和项目都是单体架构:就是将业务的所有功能集中在一个项目中开发,打成一个包部署。单体项目的结构很简单,而且部署成本低,但是代码都纠缠在一起,所以耦合度很高。

那分布式的特点就是将代码以业务的不同进行拆分成不同的模块,分散部署在不同的机器上的,一个服务可能负责几个功能。但是总的数据可可能还是同一个数据库,当用户使用的时候,会去调用不同的模块执行任务,不同的模块之间通信需要网络。分布式的优点是降低服务耦合,有利于服务升级和拓展,缺点就是服务调用关系错综复杂

微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互,是一种经过良好架构设计的分布式架构。简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。我们可以使用SpringCloud去构建微服务架构。

微服务的优点有:

单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

服务自治:团队独立、技术独立、数据独立,独立部署和交付

面向服务:服务提供统一标准的接口,与语言和技术无关

隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

分布式和微服务的概念比较相似,分布式属于微服务。但是分布式和微服务在架构、作用和粒度上有所区别。因此,两者的关系是既相互联系又相互区别。

nacous和eureka的区别?

首先是共同点:

首先都支持服务注册和服务拉取:就是说使用nacous和eureka都可以将项目的代码放到注册中心,然后当一个模块需要使用另一个模块的功能时,需要进行导入依赖,配置文件,然后添加@LoadBalanced注解进行负载均衡。

再引申一下负载均衡。SpringCloud底层是利用了Ribbon的组件来实现负载均衡功能的。当我们输入的是服务器的名字的并运行的时候,LoadBalancerIntercepor这个拦截器会进行拦截,拦截后再通过LoadBalancerClient的getLoadBalancer方法根据服务id获取ILoadBalancer,而ILoadBalancer会拿着服务id去eureka或者nacos中获取服务列表并保存起来。在接下来还有一个getServer方法,它会利用内置的负载均衡算法,从服务列表中选择一个。那此时我们的请求就走到了服务提供者的某一个服务器上了。负载均衡可以使得请求更平均,不会大量的出现在某一台服务器上,减缓了服务器的压力。负载均衡的策略有很多,默认的是轮询策略。

都支持服务提供者心跳方式做健康检测:健康检测是指一个服务定时的向注册中心报告自己的状态,说明自己还在运行,如果没有发送状态,那注册中心就会认为这个服务除了问题,就会直接将他剔除。

Nacos与Eureka的区别

Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式。临时实例心跳不正常会被剔除,非临时实例则不会被剔除

Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

Nacos支持ap和cp两种方式;Eureka则只支持ap

我们要了解这个区别,首先要先了解什么是cp和ap。

CAP分为了:C:Consistency(一致性),A:Availability(可用性),P:Partition tolerance(分区容错)

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),但是CAP 原则指示3个要素最多只能同时实现两点,不可能三者兼顾,由于网络硬件肯定会出现延迟丢包等问题,但是在分布式系统中,我们必须保证部分网络通信问题不会导致整个服务器集群瘫痪,另外即使分成了多个区,当网络故障消除的时候,我们依然可以保证数据一致性,所以我们必须保证分区容错性;

而对于一致性和可用性,我们需要二选一,假设我们选择一致性,那我们就不能让用户访问无法进行数据同步的机器,因为该机器上的数据和其他正常机器上的不一致,这样我们就丢弃了可用性;假设我们选择可用性,那我们就可以让用户访问无法进行数据同步的服务器,虽然保证了可用性,但是我们无法保证数据一致性。

AP:当两个服务之间的通信因为网络原因或其他原因出现波动后,会分为两个区,此时的数据通信是不同步的,可能一个会新一点,一个会老一点。为了保证系统的可用性,此时当服务被调用的时候也可以调的通,但是数据并不是最新的,也就是失去了C 一致性的属性。Eureka就是一个AP架构的例子,当Eureka客户端心跳消失的时候,那Eureka服务端就会启动自我保护机制,不会剔除该EurekaClient客户端的服务,依然可以提供需求;

CP:当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性。

CP结构选择的是一致性和分区容错性,如果选择一致性C(Consistency),为了保证数据库的一致性,我们必须等待失去联系的服务恢复过来,在这个过程中,那个服务是不允许对外提供的,这时候系统处于不可用状态(失去了A属性)。

你可能感兴趣的:(java)