微服务SpringCloud-01

微服务

架构演变:

集中架构:
	缺点:
		代码耦合度高,维护困难;无法针对不同的模块进行针对性优化;
		无法水平扩展;单点容错率低,并发能力差
		
垂直架构:
	优点:
		系统拆分实现了流量分担,解决了并发问题;
		可以针对不同的模块进行针对性优化;
		方便水平扩展,负载均衡,容错率提高
	缺点:系统间相互独立,会有重复开发工作,影响开发效率
	
分布式架构:
	优点:将基础服务进行抽取,系统间相互调用,提高代码复用性和开发效率
	缺点:系统间耦合度变高,调用关系错综复杂,难以维护

分布式:

将不同的业务模块部署到不同服务器上,每个模块都是独立运行、单独部署的。(各司其职)

SOA架构:面向服务

微服务:

是一种架构模式湖泊这一种架构风格,提倡将单一应用程序划分成一组小的服务独立部署,服务间相互配合相互协调.
相对于分布式,粒度更细。每个服务都可以单独部署、独立运行。一般采用基于HTTP的Rest的风格服务。

优点:
	降低耦合度;
	开发效率提高,一个服务只做一件事;
	可以使用不同语言开发;
	易于和第三方集成,允许容易且灵活的自动继承部署;
	容易维护。
缺点:
	要处理分布式系统的复杂性;
	多服务运维难度,随着服务增加,运维压力增大;
	依赖系统部署;
	数据的一致性;
	系统集成测试;
	服务间通信的成本

Rest风格服务:

在相同的URI(http://ip:端口号)下,采用不同的请求方式完成不同操作,不同的表述方式称为RestFul风格
	请求方式----->对应操作
	GET			查询
	POST		插入
	PUT			修改
	DELETE		删除

分布式架构:

Dubbo+Zookeeper:RPC协议
	基于TCP协议,传输速度快,属于抽象传值,隐藏路径,限制了开发的语言环境
	
SpringBoot+SpringCloud:HTTP协议
	封装的请求头臃肿,可以采用gzip方式改善
	灵活,跨平台、跨语言
	路径是显性的

服务治理(SOA):

四个词:服务注册、服务发现、服务调用、服务监控
五个角色:注册中心、服务提供者、服务调用者、容器、监控中心

集群:

将相同的业务部署到不同的服务器上,用来完成容错性、高可用以及负载均衡的目的。

Spring Cloud远程服务调用

1.DiscoveryClient  调用getInstances方法,较为复杂
2.LoadBalancerClient  调用choose方法,由他自己选择调用的服务
3.Ribbon	
	声明RestTemplate对象,添加注解@LoadBalanced 开启Ribbon 
	无需调用方法  直接写"http://提供者名称"
    
4.Feign:封装了Ribbon和Eureka
	在主启动类上添加注解开启Feign @EnableFeignClients
	编写接口,添加注解
		@FeignClient(value="提供者名称",configuration=配置类.class)
	开启日志:编写配置类,定义日志级别 return Logger.Level.FULL;

熔断组件Netflix Hystrix

1.Ribbon使用Hystrix
	引入依赖
	主启动类上添加注解@EnableCircuitBreaker--开启Hystrix
	接口实现类中,添加触发熔断的回调方法fallback,添加注解@HystrixCommand(fallbackMethod ="fallback" )
2.优化Ribbon使用Hystrix

​ 修改配置文件:

USERPROVIDER: #服务名称
        ribbon:
        #配置指定服务的负载均衡策略
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
        # Ribbon的连接超时时间
        ConnectTimeout: 250
        # Ribbon的数据读取超时时间
        ReadTimeout: 1000
        # 是否对所有操作都进行重试
        OkToRetryOnAllOperations: true
        # 切换实例的重试次数
        MaxAutoRetriesNextServer: 1
        # 对当前实例的重试次数
        MaxAutoRetries: 1

主启动类中:

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    HttpComponentsClientHttpRequestFactory factory = new
    HttpComponentsClientHttpRequestFactory();
    factory.setReadTimeout(250);
    factory.setConnectTimeout(250);
    return new RestTemplate(factory);
}

设定消费者熔断超时时间

#设定Hystrix熔断超时时间
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000

让提供者休眠

3.Feign使用Hystrix

修改application.yml文件

# 开启Feign的熔断功能
feign:
hystrix:
enabled: true
#总连接超时时间=(切换服务实例次数+1)*(每个实例重试次数+1)*连接超时时间
5.2 导入熔断所需依赖包
5.3 编写Feign声明接口UserService的实现类UserServiceImpl(注
意要声明为@Service)
USERPROVIDER: #服务名称
ribbon:
#配置指定服务的负载均衡策略
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
# Ribbon的连接超时时间
ConnectTimeout: 250
# Ribbon的数据读取超时时间
ReadTimeout: 250
# 是否对所有操作都进行重试
OkToRetryOnAllOperations: true
# 切换实例的重试次数
MaxAutoRetriesNextServer: 1
# 对当前实例的重试次数
MaxAutoRetries: 1
#设定Hystrix熔断超时时间 ,理论上熔断时间应该大于总连接超时时间
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000

导入依赖:

声明接口实现类:

@Service
public class UserServiceImpl implements UserService {
    @Override
    public Map<String, Object> findAll() {
    Map<String,Object> map=new HashMap<>();
    map.put("list",new ArrayList<>());
    map.put("version","调用远程服务失败,熔断被触发!");
    return map;
}
}

调用接口UserSevice中使用注解声明@FeignClient

@FeignClient(value="USERPROVIDER",configuration=FeignConfig.class,
             fallback=UserServiceImpl.class)

4.Hystrix监控服务器搭建

Docker

1.五个角色
 Docker daemon(Docker守护进程)
 Client(Docker客户端)
 Images(Docker镜像)
 Container(容器)
 Registry(仓库)
2.安装启动
yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm

验证是否安装成功
     docker	info	--查看信息
     docker	-v		--查看版本

`
Docker daemon(Docker守护进程)
Client(Docker客户端)
Images(Docker镜像)
Container(容器)
Registry(仓库)


##### 2.安装启动

yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm

验证是否安装成功
docker info --查看信息
docker -v --查看版本


你可能感兴趣的:(微服务,java,jsp,web,spring,cloud,微服务)