集中架构:
缺点:
代码耦合度高,维护困难;无法针对不同的模块进行针对性优化;
无法水平扩展;单点容错率低,并发能力差
垂直架构:
优点:
系统拆分实现了流量分担,解决了并发问题;
可以针对不同的模块进行针对性优化;
方便水平扩展,负载均衡,容错率提高
缺点:系统间相互独立,会有重复开发工作,影响开发效率
分布式架构:
优点:将基础服务进行抽取,系统间相互调用,提高代码复用性和开发效率
缺点:系统间耦合度变高,调用关系错综复杂,难以维护
将不同的业务模块部署到不同服务器上,每个模块都是独立运行、单独部署的。(各司其职)
SOA架构:面向服务
是一种架构模式湖泊这一种架构风格,提倡将单一应用程序划分成一组小的服务独立部署,服务间相互配合相互协调.
相对于分布式,粒度更细。每个服务都可以单独部署、独立运行。一般采用基于HTTP的Rest的风格服务。
优点:
降低耦合度;
开发效率提高,一个服务只做一件事;
可以使用不同语言开发;
易于和第三方集成,允许容易且灵活的自动继承部署;
容易维护。
缺点:
要处理分布式系统的复杂性;
多服务运维难度,随着服务增加,运维压力增大;
依赖系统部署;
数据的一致性;
系统集成测试;
服务间通信的成本
在相同的URI(http://ip:端口号)下,采用不同的请求方式完成不同操作,不同的表述方式称为RestFul风格
请求方式----->对应操作
GET 查询
POST 插入
PUT 修改
DELETE 删除
Dubbo+Zookeeper:RPC协议
基于TCP协议,传输速度快,属于抽象传值,隐藏路径,限制了开发的语言环境
SpringBoot+SpringCloud:HTTP协议
封装的请求头臃肿,可以采用gzip方式改善
灵活,跨平台、跨语言
路径是显性的
四个词:服务注册、服务发现、服务调用、服务监控
五个角色:注册中心、服务提供者、服务调用者、容器、监控中心
将相同的业务部署到不同的服务器上,用来完成容错性、高可用以及负载均衡的目的。
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;
引入依赖
主启动类上添加注解@EnableCircuitBreaker--开启Hystrix
接口实现类中,添加触发熔断的回调方法fallback,添加注解@HystrixCommand(fallbackMethod ="fallback" )
修改配置文件:
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
让提供者休眠
修改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)
Docker daemon(Docker守护进程)
Client(Docker客户端)
Images(Docker镜像)
Container(容器)
Registry(仓库)
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 --查看版本