原文链接:微服务架构-服务注册中心和服务网关(6.8)

这篇文章还是基于SpringCloud开源框架体系来谈下对Eureka服务注册中心和Zuul服务网关在使用上的一些理解和说明。在使用微服务架构进行开发的时候,最基本的就是SpringBoot,但是对于一个大的项目会根据实际的业务和需求场景,使用到类似服务注册中心,服务网关,负载均衡等多个其它子组件的能力。对于各个组件之间的协同关系如下图:

对于各个组件间关系简单说明如下:

  1. 服务注册中心Eureka:实现服务注册,服务发现,服务的路由分发基础能力。
  2. 断路器Hystrix:负责监控服务之间的调用情况,连续多次失败进行熔断保护。
  3. 服务网关Zuul: 所有外部需要访问和请求的服务全部通过Zuul进行转发,类似API服务网关。
  4. 服务链监控Zipkin:实现服务日志监控和服务链监控。

在这里重点讨论下服务注册中心和服务网关。

首先说下Eureka服务注册中心,假设有两个微服务模块,一个是产品管理ProdModule,一个是客户管理CustomerModule,我们用SpringBoot框架来独立开发这两个微服务模块。这两个微服务模块间通过Rest接口进行交互。在实现的时候我们可以直接在在各自模块的配置文件里面进行Rest接口服务映射,配置服务端的Rest接口IP地址和端口即可。

那这种场景下我们完全可以不用Eureka组件,而使用Eureka组件最主要的就是原来ProdModule和CustomerModule两个模块间点对点的直接接口调用发生了变化和进一步的解耦。比如产品管理需要查询客户管理中的客户信息接口服务,那么整个过程会变化为:

  1. CustomerModule模块和接口注册到 Eureka组件
  2. ProdModule模块和接口注册到 Eureka组件
  3. ProdModule访问Eureka组件获取查询客户接口地址,然后再发起对CustomerModule模块调用。

在ProdModule接口消费处的配置,不再配置到具体的Rest接口地址,只配置相当路径名。实际的接口访问地址需要访问Eureka组件后根据均衡算法返回给你一个可用地址。而这种做法做大的作用就是起到了负载均衡和多个可用服务路由的作用。

即CustomerModule模块可能不止部署了一个实例,而是部署了多个服务实例,那么多个服务实例都会注册到注册中心,在消费端进行访问的时候再动态选择一个最佳的服务提供者进行访问。这个功能说成路由不太合适,实际上更多的是微服务模块的动态集群分发能力。

如果你不用Eureka组件,那么你也可以采用类似HaProxy,F5硬件负载均衡来做这个事情。但是如果微服务架构和容器化自动部署和动态扩展是集成在一起的,那么就需要这种计算节点的动态扩展,服务的注册能够自动完成。而对于Eureka组件恰好能够很好的完成这个事情。

注意Eureka组件实际上只提供了服务注册和发现的能力,实际上A在拿到B模块的服务地址后,仍然是点对点发起了调用。Eureka组件只管注册服务,并根据请求返回服务地址,而不管具体的服务消费调用整个过程,即整个消息和数据流都不会经过Eureka组件。

那么A要消费B模块的接口,A和B之间的网络策略必须是打通的,而不仅仅是打通和Eureka Server的网络策略。但是如果我们使用的是Zuul服务网关,网关是承载数据流的,实现底层完全的位置透明。因此A只需要打通到Zuul网关服务器的网络即可。也正是这个原因可以看到,一个大应用里面涉及到20个微服务模块,各有个的IP地址,都需要发布接口给外部访问,那么这个时候我们只需要在隔离区部署一个Zuul服务网关统一出口即可。

当前Eureka的设计仍然不是完全去中心化的,即如果Eureka持续故障,那么对于模块A就无法发现模块B对应的接口服务能力。而实际上最好的方式是对于服务目录库能够有一套本地数据缓存,以确保服务注册中心在宕机故障的时候也不会对整个服务调用造成影响。

通过以上说明可以看到,如果要考虑和Docker容器集成,考虑到微服务模块本身实例的扩展,那么一定要启用Eureka服务注册和发现中心。以方面微服务模块实例实现集群化动态扩展,同时也方便整个微服务架构应用体系的整体环境迁移和配置。

再回来看下Zuul微服务网关,注意微服务网关本身才是和轻量的ESB总线类似的一个子产品,至少微服务网关实现了基础的服务代理,服务路由,服务安全等基本的服务管控能力。同时通过微服务网关实现内部微服务模块完全的位置透明,内部微服务模块不再需要对外发布,而只是将需要对外发布的接口进一步注册和接入到微服务网关上面即可。

即微服务网关更多是一个大的应用体系下,需要有RestAPI接口对外发布的场景下才会使用,否则不需要使用。那么我们再回来看下实际的业务场景。

如果一个CRM应用,分为10个微服务模块进行开发,这10个微服务模块之间有接口访问和调用,那么这个时候启用Eureka注册中心即可,而不需要启用微服务网关。如果出现这个CRM应用涉及到一个手机APP应用,一个外部电商平台需要访问CRM应用的数据,那么就可以启用微服务网关,这时只需要将10个微服务模块中涉及到外部访问的这些API接口接入和注册到微服务网关即可。

进一步回归到企业内部传统应用的微服务和组件化架构改造。

比如涉及到CRM应用拆分为10个微服务模块,一个PLM应用拆分为8个模块,一个MES应用拆分为6个微服务模块。那么这三个应用内部的微服务模块间通过ureka注册中心完成协同即可。而三个应用之间的接口访问和调用,我们更加建议采用微服务网关组件来完成。毕竟在微服务网关上更加容易实现对安全,日志,路由,流量控制等各种能力。

微服务架构-服务注册中心和服务网关(6.8) (转载)相关推荐

  1. 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 服务注册中心本质上是为了解耦服务提供者和服务消费者. ...

  2. 微服务架构之注册中心

    假设你发布了一个服务,并且已经在一台机器上部署了服务,那如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢? 这个问题就跟我想去吃肯德基一样,我可以去谷歌地图上搜索肯德基,然后谷歌地图会返回所 ...

  3. nacos 下线接口_微服务架构nacos注册中心为什么那么火

    最近nacos非常火,很多使用eureka的都替换成nacos,既可以做注册中心也可以做配置中心,除此之外还有更好用的功能,今天说一下nacos和gateway做动态路由. 动态路由网上一搜一大堆,真 ...

  4. 微服务架构02-nacos注册中心

    目录 Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 准备工作 ​ 下载与安装 初始化配置 服务启动与访问 服务注册与调用入门(重点) 业务描述 生产者服务创建及注册 消费者服务 ...

  5. 【微服务】Eureka注册中心

    文章目录 前置导入 Eureka的结构和作用 搭建eureka-server 创建eureka-server服务 引入eureka依赖 编写启动类 编写配置文件 启动服务 总结 服务注册 引入依赖 配 ...

  6. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  7. [享学Eureka] 一、源生Eureka介绍 --- 基于注册中心的服务发现

    凡事皆有代价,一切皆是取舍. 本专栏所有文章均计划逐步重写搬迁至本人公号:Java方向盘,且免费开放!故不再建议下单购买,可关注我公号前往免费学习.交流 –> 返回Netflix OSS套件专栏 ...

  8. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  9. java 服务注册中心_服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建...

    原标题:服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建 Spring Cloud Eureka基于Netflix Eureka做了二次封装,是Spring Cloud Netflix ...

最新文章

  1. source insight删除保存路径为中文的project工程项目报错的解决办法
  2. Android Studio 小技巧/快捷键 合集
  3. 【杂谈】从学生到讲师,我如何20天里在有三AI赚3万
  4. 关于jQuery.query.js 取参数的一个小问题
  5. 红石32位cpu通用计算机,我的世界无命令方块32位红石电脑装置详解
  6. 什么标签用于在表单中构建复选框_UI/UX笔记之如何设计好表单
  7. jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程
  8. win10中linux系统下载软件,win10 上安装 Debian Linux子系统
  9. type或者xtype总结
  10. 机器学习 —— 基础整理(二)朴素贝叶斯分类器;文本分类的方法杂谈
  11. at指令代码 stm32f030_stm32+ESP8266AT指令详细说明
  12. mysql xa 使用_MySQL如何实现 XA 规范
  13. Forget Yourself
  14. leetcode:Happy Number
  15. 女博士实名举报北航人工智能教授:性骚扰!
  16. 凸优化学习笔记(四):对偶性、KKT 条件、敏感性分析
  17. web中将DataTable作为数据源导出Excel (带格式)
  18. To C、To G、To B,数字化转型
  19. 微信 JSAPI 支付流程
  20. 各种编程技术资料分享

热门文章

  1. 无心剑中译罗素《通往幸福之路》
  2. 刚安装玩mysql如何登录不了_解决启用GTID binlog新安装完的MySQL提示无法登录
  3. 6-7 使用函数输出水仙花数_自学C++基础教程(输入输出2)
  4. 2017.10.11 Problem c 失败总结
  5. 2017.10.10 狼和羊的故事 思考记录
  6. 繁体字_如何简单快速地批量认识繁体字?
  7. 【英语学习】【Daily English】U04 Neighborhood L03 Oh, my bad
  8. Eigen官网教程(7)geometry几何模块的实践
  9. 高通android开源代码下载,高通平台Android源码bootloader分析之sbl1(三)
  10. win10一直卡在自动修复_分享:win10自动修复过程中无法正确启动怎么办?