目录
2.6 Spring Cloud 与 Spring Boot 的关系
1.微服务架构
1.1单体应用架构
项目规模小,所有功能都放在一个工程中编译、打包且部署在一个Tomcat容器中的架构模式就是单体架构,单体架构简单、利于维护、成本还低。
优点:
- 高效开发
- 架构简单
- 容易测试
- 容易部署
缺点:
- 可靠性差
- 复杂性高:模块多的话
- 扩展能力不足
1.2垂直结构
优点
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进⾏优化
- ⽅便⽔平扩展,负载均衡,容错率提⾼
- 系统间相互独⽴,互不影响,新的业务迭代时更加⾼效
缺点
- 服务之间相互调⽤,如果某个服务的端⼝或者ip地址发⽣改变,调⽤的系统得⼿动改变
- 搭建集群之后,实现负载均衡⽐较复杂,如:内⽹负载,在迁移机器时会影响调⽤⽅的路 由,导致线上故障
- 服务之间调⽤⽅式不统⼀,基于 httpclient 、 webservice ,接⼝协议不统⼀
- 服务监控不到位:除了依靠端⼝、进程的监控,调⽤的成功率、失败率、总耗时等等这些监 控指标是没有的
1.3 SOA应用架构
SOA (Service-Oriented Architecture),即面向服务的架构。根据实际业务,把系统拆分成合适
的、独立部署的模块,模块之间相互独立(通过Webservice/Dubbo等技术进行通信)。
优点:分布式、松耦合、扩展灵活、可重用。
缺点:服务抽取粒度较大、服务调用方和提供方耦合度较高(接口耦合度)
1.4 微服务应用架构
拆分粒度更小、微小、独立、轻量级通信、业务需要彻底的组件化和服务化
微服务架构和SOA架构很明显的一个区别就是服务拆分粒度的不同
微服务的缺点:
- 微服务架构下,分布式复杂难以管理,当服务数量增加,管理将越加复杂;
- 微服务架构下,分布式链路跟踪难等;
1.5 微服务中架构中的核心概念
1、服务注册和发现
2、负载均衡:负载均衡即将请求压力分配到多个服务器(应用服务器、数据库服务器等),以此来提高服务的性能、可靠性
3、熔断:一种保护机制,下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断
3、链路追踪:所谓链路追踪,就是对一次请求涉及的很多个服务链路进行日志记录、性能监控
4、API网关:API网关就可以较好的统一处理上述问题,API请求调用统一接入API网关层,由网关转发请求。
功能:
1)统一接入(路由)
2)安全防护(统一鉴权,负责网关访问身份认证验证,与“访问认证中心”通信,实际认证业务逻辑、交移“访问认证中心”处理)
3)黑白名单(实现通过IP地址控制禁止访问网关功能,控制访问)
3)协议适配(实现通信协议校验、适配转换的功能)
4)流量管控(限流)
5)长短链接支持
6)容错能力(负载均衡)
2.SpringCloud综述
2.1SpringCloud是什么?
Spring Cloud是一系列框架的有序集合(Spring Cloud是一个规范)
开发服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等
利用Spring Boot的开发便利性简化了微服务架构的开发(自动装配)
2.2SpringCloud解决什么问题?
解决的问题其实就是微服务架构实施过程中存在的一些问题,比如
微服务架构中的服务注册发现问题、网络问题(比如熔断场景)、统一认证安全授权问题、负载均衡问题、链路追踪等问题
2.3SpringCloud的核心组件
2.4 SpringCloud体系结构
Spring Cloud中的各组件协同工作,才能够支持一个完整的微服务架构。比如
- 注册中心负责服务的注册与发现,很好将各服务连接起来
- API网关负责转发所有外来的请求
- 断路器负责监控服务之间的调用情况,连续多次失败进行熔断保护。
- 配置中心提供了统一的配置信息管理服务,可以实时的通知各个服务获取最新的配置信息
2.5 Spring Cloud 与 Dubbo 对比
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,基于RPC调用,对于目前使用率较高的Spring Cloud Netflix来说,它是基于HTTP的,所以效率上没有Dubbo高,但问题在于Dubbo体系的组件不全,不能够提供一站式解决方案,比如服务注册与发现需要借助于Zookeeper等实现,而SpringCloud Netflix则是真正的提供了一站式服务化解决方案,且有Spring大家族背景。
2.6 Spring Cloud 与 Spring Boot 的关系
Spring Cloud 只是利用了Spring Boot 的特点,让我们能够快速的实现微服务组件开发,否则不使
用Spring Boot的话,我们在使用Spring Cloud时,每一个组件的相关Jar包都需要我们自己导入配置以及需要开发人员考虑兼容性等各种情况。所以Spring Boot是我们快速把Spring Cloud微服务技术应用起来的一种方式。