最近研究了一下Spring Cloud里面的灰度发布, 看到各种各样的使用方式, 真是纷繁复杂, 眼花缭乱, 不同的场景需要不同的解决思路. 那我们也来实践一下最简单的场景: 区域划分: 服务分为beta(线上预发布环境)和main主生产环境 区域隔离情况 试情况可能有三种选择: A. main和beta互不相通, 绝对隔离 (资源相对充裕) B. main和beta正常情况下不通, 缺少实例时互通 (比较简单, 但可能无法区分异常服务, 不知道访问的是那个区域) C. beta绝对隔离, ma…
此文是一个完整的例子, 包含可运行起来的源码. 此例子包含以下部分: 网关层实现自定义LoadBalancer, 根据Header选取实例 服务中的Feign使用拦截器, 读取Header Feign的LoadBalancer也是用网关一样的实现 使用Web Filter来统一设置header变量, 于业务解耦 自定义LoadBalancer, 读取Header 首先创建一个新模块 hello-mybalancerbyheader, pom文件如下 <?xml version="1.0&q…
注意: 因为涉及到配置测试切换, 中间环节需按此文章操作体验, 代码仓库里面的只有最后一步的代码 准备好了微服务, 那我们就来看看网关+负载均衡如何一起工作 新建一个模块hello-gateway, 开启gateway和loadbalancer, pom部分如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0…
现在我们简单地来定制二个 ServiceInstanceListSupplier, 都是zone-preference的变种. 为了方便, 我重新调整了一下项目的结构, 把一些公用的类移动到hello-pubtool 模块, 这样网关项目和Feign项目就能复用一样的类了. A. main和beta互不相通, 绝对隔离 (资源相对充裕) 回到最开始的目的, 我们先实现这个A方案 package com.cnscud.betazone.pub.samezone; import com.cnscud…
上面看到直接通过网关访问微服务是可以实现按区域调用的, 那么微服务之间调用是否也能按区域划分哪? 下面我们使用FeignClient来调用微服务, 就可以配合LoadBalancer实现按区域调用. 首先我们新建一个微服务模块 hello-nameservice, 用来调用 hello-remotename服务. 模块需要使用Feign, 还要开启Feign的负载均衡, pom.xml文件如下: <?xml version="1.0" encoding="UTF-8&q…
我们准备一下用于查询姓名的微服务. 首先定义一下服务的接口, 新建一个空的Maven模块hello-remotename-core, 里面新建一个类: public interface RemoteNameService { String readName(int id) ; } 接下来的微服务都实现这个简单的接口作为示范. 然后创建一个服务模块hello-remotename, 依然使用 Spring Initializr, 选择 "Spring Web", "Eureka…
在上一篇,我们已经搭建了spring cloud微服务中的注册中心.但只有一个注册中心还远远不够. 接下来我们就来尝试提供服务. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA 服务提供 假设我们现在有个需求,需要一个接口,当我们传入一个名字,它会返回一句问好的话.如传入body,输入则为hello body!. 创建一个spring cloud的工程项目 具体的步骤这里…
? 小马哥 & Josh Long ? 喜欢写一首诗一般的代码,更喜欢和你共同 code review,英雄的相惜,犹如时间沉淀下来的对话,历久方弥新. 相见如故,@杭州. 4 月 18 日,Josh Long 来到了阿里巴巴西溪园区,我们向其演示了 Spring Cloud Alibaba 各个组件的功能和实现方式,Josh Long 看完意犹未尽,表示会在新的 Spring Tips 视频再次介绍 Spring Cloud Alibaba 中的其他组件.(点击文末阅读原文,访问上一期spri…
还是熟悉的面孔,还是熟悉的味道,不同的是,这次的配方升级了. 今年10月底,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本.随后,Spring Cloud 官方Twitter也发布了此消息.- 传送门 时隔 51天,Spencer Gibb再次在Spring官网的博客页面宣布:Spring Cloud Alibaba发布了其开源后的第二个版本0.2.1,随后,Spring C…
最近在学习spring框架.其中spring cloud在微服务方面很火,所以在学习过程中,也做一些记录. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA spring cloud的简介 关于spring cloud是什么,做什么的问题这里就不再详细说明了.需要的可以看 这篇文章[http://www.ityouknow.com/springcloud/2017/05/0…
随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根本原因.对于微服务庞大的业务,这必定会很耗时,而且也很难及时找到关键问题点. 本文将介绍一个 持续性能分析平台 Pyroscope,它能够帮助我们快速找到内存泄漏.CPU利用率高的代码. 什么是 Pyroscope? Pyroscope 是一个开源的持续性能分析平台.它能够帮你: 查找代码中的性能问…
升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.2 Spring Cloud Edgware SR4 => Spring Cloud Finchley.RELEASE Eureka ServerEureka Server 依赖更新 升级前: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-…
<蓝绿部署.红黑部署.AB测试.灰度发布.金丝雀发布.滚动发布的概念与区别> 最近公司项目在做架构升级,升级为 Spring Cloud,我们希望能够做到服务的灰度发布,根据访问量逐渐切换用新版本替换老版本,并且能够做到代码零入侵的,毕竟每次发布要修改代码真的不是什么好的体验,而且容易引出其它的非代码级别的错误导致无法发布成功.但是 Spring Cloud 在这一方面好像没有提供什么方案.因此我们在网上大范围的查找,终于找到了一款服务我们需求的灰度发布工具Nepxion Discovery.…
在spring cloud 2.x以后,由于zuul一直停滞在1.x版本,所以spring官方就自己开发了一个项目 Spring Cloud Gateway.作为spring cloud微服务的网关组件. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA spring cloud gateway 入门 根据官方的简介,它是spring mvc基础之上,旨在提供一个简单有效的…
本片我们就来认识下spring cloud中的zuul组件. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA zuul简介 关于zuul 其实在前面的内容中,我们已经搭建了一个微服务平台,也实现了该有的功能.但是一般的微服务架构中还会有api gateway.那么api gateway(网关)又是做什么用的呢? 1.简化客户端调用复杂度 在微服务架构模式下后端服务的实例数…
本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题.同时,微服务运行过程中还需要动态的修改配置参数.所以spring cloud config就是在spring cloud微服务架构中解决配置文件的管理,刷新,查看等问题的. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich…
spring cloud的hystrix还有一个配搭的库hystrix-dashboard,它是hystrix的一款监控工具,能直观的显示hystrix响应信息,请求成功率等.但是hystrix-dashboard只能查看单机和集群的信息,如果需要将多台的信息汇总起来的话就需要使用turbine. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA hystrix-dashb…
上篇文章里我们实现了spring cloud中的服务提供者和使用者.接下来我们就来看看spring cloud中微服务的其他组件. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, spring cloud Greenwich.SR2, IDE为 Intelli IDEA 熔断器 spring cloud架构成员中有一个叫"熔断器".微服务中一个服务通常存在多级调用情况,在这种情况下就出现了一些严重的问题.假如其中的一个服务故障了,那么调用这个服务的使用…
应用程序将收听EnvironmentChangeEvent,并以几种标准方式进行更改(用户可以以常规方式添加ApplicationListeners附加ApplicationListeners).当观察到EnvironmentChangeEvent时,它将有一个已更改的键值列表,应用程序将使用以下内容: 重新绑定上下文中的任何@ConfigurationProperties bean 为logging.level.*中的任何属性设置记录器级别 请注意,配置客户端不会通过默认轮询查找Environ…
由于各种原因,公司要对现有的营销产品进行微服务化,如果可以,则对公司所有产品逐步进行微服务化. 而本人将探索这条路,很艰难,但干劲十足.整个过会记录下来,以便以后查阅. 感谢公司!感谢领导! 相关书籍 https://book.douban.com/subject/26772677/ 技术栈 Spring cloud redis RabbitMq…
首先有必要了解一下什么是Zuul,它和Spring Cloud有什么关系. Zuul在Spring Cloud中承担着网关的职责,可以理解为客户端和服务端交互中的唯一通道.所有的客户端请求都会首先发送到网关,而后路由转发到对应的微服务.同时,Zuul还提供了诸如服务聚合.权限校验等,另外也对客户端与服务端的交互起到了解耦的作用. 我们可以通过一个具体的场景来理解一下.假设需要开发一个校园图书管理系统,在客户端可能发起登录.查看图书列表.进行订阅等请求,如下图所示: 而其中,即使是非本校的学生也可…
官网上给出的Spring Cloud Gateway特性如下图所示: 翻译过来就是: 基于 Spring Framework 5 ,Project Reactor 以及 Spring Boot 2.0 构建 路由能够匹配任何请求属性 Predicates和Filters可以区分路由生效 集成了断路器 继承了Spring Cloud DiscoveryClient 轻松编写Predicates和Filters 请求流控 路径重写 通过上面的图片可以看出Spring Cloud Gateway的主要…
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE…
https://blog.csdn.net/neosmith/article/details/53126924 通过源码可以看出,该工具类会获取所有网卡,依次进行遍历,取ip地址合理.索引值最小且不在忽略列表的网卡的ip地址作为结果.如果仍然没有找到合适的IP, 那么就将InetAddress.getLocalHost()做为最后的fallback方案.…
参照以前写的博客进行搭建配置中心集群 1.如果要使用 服务器端自动刷新,所有客户端同步功能.要先安装RabbitMQ 2.如果要使用自动加解密功能,要先安装JAVA JCE扩展.…
http://developer.51cto.com/art/201710/554633.htm Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多. 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的.从最初的开源软件云收藏来熟悉 Spring Boot,到项目中的慢慢使用,再到最后全面拥抱 Spring Cloud. 这篇文章给大家介绍我们使用 Spring Boot / Cloud 一年多的经验总结…
记录一下搭建 Spring Cloud 过程中踩过的一些坑,测试的东西断断续续已经弄了好多了,一直没有时间整理搭建过程,时间啊~时间~ Spring 版本 Spring Boot:2.0.6.RELEASE Spring Cloud:Finchley.SR2 多环境配置切换 使用 Spring Cloud 来处理 多配置的切换在开发中真是很常用,能有效提高效率.一些成熟的框架基本都有关于配置切换的解决方案,当然了 Spring Cloud 也不例外! 先看看我的配置文件结构: 配置文件通过后缀区…
通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eureka),服务治理(hystrix,ribbon)等.但是当我们开发新的应用时,我们是可以借助于sping-cloud-kubernetes组件为我们提供的服务发现.负载均衡等来摈弃像eureka这样的注册中心.本文主要通过构建两个spring cloud 服务来演示spring-cloud-ku…
前言:Spring Cloud Alibaba是目前主流的分布式微服务架构,本文主要讲解了在IDEA中如何搭建Spring Cloud Alibaba环境,以及介绍Spring Cloud Alibaba各个版本之间的关系和搭建Spring Cloud前的准备工作. Spring Cloud Alibaba官方文档(中文) Spring Cloud官网 前置准备 Spring Cloud Alibaba需要依赖 Java 环境运行,同时还需要配置 Maven 环境,确保是以下版本: JDK 1.…
dubbo由于是二进制的传输,占用带宽会更少springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决 springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级 dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研 但如果我选,我会用springcloud. 从公司整体规…