在分布式环境下,由于项目都被拆分成了若干的微服务,造成用户原本只需要请求一次就可以完成的业务,现在需要请求多个微服务来完成业务功能,如果客户端直接和微服务进行通信,会存在以下问题: • 客户端会多次请求不同微服务,增加客户端的复杂性 • 存在跨域请求,在一定场景下处理相对复杂 • 认证复杂,每一个服务都需要独立认证 • 难以重构,随着项目的迭代,可能需要重新划分微服务,如果客户端直接和微服务通信,那么重构会难以实施 上述问题,都可以借助微服务网关解决。微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关。
包含SpringCloudNetflix、SpringSpringCloludAlibaba、SpringCloud原生组件三大系列 SpringCloudNetflix包括: ● Netflix Eureka ● Netflix Feign ● Netflix Hystrix ● Netflix Ribbon ● Netflix Zuul ● Netflix Archaius SpringCloudAlibaba包括: ● Alibaba Nacos ● Alibaba Dubbo ● Alibaba Sentinel ● Alibaba Cloud ACM ● Alibaba RocketMQ ● Alibaba Cloud SchedulerX ● Alibaba Seata
注册中心主要涉及到三大角色: 1. 服务提供者 2. 服务消费者 3. 注册中心 它们之间的关系大致如下: 1. 各个微服务在启动时,将自己的网络地址等信息注册到注册中心,注册中心存储这些数据。 2. 服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。 3. 各个微服务与注册中心使用一定机制(例如心跳)通信。如果注册中心与某微服务长时间无法通信,就会注销该实例。 4. 微服务网络地址发送变化(例如实例增加或IP变动等)时,会重新注册到注册中心。这样,服务消费者就无需人工修改提供者的网络地址了。
七、Netflix Hystrix 服务熔断 7.1 Hystrix 简介 7.1.1 雪崩效应 在微服务架构中通常会有多个服务级联的调用,在级联调用过程中,某个下游服务如果出现故障或阻塞,很可能造成服务的消费者也处于阻塞状态,造成线程资源占用,如果此时有大量请求访问,线程资源很容易被销毁完毕,导致整个系统的瘫痪;这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
在使用微服务时,服务器之间要想互相调用,需要通过注册中心,但是注册中心最重要的作用是注册和管理服务器,虽然提供了方法实现服务器互相调用,也自动实现了负载均衡,但是实现过程要写的代码太繁琐了 如图通过注册中心提供的方法实现服务器之间互相调用,在实际开发中不希望手写那么多调用代码,所以就出现了远程调用需求
SpringCloud是一个全局的微服务治理平台,与其他的一些微服务框架不同,SpringCloud关注的是全局的微服务治理,或者说SpringCloud是一个生态圈;例如服务发现与注册、服务熔断、负载均衡、分布式配置、服务网关、链路追踪、消息驱动...等等功能在SpringCloud中都有对应的解决方案(框架);因而,SpringCloud并不是一个单独的框架,而是一系列框架的集合,是微服务一站式全套解决方案; 另外SpringCloud是基于SpringBoot之上做开发的,SpringCloud正是利用了SpringBoot开发的便捷性简化了微服务中基础配置开发,让我们能够快速的构建一个独立的微服务平台;总的来说,SpringBoot主要的目的是快速开发单个应用(微服务),Spring Cloud则关注的是全局的服务治理;包括了分布式的方方面面的管理; 总结: • 1)SpringCloud并不是一个框架,是一系列框架的集合 • 2)SpringCloud项目必须基于SpringBoot
随着互联网的不断发展,网站应用的规模不断扩大,系统架构也因此也不断的演进、升级、迭代。从互联网早期到现在,系统架构大体经历了下面几个过程: • 1)单体应用架构 • 2)垂直应用架构 • 3)分布式架构 • 4)SOA架构 • 5)微服务架构 1.1.1 单体应用架构 单体应用架构也叫集中式架构,在单体应用架构中,系统将所有的功能包括前端、后端等全部打包在一起部署,所有的代码都写在一起,通常也是交由一个小的技术团队开发; 优点: • 项目架构简单,开发成本低 • 项目部署在一个节点上, 维护方便 缺点: • 代码耦合度太高,开发维护困难 • 无法针对不同模块进行针对性优化 • 系统容错率低,如果该系统一个模块出现不可用会导致整个系统无法使用。
Netflix Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST请求自动转换成客户端负载均衡的服务调用。微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的; Ribbon的主要作用就是两个: 1)服务之间调用 2)服务调用时的负载均衡
我们在Java使用接口调用时,可以借助HttpClient、OkHttp、HttpURLConnection以及我们之前一直在使用的RestTemplate等工具来完成接口调用的功能;我们接下来要学习的Feign也是来帮我们做接口调用的;在SpringCloud中,使用Feign非常简单创建一个接口,并在接口上添加一些注解,就可以实现远程调用,在Feign中我们只需要像调用方法一样调用它就可以完成服务请求及相关处理; Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号