Closed vieyahn2017 closed 1 year ago
SpringCloud之zuul微服务网关
2018年07月02日 00:07:51 qyj19920704 阅读数:202 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qyj19920704/article/details/80878804
可以有很多实现方法,如Nginx、Zuul,甚至是一个Node.js的服务端。它们最重要的作用是为前台提供后台服务的聚合,提供一个统一的服务出口, 解除它们之间的耦合,同时负责鉴权、认证、安全和跳转等作用。 Zuul是边缘服务,用来提供动态路由、监控、鉴权、安全、调度等功能,将权限控制等一些业务逻辑抽离出来,单独放到Zuul里,使得服务组件更简单,具有更好的可复用性。 Zuul是反向代理工具,代理了后台的所有服务端,前端请求不需要知道真正的服务端是谁,只要交给Zuul就可以了,Zuul负责路由到真正的服务商。
Zuul做为网关层,自身也是一个微服务,跟其它服务Service-1,Service-2, … Service-N一样,都注册在eureka server上,可以相互发现,zuul能感知到哪些服务在线,同时通过配置路由规则(后面会给出示例),可以将请求自动转发到指定的后端微服务上,对于一些公用的预处理(比如:权限认证,token合法性校验,灰度验证时部分流量引导之类),可以放在所谓的过滤器(ZuulFilter)里处理,这样后端服务以后新增了服务,zuul层几乎不用修改。
pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
zuul中自动引入了Ribbon和Hystrix
register-center(服务注册) config-server(配置服务) service-provider(服务提供者) service-consumer(服务消费者) service-gateway(微服务网关)
高可用性 均衡负载: 容错,防止雪崩. 并发控制 : 错峰流控 动态路由制定和修改
监控统计 版本控制 认证 鉴权 数据安全: 防篡改,参数脱敏… 协议转换: 如 HTTP => RPC协议.
我搭的demo:
基于SpringCloud微服务框架
服务的注册与发现
端口8761
服务网关
端口8080
在一般情况下,我们不会直接暴露客户端给外部,而是通过服务网关来转发,
内部服务都是在局域网内通信,外部访问不了。
通过服务网关,我们还可以统一做接口的安全性校验,统一拦截
参考 https://blog.csdn.net/qyj19920704/article/details/80878804
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8080
spring:
application:
name: service-zuul
zuul:
routes:
api-a:
path: /sa/**
serviceId: service-a
api-b:
path: /sb/**
serviceId: service-b
api-c:
path: /sc/**
serviceId: service-c
服务配置中心(可以暂时不管)
(为微服务各应用提供了一个中心化的外部配置)
端口8767, 8768
用户系统(可以暂时不管)
端口8760
微服务业务子模块
端口8771
端口8772
端口8773
微服务子业务端口不对外暴露,统一通过zuul服务网关转发
http://localhost:8080/sb/api/v1/dataAsset
http://localhost:8772/api/v1/dataAsset
这两个地址是一样的
Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:
线程池隔离、信号量隔离、熔断、降级回退。
在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。
我们要构建稳定、可靠的分布式系统,就必须要有这样一套容错方法。
负载均衡器,实现了断路器功能
参考 https://blog.csdn.net/cheidou123/article/details/78824140
负载均衡器,集成了ribbon框架,实现了断路器功能
什么是微服务?
简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。 其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。 这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。 这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务我们仅做最低限度的集中管理。
微服务具备的特性:
1.每个微服务都可独立运行在自己的进程里。 2.一系列独立运行的微服务共同构建起了整个系统。 3.每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等; 4.微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方法进行调用。
微服务的优点:
1.易于开发和维护 2.启动较快 3.局部修改容易部署 4.技术栈不受限制 5.按需收缩 6.Devops(即便于各个部门之间相互沟通与协作)
Spring Cloud
Spring Cloud基于Spring Boot,提供了多个组件来帮助企业进行微服务系统建设; 它提供的主要功能有:服务注册中心/服务注册/服务调用/负载均衡/断路器等; 一般情况下它都是使用已有的开源软件,在其基础上按Spring Boot的理念来进行封装,简化各种个组件的调用以及各个组件之间的交互。