# 从浅入深 学习 SpringCloud 微服务架构(九)

news2024/12/23 6:16:11

从浅入深 学习 SpringCloud 微服务架构(九)

一、微服务网关引入

1、在微服务架构中,不同的微服务一般会有不同的网络地址,

如果让客户端直接与各个微服务通讯,可能会有很多问题,如:

1)客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度。
2)在某些场景下存在跨域请求的问题。
3)加大身份认证的难度,每个微服务需要独立认证。

2、微服务网关,就是介于客户端与服务器之间的中间层,所有的外部请求都会先经过微服务网关。

客户端只需要与网关交互,只知道一个网关地址即可,这样简化了开发还有以下优点:

  • 易于监控。
  • 易于认证。
  • 减少了客户端与各个微服务之间的交互次数。

二、微服务网关的概述

1、什么是微服务网关?

API 网关是一个服务器,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供一个定制的 API。
API 网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。
通常,网关也是提供 REST/HTTP 的访问 API。服务端通过A PI-GW 注册和管理服务。

2、微服务网关的作用和应用场景

网关具有的职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。
当然,最主要的职责还是与“外界联系”。

3、常见的 API 微服务网关实现方式

  • Kong

基于 Nginx+Lua 开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。
问题:只支持Http协议;二次开发,自由扩展困难;提供管理AP1,缺乏更易用的管控、配置方式。

  • ZuuI

Netflix 开源,功能丰富,使用 JAVA 开发,易于二次开发;需要运行在 web 容器中,如 Tomcat。
问题:缺乏管控,无法动态配置;依赖组件较多;处理 Http 请求依赖的是 Web 容器,性能不如 Nginx 。

  • Traefik

Go 语言开发;轻量易用;提供大多数的功能:服务路由,负载均衡等等;提供WebUl。
问题:二进制文件部署,,二次开发难度大;UI更多的是监控,缺乏配置、管理能力。

  • Spring Cloud Gateway

SpringCloud提供的网关服务。

  • Nginx+lua 实现

使用 Nginx 的截(At+A)和负载均衡可实现对 api 服务器的负载均衡及高可用
问题:自注册的问题和网关本身的扩展性。

三、nginx 模拟 API 网关

1、Nginx 介绍:

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。

Nginx可 以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

2、测试登录 Nginx 服务:

先启动 Nginx 服务,浏览器地址栏输入:localhost:80 显示如下界面登录成功。

在这里插入图片描述
如果启动 Nginx 不成功,请查看:
#启动 nginx 的时候屏幕一闪而过,报错 failed (1113: No mapping for the Unicode character exists…)

3、修改 Nginx 配置文件,模拟 API 网关服务。

在 Nginx 安装目录下,找到 conf 文件夹下的 nginx.conf,记事本打开编辑:
如: …\nginx-1.8.1\conf\nginx.conf

# D:\Program Files\nginx-1.8.1\conf\nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
		
		
		# 路由到订单服务
		location  /api-product {
			proxy_pass http://127.0.0.1:9001/;
		}
		
		# 路由到商品服务
		location  /api-order {
			proxy_pass http://127.0.0.1:9002/;
		}
		
		

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

在这里插入图片描述

4、修改完后,结束 Nginx 服务进程,重新启动,同时启动 service-eureka, service-prodcut, service-order, 三个启动类,进行测试。

在这里插入图片描述
在这里插入图片描述

5、浏览器地址栏输入:

http://localhost/api-product/product/1 就相当于路由转发到 http://127.0.0.1:9001/product/1
在这里插入图片描述

http://localhost/api-order/order/buy/1 就相当于路由转发到 http://127.0.0.1:9002/order/buy/1
在这里插入图片描述

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI适老化!10秒一张的AI姓氏头像,居然要卖9块9?中老年用户都说好!

看短视频的你,一定会刷到过这样的直播间: 现在大家明白了,这是一个做姓氏图像的直播间。我刚开始刷到的时候也觉得这种头像好看,高大上,也想做一个这样的图像,来当自己的微信头像。 做这样的图像需要排队刷…

Jenkins自动化搭建记录

每一份努力都是有一份期盼,每一份付出都是为了有更多的收获。 本文记录一次搭建Jenkins自动参数化打包APK的实现过程和碰到的问题,实现了在Windows和Mac系统下的自动化打包流程。 因为Jenkins的安装过程在网上的教程很多,这里就不在赘述。 …

手动实现简易版RPC(三)

手动实现简易版RPC(三) 往期内容 手动实现简易版RPC(一):RPC简介及系统架构 手动实现简易版RPC(二):简单RPC框架实现 前言 接上两篇博客我们实现了最简易RPC框架,接下来的几期重点在简易版…

