本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们的业务集群结构是这样的: 不同 Region,使用不同的 Eureka 集群管理,不同 Region 之间不互相访问. 同一 Region 内,可能有不同的业务集群,不同业务集群之间也不互相访问,共用同一套业务集群. 同一业务集群内可以随意访问,同时同一业务集群会做跨可用区的容灾. 在我们这里的抽象中,zone…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Eureka Server 配置是 Eureka Server 需要的一些配置,包括之前多次提到的定时检查实例过期的配置,自我保护相关的配置,同一 zone 内集群相关的配置和跨 zone 相关的配置.在 Spring Cloud 中,Eureka 客户端配置以 eureka.server 开头,对应配置类为 Eur…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Eureka 目前 1.x 版本还在更新,但是应该不会更新新的功能了,只是对现有功能进行维护,升级并兼容所需的依赖. Eureka 2.x 已经胎死腹中了.但是,这也不代表 Eureka 就是不能用了.如果你需要一个简便易于部署的注册中心,Eureka 还是一个很好的选择.云服务环境中,基本上所有实例地址和微服务名称…
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ Spring Cloud 官方文档说了,它是一个完整的微服务体系,用户可以通过使用 Spring Cloud 快速搭建一个自己的微服务系统.那么 Spring Cloud 究竟是如何使用的呢?他到底有哪些组件? spring-cloud-commons组件里面,就有 Spring Cloud 默认提供的所有组件功…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,将进入我们升级之路的又一大模块,即网关模块.网关模块我们废弃了已经进入维护状态的 zuul,选用了 Spring Cloud Gateway 作为内部网关.为何选择 Spring Cloud Gateway 而不是 nginx 还有 Kong 的原因是: 项目组对于 Java 更加熟悉,并且对于 Project Reactor 异步编程也比较熟悉,这个比较重要 需要在网关中使用我…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford spring-cloud-common 不再是一个纯依赖的项目,这个模块包括: spring-framework-common 的依赖 同步与异步微服务公共的依赖 同步与异步微服务公共的框架代码改造,这个我们后面分析框架以及我们设计的修改的时候,会详细分析,这里先跳过 同步与异步微服务公共的依赖包括: 代码请参考:h…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Log4j2 异步日志配置,防止日志过多的时候,成为性能瓶颈.这里简单说一下 Log4j2 异步日志的原理:Log4j2 异步日志基于高性能数据结构 Disruptor,Disruptor 是一个环形 buffer,做了很多性能优化(具体原理可以参考我的另一系列:高并发数据结构(disruptor)),Lo…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在开始编写我们自己的日志 Filter 之前,还有一个问题我想在这里和大家分享,即在 Spring Cloud Gateway 中可能发生链路信息丢失的问题. 主要冲突 - Project Reactor 与 Java Logger MDC 之间的设计冲突 Poject Reactor 是基于异步响应式设计的编程模式的实现,它的主要实现思路是先编写执行链路,最后 sub 执行整个链路.但…
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 上图中演示了一个非常简单的微服务架构: 微服务会向注册中心进行注册. 微服务从注册中心读取服务实例列表. 基于读取到的服务实例列表,微服务之间互相调用. 外部访问通过统一的 API 网关. API 网关从注册中心读取服务实例列表,根据访问路径调用相应的微服务进行访问. 在这个微服务架构中的每个进程需要实现的功能都…
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 之前我们提到了,不同的集群,使用的是同一套 Eureka 集群. 我们会动态在线发布每个微服务,在 K8s 的环境下,我们一般使用 ReplicaSet 将我们的微服务部署成无状态的微服务实例(参考:ReplicaSet):在这种情况下,新的微服务实例地址(ip)和原来的地址一般是不一样的.在这种情况下,我们想实…