栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud1

0.微服务

微服务架构样式就是把一个单体项目拆分为多个微小的服务,每个微服务可以在自己的进程中运行并与HTTP资源API进行通信。围业务功能进行构建,独立技术选型,独立开发,独立部署,独立运维,并且多个服务相互协调,相互配合,最终完成用户的价值;

微服务与单体项目的区别:

1.单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。

2.单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。

3.单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

注:

微服务架构只是一个样式,一种风格;
可以将一个项目,拆分成多个模块去开发;
每一个模块都是单独运行在自己的容器中的;
每个模块需要相互通讯(HTTP、MQ);
每一个模块之间没有依赖关系,都是单独部署;
可以使用多种语言去开发不同模块;
将复杂的单体应用进行细粒度的划分,每个拆分出来的服务各自打包并且部署;

1. SpringCloud简介

SpringCloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务;

本文包含七个技术点:

Eureka:服务的注册发现
Robbin:服务之间的负载均衡
Feign:服务之间的通讯
Hystrix:服务 线程隔离以及断路器
Config:动态配置

2. Eureka_服务的注册发现

Eureka是服务的注册与发现,便于服务之间的相互调用,用于任何需要注册的场景;基于REST的服务,由两个组件组成:Eureka服务器和Eureka客户端;

首先搞清楚EurekaServer担任注册中心职责:

  1. 管理服务的注册
  2. 搜索服务
  3. 向调用者提供服务清单
  4. 监听服务状态,动态更新服务列表

注册执行的步骤:

启动Eurekaserver
启动Provider-server(生产者启动)
向注册中心注册服务
EurekaServer登记注册的服务,维护一个服务列表
启动Consumer-server(消费者启动 ),同时向注册中心注册滋生服务
EurekaServer登记注册的服务,维护一个服务列表
Consumer-server搜索服务
如果有,向Consumer-server返回一个服务清单
从服务清单中选择一个服务,获取服务的地址
Consumer-server调用具体的服务(Producer-server)
Producer-server返回响应服务结果
EurekaServer通过心跳来检验Producer-server或者Consumer-server是否挂掉,默认情况下每30秒向注册中心的服务发送一次心跳,有响应表示存活;没有响应,隔60秒再次发送,还是没有响应;隔90秒再次发送一次请求;三次都没有响应就标记为不可达,需要使用时应该再次注册服务;
有两个EurekaService时应该互相注册,在第一个注册中心注册,注册不到在向下一个EurekaService中注册,直到注册成功(共同维护一份清单,只能在一份中看到清单);

Eureka心跳

EurekaClient启动是将自己的信息注册到EurekaServer上,EurekaServer就会存储上EurekaClient的注册信息;当EurekaClient调用服务时,本地没有缓冲信息时就回去EurekaServer中获取注册信息;EurekaClient会通过心跳的方式和EurekaServer进行连接;

Eureka的自我保护机制:

  • 15分钟内如果一个服务的心跳发送低于85%,EurekaServer就会开启保护机制;
  • 不会从EurekaServer中移除长时间没有收到心跳的服务;
  • 网络稳定时,EurekaServer才会开始将自己的信息被其他节点同步过去;
3. Robbin服务间的负载均衡

但是实际环境中,我们往往会开启很多个user-service的集群。此时我们获取的服务列表中就会有多个,这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择;就有了负载均衡组件:Ribbon;

Robbin帮助我们实现服务间的负载均衡,属于客户端的负载均衡,一般配合Eureka进行使用;

客户端负载均衡:将Search模块全部拉取到本地缓冲,在customer中自己做一个负载均衡策略,选中某一服务;
服务端负载均衡:在注册中心中根据指定对的负载均衡策略,选中一个指定的服务信息返回;

Robbin配置负载均衡策略

负载均衡策略:

  • RandomRule:随机策略;
  • RoundRobbinRule:轮询策略;
  • WeightedResponseTimeRule:默认采用轮询策略,后续会根据服务的响应时间自动分配权重;
  • BestAvailableRule:根据被调用方并发数量最小的去分配;
4. Feign服务间的调用

Feign可以帮助我们实现面向接口编程,它使得写Http客户端变得更简单;使用Feign只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解。Feign默认集成了Ribbon和Eureka结合实现了负载均衡的效果;

  • Feign 采用的是基于接口的注解
  • Feign 整合了ribbon

Feign的传递参数方式

传递的参数复杂时,默认采用POST的请求方式
传递单个参数时,使用@PathVariable,如传递参数较多时可以采用@RequestParam,不省略value属性;
传递对象信息时,统一采用json的方式,添加@RequestBody

传递单个参数时,使用@PathVariable,如传递参数较多时可以采用@RequestParam,不省略value属性;
传递对象信息时,统一采用json的方式,添加@RequestBody
Client接口必须采用@RequestMapping

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号