1、微服务为什么要用网关?(首先要理解网关并不是必须的组件,只是一种设计模式或者设计理念)

客户端直接访问各子服务:

微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互。比如,订单,商品,会员服务。

这种客户端直接和后端服务交互的方式会有什么问题呢?

1、客户端需要知道每个服务的地址(如果有网关,分布式部署的话这样可以统一api的ip地址,再由网关去分发,可以通过注册中心获取你需要的服务节点列表,然后给你分配你调用那个节点去调用)

2、每个后端服务都需要实现认证、限流、日志、监控、缓存等功能,重复造轮子大大降低了开发效率,而这些公共业务逻辑完全可以拆分出来。而且会造成的代码复杂度和维护难度上升。

3、假如后端某些服务由之前的http/https调用变成rpc调用,或者某些参数发生改变,则客户端需要做很大调整。

这里我觉得还有必要补一篇rpc远程调用和restful请求的区别,这里简单科普一下:

rpc一般用于内部微服务之间的调用,restful请求也就是http请求一般是请求外部服务;

rpc可以像调用本地方法一样去调用其它微服务(在不同的服务器)的方法,原理是一般是cp/ip协议+动态代理。这里就减少了向外暴露的服务。而http请求是基于http协议的,需要暴露给外部,而且需要自己封装请求提和请求参数。rpc只是一种概念,有多种实现方式。

引入网关可以怎么解决这些问题呢?

1、网关作为边界,分割了内部应用和外部调用。

不同于外部API一般使用HTTP或REST,内部微服务可以从使用不用通讯协议中收获益处。这些协议可以是ProtoBuf或AMQP,甚至是诸如SOAP,JSON-RPC或者XML-RPC这样的系统集成协议。API网关可以对这些协议提供统一的外部REST接口,这就允许开发团队挑选一款最适合于内部架构的协议。

2、网关实现了安全层,降低了各子微服务的复杂度

API网关通过提供额外的安全层帮助阻止大规模攻击。这些攻击包括SQL注入,XML解析漏洞和DoS攻击。

微服务中有一些常见的要点,诸如使用API令牌进行授权,访问控制和调用频次限制。这每个点都需要每个服务区增加额外的时间去实现它们。API网关将这些要点从你的代码中提取出来,允许你的服务只关注于它们需要关注的任务。同时可以作为统一收集微服务日志的地方,方便了问题的定位。

3、微服务方便了服务的管理,提供了外部请求的统一入口,实现了路由转发,同时降低了对外暴露的服务

如果一个业务功能,调用了n个外部微服务,那边管理和维护起来简直是噩梦,二微服务万贯基于统一的域名和上下文去访问,管理起来更加方便。同时网关还可以实现路由转发和负载均衡的功能,但是并不是最佳的选择,因为有其它开源组件比它更nb,那就是nginx。

2、 有了网关为什么还需要nginx或者ribbon作负载均衡?

你可以理解为基于性能问题。

3、有了网关为什么还要需要有服务注册和发现?

让我们来看看一个同时有网关和服务发现注册中心的请求路径是怎样的?

一个请求过来了,根据网关根据路由规则分析出是请求的哪个服务,然后跟注册中心说:这个XX服务有木有?没有?那404!有?服务下有几个实例,都告诉我我自己找一个或者你告诉我一个能用的。然后把请求往某个服务的某个实例上发送,得到返回值后丢给客户端。       这样就不会出现,某个服务一直被调而一直在等待响应最终造成服务器挂掉的风险。网关保障的是微服务之间的安全和解耦,注册中心是保障微服务的高可用和可靠。但是网关的配置最好更高一点,不然也是一种风险。或者在网关前面挂一个nginx代理,多几套网关实例也行。

网关、负载均衡、服务注册发现什么关系?相关推荐

  1. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  2. Spring RSocket:基于服务注册发现的 RSocket 负载均衡

    作者 | 雷卷 来源|阿里巴巴云原生公众号 RSocket 分布式通讯协议是 Spring Reactive 的核心内容,从 Spring Framework 5.2 开始,RSocket 已经是 S ...

  3. e盾服务端源码_gRPC服务注册发现及负载均衡的实现方案与源码解析

    今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...

  4. gRPC服务注册发现及负载均衡的实现方案与源码解析

    今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...

  5. consul 日志配置_微服务:服务注册发现+ API 网关+配置中心+服务跟踪+服务熔断...

    服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址.当新的服务启动后,它会向登记 簿交待自己的地址信息.服务的依赖方直接向登记簿要 Service Provider 地址就行了.当下 ...

  6. 微服务架构 | 服务注册发现中心/配置中心/消息总线 - [nacos]

    INDEX §1 简介 §2 简单使用 §2.1 搭建 nacos-server §2.2 作为服务注册发现中心 §2.3 作为服务配置中心 §2.4 切换 nacos 的一致性协议 §3 配置的层次 ...

  7. 服务注册发现与kit实践

    服务注册发现 在微服务的架构当中,服务发现是比较常见的一个方式来保证服务的动态上线下线的机制,可以通过封装一定的库来对某一个服务进行调用时无感知,动态管理当前提供服务的机制,这样同一个服务可以注册多个 ...

  8. 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

    在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求. 微服务系统动辄上万个服务,而且还要动态伸缩.以人工写好的IP.Port 硬编码脚本的方式无法做到大规模自 ...

  9. 服务注册发现方案需求调研

    微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信,这时候必然引入一个服务注册发现问题,也就是说服务提供方要注册通告服务地址,服务的调用方要能发现目标服务,同时 ...

最新文章

  1. Java中的运行期类型鉴定
  2. python把数据写入excel_Python读取和写入Excel文件(转)
  3. VC#2005 Starter Kit: Screen Saver 使用介绍
  4. Linux 下 新增Oracle10g 实例
  5. 字符串的回文子序列个数_计算给定字符串中回文子序列的数量
  6. 上海java 开发培训_上海十大java培训
  7. 求101-200以内的素数
  8. 添加的oracle语句,Oracle中Insert语句的总结
  9. mongodb安装、远程访问设置、管理命令、增删改查操作以及GUI
  10. python学习_循环结构 and 类型判断
  11. 开关灯问题 BulbSwitch
  12. puppet部署三 配置puppet
  13. ECMAScript6 新特性——“数组的扩展”
  14. Python游戏开发实战:飞机大战(含代码)
  15. 3日线与5日线金叉买入法
  16. Android如何关闭硬件加速
  17. apicloud ajax html,apicloud ajax请求问题
  18. win10下VS2008提示试用期过期解决办法
  19. H5前端性能测试点及优化方法
  20. 通过计算机组成原理你能得到什么?

热门文章

  1. spring + hibernate
  2. 弹性地基梁板实用计算_强夯地基承载力原理及测试方法
  3. 脑子笨的人可以学计算机吗,脑子笨的人有什么特征 反应慢的人其实很聪明
  4. c++2个三维向量求角度差_交叉学科入门指南(2)——线性回归
  5. oracle材料差异科目,ORACLE分科目统计每科前三名的学生的语句
  6. cesium js 路径_Cesium开发学习路径
  7. 域用户绑定计算机批量设置,Windows 2008 AD域账户与计算机名批量绑定
  8. java 二进制 base64编码_java 按字节读写二进制文件(Base64编码解码)
  9. 工程制图 ( 标准件与常用件)
  10. 额外篇| Python制作词云