eureka

Spring Cloud 入门 之 Zuul 篇(五)

一曲冷凌霜 提交于 2020-05-06 03:40:56
原文地址: Spring Cloud 入门 之 Zuul 篇(五) 博客地址: http://www.extlight.com 一、前言 随着业务的扩展,微服务会不对增加,相应的其对外开放的 API 接口也势必增多,这不利于前端的调用以及不同场景下数据的返回,因此,我们通常都需要设计一个 API 网关作为一个统一的 API 入口,来组合一个或多个内部 API。 二、简单介绍 2.1 API 网关使用场景 黑白名单: 实现通过 IP 地址控制请求的访问 日志:实现访问日志的记录,进而实现日志分析,处理性能指标等 协议适配:实现通信协议的校验、适配转换的功能 身份认证:对请求进行身份认证 计流限流:可以设计限流规则,记录访问流量 路由:将请求进行内部(服务)转发 2.2 API 网关的实现 业界常用的 API 网关有很多方式,如:Spring Cloud Zuul、 Nginx、Tyk、Kong。本篇介绍的对象正是 Spring Cloud Zuul 。 Zuul 是 Netflix 公司开源的一个 API 网关组件,提供了认证、鉴权、限流、动态路由、监控、弹性、安全、负载均衡、协助单点压测等边缘服务的框架。 Spring Cloud Zuul 是基于 Netflix Zuul 的微服务路由和过滤器的解决方案,也用于实现 API 网关。其中

ServiceMesh(服务网格)

百般思念 提交于 2020-05-06 02:40:44
今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师,如果你现在还不了解ServiceMesh的话,是否感觉有点落伍了?那么到底什么是ServiceMesh?它诞生的背景是什么?它解决什么问题?企业是否适合引入ServiceMesh?根据近年在一线互联网企业的实践和思考,从个人视角出发,我为大家一一解答这些问题。 微服务架构的核心技术问题 在业务规模化和研发效能提升等因素的驱动下,从单块应用向微服务架构的转型(如下图所示),已经成为很多企业(尤其是互联网企业)数字化转型的趋势。 图片发自简书App 在微服务模式下,企业内部服务少则几个到几十个,多则上百个,每个服务一般都以集群方式部署,这时自然产生两个问题(如下图所示): 图片发自简书App 一、服务发现:服务的消费方(Consumer)如何发现服务的提供方(Provider)? 二、负载均衡:服务的消费方如何以某种负载均衡策略访问集群中的服务提供方实例? 作为架构师,如果你理解了这两个问题,可以说就理解了微服务架构在技术上的最核心问题。 三种服务发现模式 服务发现和负载均衡并不是新问题,业界其实已经探索和总结出一些常用的模式,这些模式的核心其实是代理(Proxy,如下图所以),以及代理在架构中所处的位置,

Spring Cloud Netflix Zuul 服务网关

寵の児 提交于 2020-05-05 10:10:07
学习在 Spring Cloud 中使用 Zuul 实现服务网关,包括基本使用、请求过滤、忽略路径、前缀等功能。它是 Netflix 家族成员之一。 1 概述 由于每一个微服务的地址都有可能发生变化,无法直接对外公布这些服务地址,基于安全以及高内聚低耦合等设计,我们有必要将内部系统和外部系统做一个切割。 一个专门用来处理外部请求的组件,就是服务网关,常用功能: 权限问题统一处理 数据剪裁和聚合 简化客户端的调用 可以针对不同的客户端提供不同的网关支持 在 Spring Cloud 中,网关主要有两种实现方案: Zuul 和 Spring Cloud Gateway 。 Zuul 是 Netflix 公司提供的网关服务,主要有如下功能: 权限控制,可以做认证和授权 监控 动态路由 负载均衡 静态资源处理 Zuul 中的功能基本上都是基于 过滤器 来实现,它的过滤器有几种不同的类型: PRE ROUTING POST ERROR 2 准备工作 2.1 服务注册 创建 Spring Boot 项目 zuul-client-provider ,作为我们的 服务提供者 ,添加 Web/Eureka Client 依赖,如下: 最终的依赖如下: <dependencies> <dependency> <groupId>org.springframework.boot</groupId>

掌门1对1微服务体系Solar第1弹:全链路灰度蓝绿发布智能化实践

