早些年常见的会合式系统和分布式系统:
会合式系统也叫单体应用,就是把所有应用的步伐、功能、模块都会合在在一个项目当中,摆设在一台服务器上对外使用
分布式系统就是把所有的步伐、功能拆分成差别的子系统,摆设在多台差别的服务器上,这些子系统相互协作对外提供服务,对用户而言他们不知道配景是多个子系统和多台服务器在服务,使用上和会合系统一样。
会合系统和分布式系统是相反的两个概念,他们的区别体现在“合”与“分”。
微服务优缺点:
微服务架构是将系统当中的差别模块拆分成多个差别的服务,这些服务举行独立的开辟摆设,每个服务都运行在自己的历程内,这样每个服务的更新都不会影响到其他服务的运行。
每个服务器都是单独运行摆设的,我们可以更准确的监控每个服务的资源消耗情况,举行容量评估通过压力测试,也很容易发个各个服务器之间的瓶颈所在。
由于每个服务器都是独立开辟,项目的开辟相对于比力轻便淘汰代码辩论,代码的冗余,逻辑处理处罚更加清晰,让后续的维护更加容易,
微服务可以使用差别的编程语言举行开辟(各个独立的服务器之间使用的是基于http的JSON作为通讯协作的底子)
缺点:
微服务架构增加了系统的维护、摆设的难度,导致一些功能模块大概代码无法复用
随着系统使用率的日益增长,微服务在一定水平上也会导致系统变的越来越负责,增加了集成测试的难度
随着服务的增多,数据的一致性问题,服务之间的通讯资本都显着突出。
Spring Cloud 的整体架构
- Service Provider: 袒露服务的服务提供方。Service Consumer:调用远程服务的服务消费方。EureKa Server: 服务注册中心和服务发现中心。
复制代码 Spring Cloud项目的开始创建:
首先查察Spring Cloud官网如下形貌:
将spring cloud加在已有的sping项目当中,如果你有存在的spring项目你想添加spring cloud在这个项目,首先应该确认使用的spring cloud版本,你在项目当中使用的版本取决去spring boot的版本。
下表概述了spring cloud版本对应spring boot的版本。
创建Spring Cloud基于Spring Boot的项目:
两种方式创建项目:
一、直接创建Spring Boot项目导入pom坐标
二、创建平凡的java项目导入所需要的pom坐标
我们此次用的是第二种方式:
创建平凡项目选择JAVA版本
输入GroupId和Artifactid不继承父工程
创建完成之后所需要导入的POM坐标:
- org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-dependencies Finchley.RELEASE pom import spring-milestones Spring Milestones https://repo.spring.io/libs-milestone/ false
复制代码 提供者(provider)项目入口类和properties设置文件
入口类:
- package com.nj.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class ApplicationProvider { public static void main(String[] args) { SpringApplication.run(ApplicationProvider.class, args); }}
复制代码 设置文件application.properties
- #spring boot内嵌tomcat改动端口server.port=9100#设置服务名称和注册中心所在spring.application.name=01springcloudprovidereureka.client.service-url.defaultZone=http://locathost:8761/eureka#测试关闭自我掩护机制,包管不可用服务被踢出eureka.server.enable-self-preservation=false#每隔断5秒向服务端发送一次心跳,证明自己仍然存活eureka.instance.lease-renewal-interval-in-seconds=5#告诉服务端如果10S之内没有发送心跳就代表故障了,将我踢出eureka.instance.lease-expiration-duration-in-seconds=10
复制代码 消费者(customer)项目入口类和properties设置文件
入口类:
- package com.nj.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class ApplicationCustomer { public static void main(String[] args) { SpringApplication.run(ApplicationCustomer.class, args); }}
复制代码 设置文件application.properties
- server.port=8082#设置服务名称和注册中心spring.application.name=02springcloudservicecustomeureka.client.service-url.defaultZone=http://erueka8761:8761/eureka,http://erueka8762:8762/eureka#测试关闭自我掩护机制,包管不可用服务被踢出eureka.server.enable-self-preservation=false#每隔断5秒向服务端发送一次心跳,证明自己仍然存活eureka.instance.lease-renewal-interval-in-seconds=5#告诉服务端如果10S之内没有发送心跳就代表故障了,将我踢出eureka.instance.lease-expiration-duration-in-seconds=10
复制代码 ribbo负载平衡设置:
- package com.nj.springcloud.configer;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.RandomRule;import com.netflix.loadbalancer.RetryRule;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;/** * @author * @Description: * @date 2020/12/21 21:40 */@Configuration //加@Configuration注解就相当于spring当中的spring-applicationContext.xml文件public class SpringConfig { /** * Ribbon负载平衡,默认是轮询 * * 在Spring Cloud当中,Ribbon主要与RestTemplate对象共同来使用, * Ribbon会自动化设置RestTemplate对象, * 通过@LoadBalabced注解开启RestTempalte对象调用时的负载平衡 * @return Ribbon默认负载平衡模式为轮询RoundRobinRule */ @LoadBalanced //开启RestTempalte对象调用时的负载平衡,开启客户端负载平衡 @Bean //@bean就相当于设置 public RestTemplate restTemplate(){ return new RestTemplate(); }// @Bean public IRule iRule(){ //随机负载平衡模式// return new RandomRule(); //RetyRule先按照轮询计谋分发,如果分发的服务不能访问,则在指定时间举行重试分发其他可用服务 return new RetryRule(); }}
复制代码 注册中心(server)项目入口类和properties设置文件
入口类:
- package com.nj.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class ApplicationEurekaServer { public static void main(String[] args) { SpringApplication.run(ApplicationEurekaServer.class, args); }}
复制代码 设置文件application.properties
- #内置tomcat端口server.port=8083#设置注册中心hostnameeureka.instance.hostname=localhost#由于现在创建的应用是一个服务注册中心,而不是平凡的应用。默认情况下这个应用会向注册中心(及是自己)注册它自己#设置为false体现克制这种自己向自己注册的行为eureka.client.register-with-eureka=false#体现不去检索其他的服务,因为注册中心自己的职责就是维护服务实例,它不需要去检索其他的服务eureka.client.fetch-registry=false#指定注册中心位置eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
复制代码 以上就是一个Spring Cloud简单相识入门小测试完结!!!
Eureka与Zookpeer的比力
著名的CAP理论指出一个分布式系统不大概同时满意C(一致性)A(可用性)和P(分区容错性)。
由于分区容错性是分布式系统当中必须要包管的,因为我们只能在A和C之间举行选择,Zookeeper包管的是CP,Eureka包管的是AP。
Zookeeper包管的是CP:
在Zookeeper当中,当master节点因为网络故障和其他节点失去接洽时,剩余的节点会重新举行Leader选择,问题在于选择Leader需要一定的时间,而且选举期间整个Zookeeper集群是不可用的,这就导致服务器在选举注册期间瘫痪。在云服务器上因网络问题使得Zookeeper集群失去master节点是大概率时间,虽然服务最终可以规复,但是最终在选举期间会导致服务不可用是难以忍受的。
Eureka包管的是AP:
Eureka优先包管可用性,Eureka每个几点是同等的,挂掉几个节点不会影响正常的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或发现毗连失败,则会自动切换到其他节点,只要有一台Eureka服务端还在就能包管注册服务的可用(包管可用性),只不外查到的信息大概不是最新的(不包管强一致性)
eureka自我掩护机制:
来源:https://blog.csdn.net/nan1996jiang/article/details/111469762
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |