为什么微服务一定要有网关呢?
作者:赵计刚
cnblogs.com/java-zhao/p/6716059.html
一、什么是服务网关
服务网关 = 路由转发 + 过滤器
1、路由转发:接收一切外界请求,转发到后端的微服务上去;
2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。
二、为什么需要服务网关
上述所说的横切功能(以权限校验为例)可以写在三个位置:
每个服务自己实现一遍
写到一个公共的服务中,然后其他所有服务都依赖这个服务
写到服务网关的前置过滤器中,所有请求过来进行权限校验
第一种,缺点太明显,基本不用;第二种,相较于第一点好很多,代码开发不会冗余,但是有两个缺点:
由于每个服务引入了这个公共服务,那么相当于在每个服务中都引入了相同的权限校验的代码,使得每个服务的jar包大小无故增加了一些,尤其是对于使用docker镜像进行部署的场景,jar越小越好;
由于每个服务都引入了这个公共服务,那么我们后续升级这个服务可能就比较困难,而且公共服务的功能越多,升级就越难,而且假设我们改变了公共服务中的权限校验的方式,想让所有的服务都去使用新的权限校验方式,我们就需要将之前所有的服务都重新引包,编译部署。
而服务网关恰好可以解决这样的问题:
将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小;
如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务。
所以,需要服务网关!!!
三、服务网关技术选型
引入服务网关后的微服务架构如上,总体包含三部分:服务网关、open-service和service。
1、总体流程
服务网关、open-service和service启动时注册到注册中心上去;
用户请求时直接请求网关,网关做智能路由转发(包括服务发现,负载均衡)到open-service,这其中包含权限校验、监控、限流等操作
open-service聚合内部service响应,返回给网关,网关再返回给用户
2、引入网关的注意点
增加了网关,多了一层转发(原本用户请求直接访问open-service即可),性能会下降一些(但是下降不大,通常,网关机器性能会很好,而且网关与open-service的访问通常是内网访问,速度很快);
网关的单点问题:在整个网络调用过程中,一定会有一个单点,可能是网关、nginx、dns服务器等。防止网关单点,可以在网关层前边再挂一台nginx,nginx的性能极高,基本不会挂,这样之后,网关服务就可以不断的添加机器。但是这样一个请求就转发了两次,所以最好的方式是网关单点服务部署在一台牛逼的机器上(通过压测来估算机器的配置),而且nginx与zuul的性能比较,根据国外的一个哥们儿做的实验来看,其实相差不大,zuul是netflix开源的一个用来做网关的开源框架;
网关要尽量轻。
3、服务网关基本功能
智能路由:接收
外部
一切请求,并转发到后端的对外服务open-service上去;
注意:我们只转发外部请求,服务之间的请求不走网关,这就表示全链路追踪、内部服务API监控、内部服务之间调用的容错、智能路由不能在网关完成;当然,也可以将所有的服务调用都走网关,那么几乎所有的功能都可以集成到网关中,但是这样的话,网关的压力会很大,不堪重负。
权限校验:只校验用户向open-service服务的请求,不校验服务内部的请求。服务内部的请求有必要校验吗?
API监控:只监控经过网关的请求,以及网关本身的一些性能指标(例如,gc等);
限流:与监控配合,进行限流操作;
API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志
。。。后续补充
上述功能是网关的基本功能,网关还可以实现以下功能:
A|B测试:A|B测试时一块比较大的东西,包含后台实验配置、数据埋点(看转化率)以及分流引擎,在服务网关中,可以实现分流引擎,但是实际上分流引擎会调用内部服务,所以如果是按照上图的架构,分流引擎最好做在open-service中,不要做在服务网关中。
。。。后续补充
4、技术选型
笔者准备自建一个轻量级的服务网关,技术选型如下:
开发语言:java + groovy,groovy的好处是网关服务不需要重启就可以动态的添加filter来实现一些功能;
微服务基础框架:springboot;
网关基础组件:netflix zuul;
服务注册中心:consul;
权限校验:jwt;
API监控:prometheus + grafana;
API统一日志收集:logback + ELK;
压力测试:Jmeter;
。。。后续补充
在后续的介绍中,会逐渐介绍各个知识点,并完成一个轻量级的服务网关!!!
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢
为什么微服务一定要有网关呢?相关推荐
- .NET微服务架构及API网关
.NET微服务架构及API网关 原文:.NET微服务架构及API网关 一.MSA简介 1.1.MSA是什么 微服务架构MSA是Microservice Architecture的简称,它是一种架构模式 ...
- .Net微服务架构:API网关
本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件"API网关&q ...
- 微服务学习总结4(网关和consul结合)
先上一张图片: 首先要启动consul服务,用于对三个日志服务的注册和发现.(默认端口8500) 然后启动三个日志服务,端口分别为5726.5727.5728. 最后启动网关服务,用于转发客户端请求, ...
- 万字长文解析:分布式架构、SOA、微服务架构、API网关、ESB服务总线架构之间的关联及演进
1架构演进 架构十五年:改变的是形态,不变的是目的 业务驱动架构形态变化 过去十几年,随着互联网发展以及业务的多样化,系统的架构也在不断发生变化,总体上来说大体经历了从单体应用架构-垂直应用架构-分布 ...
- .Net Core微服务入门——Ocelot API网关接入(二)
Net Core微服务入门--Ocelot API网关接入(二) 我们先接入Consul,实现服务发现 服务发现 1.引入 Ocelot.Provider.Consul 包 2.修改ocelot.js ...
- .Net Core微服务入门——Ocelot API网关接入(一)
.Net Core微服务入门--Ocelot API网关接入 上一章我们测试了一个简单的Client 端访问Consul实现服务注册与发现,但是现实生产环境我们直接通过Client自行连接Consul ...
- 基于go-micro微服务的实战-实现网关Gateway(三)
基于go-micro微服务的实战-实现网关Gateway(三) 文章最后附带完整代码 基于go-micro实现网关层 创建好网关层目录 common: 公告模块,配置初始化等 conf: 配置文件 h ...
- 微服务(六)网关zuul
微服务(六)网关zuul 1.网关zuul 2.负载均衡 1.网关zuul 微服务基本模块已经有了,也可以做微服务了.但完成一个复杂的业务,可能需要多个微服务合作来完成,比如下单,需要用户服务,支付服 ...
- 微服务架构~BFF和网关是如何演化出来的
介绍 BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概念,这两个概念相对比较新,有些开发人员甚至是架构师都不甚理解. 本文用假想的公司案例+图示的方式, ...
- 微服务架构 BFF和网关是如何演化出来的
文章目录 1. 介绍 2. 服务化架构V1 3. 服务化架构V2 4. 服务化架构V2.1 5. 服务化架构V3 6. 服务化架构V4 7. 结论 1. 介绍 BFF(Backend for Fron ...
最新文章
- MLIR多级中间表示概述
- github 克隆项目过慢
- asp.net高亮显示搜索关键字的两个方法
- 悬镜 linux防黑加固平台,悬镜答疑丨悬镜服务器防护CC效果如何?
- mqtt linux 编译,MQTT客户端代码X64位Ubuntu环境编译+测试实践小结
- 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作
- 常见的div盒子居中(上下左右)实现
- 概述--Nginx集成Vcenter 6.X HTML Console系列之 1--(共4)
- 对PostgreSQL中bgwriter的 MyProc 的理解
- nodejs与sqlite
- 【花朵识别】基于matlab模板匹配花朵分类【含Matlab源码 472期】
- 【2】基于深度神经网络的脑电睡眠分期方法研究(标签导入)
- afp专用计算机,FRM考试只能用这些金融计算器(内含用法功能全解读)
- 咸蛋超人的CxImage学习之路(一)
- Elastic基本概念
- 虚拟机逻辑卷删除失败
- 维谛(Vertiv)培训中心迁新址,再攀培训业务新高峰
- Java_Save could not be completed. Try File> Save As. if the problem persists.
- ECDH_SECP256R1 + X9.63 KDF-SHA256
- 软考的高级证书难考吗,难度大吗?
热门文章
- PTA团体程序设计天梯赛-L2-023 图着色问题
- 大掌门2显示服务器繁忙,《大掌门2》二周年庆典开启 真传弟子潇洒归来
- 关于python和anaconda的一些基础认识
- P1049 装箱问题
- Codeforces Round #562 (Div. 2) B. Pairs
- 【AngularJS】—— 9 自定义过滤器
- JBoss企业级应用服务平台群集指南(五)
- 话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
- JS BOM 浏览器对象模型
- 《jQuery Mobile入门经典》—— 第 1 章 了解jQuery Mobile