深入解析C#特殊字符:概念、分类与使用方法

文章目录 前言一、特殊字符的定义二、特殊字符的分类与作用1.转义字符2. 格式字符3. 逻辑运算符4. 运算符5. 字符串6. 注释 三、$:字符串内插(String Interpolation)四、:逐字字符串(Verbatim Strings)五、…

ai绘画的今天,新人还能入行吗?

现在24年了,大趋势已经很明显,ai绘画现阶段处于如日中天的时候,无论是绘画,电商,小说推文。等等一系列的行业都能用到ai绘画! 说明一下,我自己就是23年初偶然间刷到了ai绘画这个赛道&#xff0c…

SpringDI方式及Redis应用场景的分享

1、为什么Spring和IDEA 都不推荐使用 Autowired 注解 大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解Autowired后会出现如下警告Field injection is not recommended (字段注入是不被推荐的);但是使用Resource却不会…

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

wordpress子比主题给文章内容加上密码查看

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤1.引入库2.读入数据第三步:文章内添加代码前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,…

三维重建(SFM)与实时定位建图(SLAM)的区分与联系

1、SLAM SLAM是Simultaneous Location and Mapping,同时定位与地图构建。是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。目的是解决自主机器人“定位”和“建图”两个问题…

Spring JdbcTemplate使用临时表+事务会话管理实现数据新增、查询及自动清除功能

需求描述: 由于某些情况下当查询过滤参数过大时,执行sql由于参数过大而报错,此时 需要使用临时表的方式,即 当参数超过某个阀值(如 1000,可调整)新增一张临时表,将原表 与 该临时表进…

Vue3+vite优化基础架构(3)--- 优化vue-i18n国际化配置

Vue3vite优化基础架构(3)--- 优化vue-i18n国际化配置 说明全部页面进行中英文使用测试中英文切换对ElementPlus里面的所有组件进行中英文切换 说明 这里记录下自己在Vue3vite的项目增加全局中英文切换按钮对页面进行中英文切换及同时对ElementPlus里面的…

stm32单片机开发五、I2C通信

I2C这部分的时序单元可以看我另外一篇博客I2C基本知识 I2C发送数据时是高位先行,也就是先发送高位的,比如一个字节有8位B0-B7,先发送B7高位 I2C用的是同步时序,它有一个好处,比如传输过程中,出现了中断&…

深度学习之基于Pytorch姿态估计的仰卧起坐计数系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 仰卧起坐作为一种常见的健身动作,被广泛用于腹部肌肉的锻炼。然而,对于仰卧起…

(四)机器学习在银行中的典型应用场景(模型) #CDA学习打卡

本文总结了机器学习在银行中的典型业务应用场景,包括客户管理、零售智能营销、公司智能营销、自然语言处理、运营管理以及图像识别。

智慧园区sip对讲广播解决方案

智慧园区sip对讲广播解决方案18123651365 目前而言智慧园区管理者主要需要解决的问题是: 1.面对庞大的园区小区规模,能源管理全部依赖人工已经无法实现; 2.节能管理工作难度大,面对问题,没有好的解决方案; …

pyqt6的安装,使用-1

pyqt6安装的话,在自己所用的环境里安就可以,之前写有yolov5,yolov8的环境配置,python3.8的我安装就没有问题,打开anaconda,激活自己的环境 把这复制进去 pip install pyqt6 pip install pyqt6-tools 这个安装完了之后…

【JavaWeb】网上蛋糕项目商城-关键字搜索,购物车以及商品详情功能

概念 上文中已经实现热销和新品的商品列表功能,本文篇幅中实现关键字搜索商品,将商品加入购物车,以及查看商品的详情信息等功能 关键字搜索实现步骤 在head.jsp头部页面中,鼠标移动至搜索图标会显示隐藏的搜索框进行输入关键信…

数据结构(C):玩转链表

🍺0.前言 言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是链表,在这一章,小赵将会向大家展开聊聊链表…

c语言排序算法之八(桶排序)

前言 以下内容是被验证可以有效理解桶排序,代码也较容易理解。如果你发现还有很多需要增加的,欢迎留言。 为什么要单独写排序算法这一系列,看过一些贴子普遍篇幅较长。看完依旧难以直观理解原理及整个过程。代码永远是基于理解的基础上才能…

Carla基础 | Carla预编译版安装与ROS联合仿真图文教程

目录 1 什么是Carla?2 Carla预编译版安装2.1 独立显卡配置2.2 安装ROS2.3 启动虚拟环境2.4 安装Carla预编译版2.5 安装carla-ros-bridge 3 测试案例常见问题 1 什么是Carla? Carla是由西班牙巴塞罗那自治大学计算机视觉中心指导开发的开源仿真模拟器&…