一世执手 提交于 2020-05-04 19:00:25
掌门教育自2014年正式转型在线教育以来,秉承“让教育共享智能,让学习高效快乐”的宗旨和愿景,经历云计算、大数据、人工智能、AR/VR/MR以及现今最火的5G,一直坚持用科技赋能教育。掌门教育的业务近几年得到了快速发展,特别是今年的疫情,使在线教育成为了新的风口,也给掌门1对1新的机遇。随着业务规模进一步扩大,流量进一步暴增,微服务体系下,业务服务新增和迭代频率大大加快,运维和业务人员经常需要熬夜人工上线,疲劳状态下容易产生生产事故,运维成本和业务成本也将大大上升。在此背景下,基础架构部推出可以白天安全上线,流量无损的微服务灰度蓝绿发布智能化系统,并通过强有力的各种监控手段来保证流量的精确制导和调拨,提升技术驱动能力。 关于Solar Solar作为掌门1对1下一代基础微服务体系,2019年11月开始筹划,2020年1月4日推出第一版,2020年4月15日发布1.2.0 & 2.2.0里程碑稳定版,兼容Spring Cloud Edgware版、Finchley版、Greenwich版、Hoxton版本。基于三层体系而构建: 基础公共组件。Solar的基础组件,基础公共组件一般呈原子层面的独立存在,组件间也可适当耦合,基本上可达到一个组件被移除,不影响另外一个组件的运行的特征。 基础公共框架。Solar的基础框架,依托Spring Cloud服务体系,以框架形式对外暴露

SpringCloud2.0 Hystrix Dashboard 断路器指标看板 基础教程(八)

对着背影说爱祢 提交于 2020-05-04 07:45:22
1、启动基础工程 1.1、启动【服务中心】集群,工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 1.2、启动【服务提供者】集群,工程名称:springcloud-eureka-client 参考 SpringCloud2.0 Eureka Client 服务注册 基础教程(三) 1.3、启动【服务消费者】,工程名称:springcloud-eureka-ribbon 参考 SpringCloud2.0 Ribbon 服务发现 基础教程(四) 1.4、启动【服务消费者】,工程名称:springcloud-eureka-feign 参考 SpringCloud2.0 Feign 服务发现 基础教程(五) 2、创建【断路器指标看板】,即 Hystrix Dashboard 2.1、新建 Spring Boot 工程,工程名称:springcloud-eureka-hystrix-dashboard 2.2、工程 pom.xml 文件添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <

【一起学源码-微服务】Ribbon 源码四:进一步探究Ribbon的IRule和IPing

六月ゝ 毕业季﹏ 提交于 2020-05-04 06:06:19
前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是 DiscoveryEnableNIWSServerList ,同时在 DynamicServerListLoadBalancer 中会调用 PollingServerListUpdater 进行定时更新Eureka注册表信息到 BaseLoadBalancer 中,默认30s调度一次。 本讲目录 我们知道Ribbon主要是由3个组件组成的: ILoadBalancer IRule IPing 其中 ILoadBalancer 前面我们已经分析过了,接下来我们一起看看 IRule 和 IPing 中的具体实现。 目录如下: 负载均衡默认Server选择逻辑 Ribbon实际执行http请求逻辑 Ribbon中ping机制原理 Ribbon中其他IRule负载算法初探 说明 原创不易,如若转载 请标明来源! 博客地址: 一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码分析 负载均衡默认Server选择逻辑 还记得我们上一讲说过,在Ribbon初始化过程中,默认的 IRule 为 ZoneAvoidanceRule ,这里我们可以通过debug看看,从 RibbonLoadBalancerClient.getServer() 一路往下跟

Spring Cloud 入门 之 Ribbon 篇(二)

