需求:
我们通过Gateway的路由功能,访问Nginx服务器,Nginx通过反向代理和负载均衡,在访问我们后台的多个服务。

思维导图:
关键步骤:

Gateway配置:

配置 网关接收请求后,路由到:http://shopservice.com

spring:
application:
name: cloud-gateway-service
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名称经行路由
routes: #路由
– id: nginx-routh
uri: http://shopservice.com
predicates:
– Path=/**

hosts文件中添加如下内容:C:\Windows\System32\drivers\etc

配置域名
127.0.0.1 shopservice.com
1
Nginx配置 nginx.conf文件:

配置接收网关路由过来的请求,访问服务提供者路径
反向代理和负载均衡
#负载均衡
upstream myshopservices{
server 127.0.0.1:8001 weight=1;
server 127.0.0.1:8002 weight=1;
server 127.0.0.1:8003 weight=1;
}

server {
listen 80; #监听端口
server_name shopservice.com; #访问服务名

#根路径 /
location / {
#反向代理
proxy_pass http://myshopservices;
}
}

之后就可以访问网关:
http://localhost:9527/shop/1?token=123456

 

为什么有了Spring-Gateway还要Nginx?

今天跟同学聊到一个问题:NginxSpring-Gateway都可以做负载均衡,他们有什么区别吗?为什么有了Spring-Gateway还要Nginx?

据说,这个是一道面试题。

回答该问题前,建议先思考另外一个面试题,在浏览器敲入一个完整的域名,大致经过了哪些组件?(粗糙点如下:)

  • 找IP
    1、在浏览器中是否缓存
    2、操作系统是否缓存
    3、最近的路由器是否缓存
    4、DNS域名解析得到IP
  • 访问接入层,比如部署在阿里云上,接入层是SLB。内部是一个LVS+Nginx实现的四层+七层负载均衡
  • 应用网关,比如SpringGateway/Zuul,做统一鉴权
  • 应用层服务
    1、Controller
    2、Service
    3、DAO
  • MySQL

Nginx在其中扮演的角色是什么?

  • 反向代理
  • 负载均衡

SpringGateway在其中扮演的角色是什么?

  • 统一鉴权

为什么有了Spring-Gateway还要Nginx?回到负载均衡上去看,最开始的负载均衡在哪里做?

  • DNS服务器上做,添加几个IP做轮询就可以了
  • 服务器抗不住,衍生出了基于F5/LVS实现的四层负载均衡
  • 基于成本性能等诸多方面的权衡,衍生除了Nginx/Apache这样的负载均衡软件
  • SOA/微服务大行其道时,网关服务也随着而来

它们是有了谁,为什么还会有谁这样的关系吗?亦或者,我们在讨论类似这样的话题的时候,往往是在混淆概念,不谈业务的架构都是耍流氓。没有谁是必须的,没有Nginx时服务也可以很好的跑着,没有SpringGateway时服务也可以很好的跑着,只是各自在架构 体系内干着各自合适的工作罢了。


送福利了!关注下方的公众号:“优派编程”,搜索关键词“下载”,即可获得软件app下载资源和python、java等编程学习资料~ 更多课程和学习资料请登录“方包博客”———http://fang1688.cn

更多资源请关注公众号或点击下方“阅读原文”,回复关键词获取

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

1 + 1 =