一、什么是服务网关服务网关 = 路由转发 + 过滤器

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;

在后续的介绍中,会逐渐介绍各个知识点,并完成一个轻量级的服务网关!!!

赵计刚

http://dwz.date/mzw

微服务之间调用经过网关吗_微服务网关入门相关推荐

  1. 微博中微服务缓存_微服务之间调用超时的设置治理

    原标题:微服务之间调用超时的设置治理 作者 | 奇正 微服务是⼀种分布式架构,系统内各部分(服务)被部署为单独的应用程序,并通过某种远程访问协议进⾏通讯.分布式应⽤的挑战之⼀就是如何管理远程服务的可用 ...

  2. Spring Cloud中如何保证各个微服务之间调用的安全性

    一.背景 微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务. 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢? 不是说你想调用就可以调用,一定要有认证机制,是我们内 ...

  3. feign调用多个服务_Spring Cloud多个微服务之间调用代码实例

    这篇文章主要介绍了Spring Cloud多个微服务之间调用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现在又一个学生微服务 user ...

  4. spring cloud微服务之间调用Feign

    微服务之间调用Feign 1.在调用方添加feign依赖: <dependency><groupId>org.springframework.cloud</groupId ...

  5. SpringCloud服务之间调用,报异常Method has too many Body parameters: public abstract

    问题: SpringCloud 或 SpringCloud Alibaba 开发中微服务之间调用遇到问题:Method has too many Body parameters: public abs ...

  6. c++突破网关屏蔽_通过API网关实现微服务管控-限流,熔断和降级

    今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容.在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断.包括也不断地在谈去中心化架构 ...

  7. spring cloud eureka 服务之间调用_Spring-cloud微服务实战【一】:微服务的概念与演进过程...

    本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架 ...

  8. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关

    API网关的作用 我们知道,在一个微服务系统中,整个系统被划分为许多小模块,客户端想要调用服务,可能需要维护很多ip+port信息,管理十分复杂.API网关作为整个系统的统一入口,所有请求由网关接收并 ...

  9. 多个微服务的接口依赖如何测试_微服务测试之接口测试和契约测试

    日常开发过程中,项目的接口通常由服务提供方约定和提供,微服务模式下接口被多个消费者调用更是常态,那么提供方接口的变更如何快速.高效.无遗漏的通知给消费者呢?另外,当一个service同时被多个使用者调 ...

最新文章

  1. snmp在企业网中的应用
  2. 文字转语音,语音转语音,实际的转化过程
  3. html如何用v-for遍历,v-for循环遍历
  4. linux 指令tftp传输文件_Linux tftp命令使用详解:在本机与tftp服务器之间使用TFTP协议传输文件...
  5. 匿名内部类的使用总结
  6. smartforms输出格式设置说明
  7. 链表反转相关的题(C++模板)
  8. 一天中的最佳学习时间
  9. STM32工作笔记0060---窗口看门狗实验
  10. C++ log4cpp(tx2)
  11. 多项式曲线拟合 c语言6,多项式曲线拟合
  12. 【AVD】NDK MediaCodec 编码中的坑 configure: err(-2147479551) error -38 Fatal signal 4 (SIGILL) ILL_ILLOPC
  13. 齿轮 matlab,齿轮传动的MATLAB软件建模及轻量化设计.pdf
  14. 为什么很多人家里不准备尺子了?手机怎么测量长度?
  15. 编程语言之时下潮流与实用价值
  16. 基于python下django框架 实现外卖点餐系统详细设计
  17. LabVIEW基础(1)
  18. MapReduce最佳成绩统计,男生女生比比看
  19. 【小沐学NLP】Python实现聊天机器人(Selenium、七嘴八舌)
  20. Friends Mp3

热门文章

  1. 跟我学习php文件和目录常用函数-下篇
  2. 关于 eclipse startexplorer插件 快速打开文件夹
  3. LCLFramework框架之Service模式
  4. Lucene 对文档打分的规则整理记录
  5. 你有过这样的“反应”吗?
  6. 2.7-egrep及bash中的变量
  7. easyui英文提示变中文
  8. soundtouch源码分析__based on csdn :
  9. SendInput模拟Win(VK_LWIN)键的问题
  10. Linux ssh命令无法使用