。_饼干妹妹 提交于 2020-05-04 06:03:40
原文地址: Spring Cloud 入门 之 Ribbon 篇(二) 博客地址: http://www.extlight.com 一、前言 上一篇 《Spring Cloud 入门 之 Eureka 篇(一)》 介绍了微服务的搭建,服务注册与发现。但在文章中留了一个小尾巴--如何正确使用 Eureka 进行服务发现并调用服务。 本篇文章将介绍如何使用 Ribbon 完成发现服务的调用以及其负载均衡的规则的使用。 二、简单介绍 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡工具,其主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。 其运行原理如下图: Ribbon 运行时分成 2 个步骤: 1) 先选择在同一个区域负载较少的 EurekaServer; 2) 再根据用户指定的策略,在从 EurekaServer 中获取注册列表中的服务信息进行调用。 其中,Ribbon 提供多种负载均衡策略:如轮询、随机、响应时间加权等。 三、实战演练 我们在 order-server 项目的基础上进行修改。不清楚的读者请先转移至 《Spring Cloud 入门 之 Eureka 篇(一)》 进行浏览。 此外,笔者额外的创建 2 个 goods-server 项目,即现在有 3 个 goods-server

【一起学源码-微服务】Feign 源码三:Feign结合Ribbon实现负载均衡的原理分析

瘦欲@ 提交于 2020-05-03 20:23:00
前言 前情回顾 上一讲我们已经知道了Feign的工作原理其实是在项目启动的时候,通过JDK动态代理为每个FeignClinent生成一个动态代理。 动态代理的数据结构是:ReflectiveFeign.FeignInvocationHandler。其中包含 target (里面是serviceName等信息)和 dispatcher (map数据结构,key是请求的方法名,方法参数等,value是 SynchronousMethodHandler )。 如下图所示: 本讲目录 这一讲主要是Feign与Ribbon结合实现负载均衡的原理分析。 说明 原创不易,如若转载 请标明来源! 博客地址: 一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码分析 Feign结合Ribbon实现负载均衡原理 通过前面的分析,我们可以直接来看下 SynchronousMethodHandler 中的代码: final class SynchronousMethodHandler implements MethodHandler { @Override public Object invoke(Object[] argv) throws Throwable { // 生成请求类似于:GET /sayHello/wangmeng HTTP/1.1 RequestTemplate template =

【一起学源码-微服务】Feign 源码一:源码初探,通过Demo Debug Feign源码

二次信任 提交于 2020-05-03 20:20:51
前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是 DiscoveryEnableNIWSServerList ,同时在 DynamicServerListLoadBalancer 中会调用 PollingServerListUpdater 进行定时更新Eureka注册表信息到 BaseLoadBalancer 中,默认30s调度一次。 本讲目录 这一讲主要是讲Fegin Demo以及通过入口注解@EnableFeignCliets和@FeignClient来进行源码初探。 目录如下: Feign代码Demo Feign调用原理 @EnableEurekaClient和@FeignClient注解扫描 说明 原创不易,如若转载 请标明来源! 博客地址: 一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码分析 Feign代码Demo Fegin的Demo还是延续之前讲解的Eureka的代码。地址为: https://github.com/barrywangmeng/spring-cloud-learn 如上图所示,ServiceB调用ServiceA的服务,定义了一个@FeignClient标注的ServiceAFeignClient接口,里面定义了ServiceA中Controller提供的接口信息。

【一起学源码-微服务】Ribbon 源码二:通过Debug找出Ribbon初始化流程及ILoadBalancer原理分析

天大地大妈咪最大 提交于 2020-05-03 20:19:56
前言 前情回顾 上一讲讲了Ribbon的基础知识,通过一个简单的demo看了下Ribbon的负载均衡,我们在RestTemplate上加了@LoadBalanced注解后,就能够自动的负载均衡了。 本讲目录 这一讲主要是继续深入 RibbonLoadBalancerClient 和Ribbon+Eureka整合的方式。 上文我们已经知道调用 RestTemplate 时,会在其上面加上一个 LoadBalancerInterceptor 拦截器,其中会先执行 LoadBalancerClient.execute() 方法。 这里我们会有一个疑问,默认的 LoadBalancerInterceptor 和 LoadBalancerClient 都是什么呢?他们分别在哪里进行初始化的呢? 带着这些疑问我们来往前递推下Ribbon初始化过程,相信看完下面的分析后,这些问题也就迎刃而解了。 目录如下: 从XXXAutoConfig来追溯Ribbon初始化过程 ZoneAwareLoadBalancer原理分析 说明 原创不易,如若转载 请标明来源! 博客地址: 一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码阅读 从XXXAutoConfig来追溯Ribbon初始化过程 在第一篇文章我们已经分析了,和 LoadBalanced 类同目录下有一个