P10:Spring Cloud 框架
单体应用存在的问题
随着业务发展,开发越来越复杂。
修改、新增某个功能,需要对整个系统进行测试、重新部署。
一个模块出现问题,可能导致整个系统崩溃。
多个开发团队同时对数据进行管理,容易产生安全漏洞。
各个模块使用同一种技术开发,各个模块很难根据实际情况选择更合适的技术框架,局限性很大。
分布式和集群的区别
集群:一台服务器无法负荷高并发的数据访问量,就设置多台服务器一起分担压力,是在物理层面解决问题。
分布式:将一个复杂的问题拆分成若干简单的小问题,将一个大型的项目架构拆分成若干个微服务来协同完成,在软件设计层面解决问题。
微服务的优点
各个服务的开发、测试、部署都相互独立,用户服务可以拆分为独立服务,如果用户量很大,可以很容易对其实现负载。
当新需求出现时,使用微服务不再需要考虑各方面的问题,例如兼容性、影响度等。
使用微服务拆分项目后,各个服务之间消除了很多限制,只需要保证对外提供的接口正常可用,而不限制语言和框架等选择。
服务治理 Eureka
服务治理的核心由三部分组成:服务提供者、服务消费者、注册中心。
服务注册:在分布式系统架构中,每个微服务在启动时,将自己的信息存储在注册中心。
服务发现:服务消费者从注册中心获取服务提供者的网络信息,通过该信息调用服务。
Spring Cloud 的服务治理使用 Eureka 实现,Eureka 是 Netflix 开源的基于 REST 的服务治理解决方案,Spring Cloud 集成了 Eureka,提供服务注册和服务发现的功能,可以和基于 Spring Boot 搭建的微服务应用轻松完成整合,将 Eureka 二次封装为 Spring Cloud Eureka。Eureka Server 是注册中心,所有要进行注册的微服务通过 Eureka Client 连接到 Eureka Server 完成注册。
服务网关 Zuul
Spring Cloud 集成了 Zuul 组件,实现服务网关。Zuul 是 Netflix 提供的一个开源的 API 网关服务器,是客户端和网站后端所有请求的中间层,对外开放一个 API,将所有请求导入统一的入口,屏蔽了服务端的具体实现逻辑,可以实现方向代理功能,在网关内部实现动态路由、身份认证、IP过滤、数据监控等。
负载均衡 Ribbon
Spring Cloud Ribbon 是一个负载均衡的解决方案,Ribbon 是 Netflix 发布的均衡负载器,Spring Cloud Ribbon是基于 Netflix Ribbon 实现的,是一个用于对 HTTP 请求进行控制的负载均衡客户端。
在注册中心对 Ribbon 进行注册之后,Ribbon 就可以基于某种负载均衡算***循、随机、加权轮询、加权随机等)自动帮助服务消费者调用接口,开发者也可以根据具体需求自定义 Ribbon 负载均衡算法。实际开发中 Spring Clooud Ribbon 需要结合 Spring Cloud Eureka 使用,Eureka 提供所有可以调用的服务提供者列表,Ribbon 基于特定的负载均衡算法从这些服务提供者中选择要调用的具体实例。
声明式接口调用 Feign
Feign 与 Ribbon 一样也是 Netflix 提供的,Feign 是一个声明式、模板化的 Web Service 客户端,简化了开发者编写 Web 服务客户端的操作,开发者可以通过简单的接口和注解来调用 HTTP API,Spring Cloud Feign 整合了 Ribbon 和 Hystrix,具有可插拔、基于注解、负载均衡、服务熔断等一系列功能。
相比于 Ribbon + RestTemplate 的方式,Feign 可以大大简化代码开发,支持多种注解,包括 Feign 注解、JAX-RS 注解、Spring MVC 注解等。RestTemplate 是 Spring 框架提供的基于 REST 的服务组件,底层是对 HTTP 请求及响应进行了封装,提供了很多访问 REST 服务的方法,可以简化代码开发。
服务熔断 Hystrix
熔断器的作用是在不改变各个微服务调用关系的前提下,针对错误情况进行预先处理。
设计原则:服务隔离机制、服务降级机制、熔断机制、提供实时监控和报警功能和提供实时配置修改功能
Hystrix 数据监控需要结合 Spring Boot Actuator
使用,Actuator 提供了对服务的数据监控、数据统计,可以通过 hystirx-stream
节点获取监控的请求数据,同时提供了可视化监控界面。
服务配置 Config
Spring Cloud Config 通过服务端可以为多个客户端提供配置服务,既可以将配置文件存储在本地,也可以将配置文件存储在远程的 Git 仓库,创建 Config Server,通过它管理所有的配置文件。
服务跟踪 Zipkin
Spring Cloud Zipkin 是一个可以采集并跟踪分布式系统中请求数据的组件,让开发者更直观地监控到请求在各个微服务耗费的时间,Zipkin 包括两部分 Zipkin Server 和 Zipkin Client。