外行人都能看懂的SpringCloud,错过了血亏! https://www.cnblogs.com/Java3y/p/9540386.html
史上最简单的 SpringCloud 教程 | 终章 https://blog.csdn.net/forezp/article/details/70148833
springcloud学习资料汇总 http://www.ityouknow.com/springcloud/2016/12/30/springcloud-collect.html
1.跟我学Spring Cloud http://xujin.org/categories/%E8%B7%9F%E6%88%91%E5%AD%A6Spring-Cloud/
2.周立|Spring Cloud http://www.itmuch.com/categories/Spring-Cloud/
3.Spring Cloud基础教程(强烈推荐) http://blog.didispace.com/Spring-Cloud%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/
4.Spring Cloud系列文章 http://www.ityouknow.com/spring-cloud
5.史上最简单的 Spring Cloud 教程 http://blog.csdn.net/column/details/15197.html
6.liaokailin的专栏 http://blog.csdn.net/liaokailin/article/category/6212338
7.Spring Cloud系列 http://blog.csdn.net/column/details/17373.html
9. 一起来学Spring Cloud(F版) https://blog.battcn.com/tags/Finchley/
spring cloud config: 配置中心的配置会覆盖本地的配置
spring cloud config 统一配置中心 读取本地文件配置 https://blog.csdn.net/u010176542/article/details/80211947
Spring Cloud Config 使用SVN 和 git方式的相关配置 https://www.cnblogs.com/huxipeng/p/9674516.html
spring cloud config server 配置中心git示例 https://blog.csdn.net/forezp/article/details/70037291 http://www.ityouknow.com/springcloud/2017/05/22/springcloud-config-git.html
spring cloud config server使用svn来作为外部配置中心 https://www.jianshu.com/p/287b36596114 [路径说明] https://www.jianshu.com/p/287b36596114
配置中心svn示例和refresh http://www.ityouknow.com/springcloud/2017/05/23/springcloud-config-svn-refresh.html
Spring Cloud Config 使用本地配置文件 https://blog.csdn.net/sunbufu/article/details/79291746
整合最新版本actuator的refresh,health,info问题 https://blog.csdn.net/qq_27101653/article/details/80816036
Spring Cloud Config采用数据库存储配置内容 http://blog.didispace.com/spring-cloud-starter-edgware-3-1/
微服务下使用网关 Spring Cloud Gateway https://www.jianshu.com/p/1c942a8abe18
分布式配置中心
开源分布式配置中心选型 http://blog.zollty.com/b/archive/config-center-selection.html
SpringCloud系列:服务配置文件的进化历程(程序内置、程序外置、实时更新) https://my.oschina.net/gengkangkang/blog/1592169
SpringCloud系列:整合携程Apollo实现分布式配置中心(一)Apollo官方 官方安装Quick Start工程 分布式部署指南 整合1 https://my.oschina.net/gengkangkang/blog/1593812 整合2 https://blog.csdn.net/sinat_24798023/article/details/80239637 整合3 https://blog.csdn.net/myFirstCN/article/details/81608672
可支持的环境列表 添加自定义的环境 apollo配置中心增加环境的方法
Apollo配置中心整合spring cloud zuul https://cloud.tencent.com/info/b18ad6ed319b34f5acf335e5a676f69f.html
SpringCloud集成Apollo分布式配置中心 https://www.jianshu.com/p/5606483c7fbf
Spring Boot 2.0 整合携程Apollo配置中心 https://www.jianshu.com/p/23d695af7e80
SpringCloud系列:整合百度Disconf实现分布式配置中心 https://my.oschina.net/gengkangkang/blog/1593163
在Spring Cloud中实现降级之权重路由和标签路由(灰度升级办法) http://xujin.org/sc/sc-ribbon-demoted/
Spring Cloud 线上超时问题总结 https://juejin.im/post/5df206bcf265da33ee177ee6
分布式事务
Spring Cloud 分布式事务管理 https://blog.csdn.net/zyndev/article/details/79604395
消息最终一致性方案,基于rabbitmq的分布式事务解决方案 https://github.com/vvsuperman/coolmq
消息最终一致性方案,基于RocketMQ :https://blog.csdn.net/chunlongyu/article/details/53844393
Spring Cloud的分布式事务框架压测第一轮 http://springcloud.cn/view/374
阿里分布式事务中间件GTS在Spring Cloud上的应用实践 https://www.jianshu.com/p/37657d557183
LCN 分布式事务框架 https://github.com/codingapi/tx-lcn 教程: https://blog.csdn.net/zhangxing52077/article/details/81587988
Spring Cloud 分布式事务管理:
基于XA协议的两阶段提交: XA中大致分为两部分, 事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA目前在商业数据库支持的比较理想,在mysql数据库中支持的不太理想,mysql的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致。许多nosql也没有支持XA,这让XA的应用场景变得非常狭隘。
消息事务+最终一致性: 基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功成功并且对外发消息成功,要么两者都失败,开源的RocketMQ就支持这一特性. 该方案采用最终一致的,牺牲了一致性,换来了性能的大幅度提升。存在造成数据不一致的风险 .
TCC编程模式: 是两阶段提交的一个变种。TCC提供了一个编程框架,将整个业务逻辑分为三块:Try、Confirm和Cancel三个操作。以在线下单为例,Try阶段会去扣库存,Confirm阶段则是去更新订单状态,如果更新订单失败,则进入Cancel阶段,会去恢复库存。总之,TCC就是通过代码人为实现了两阶段提交,不同的业务场景所写的代码都不一样,复杂度也不一样,因此,这种模式并不能很好地被复用。
tx-lcn: 5.x才开始支持spring boot 2.0,LCN有比较全面的文档,包括原理介绍、使用说明、视频讲解,演示demo等,而且LCN对于业务代码的入侵性极小,开发者使用起来也比较方便。不过LCN需要单独部署txmanager服务。
ByteTCC: 是一个基于TCC(Try/Confirm/Cancel)机制的分布式事务管理器。兼容JTA,可以很好的与EJB、Spring等容器进行集成。
tcc-transaction: tcc-transaction在GitHub上有完整的使用说明文档,并且提供了基于dubbo、http等方式的demo,对于使用者来说比较友好。在使用上通过注解的形式编写分布式事务的confirm与cancel代码,具有代码入侵性较小的特点。带宽占用将成为瓶颈。
Hmily: 在压力测试中,线程大部分时间处于阻塞状态,多数线程都处于等待锁的状态中。
EasyTransaction: 基于TCC、补偿以及消息队列等多种形式实现了分布式事务,不同的实现形式可以在同一个分布式事务中使用,开发者可以选择自己适用的场景开发。但是,EasyTransaction示例代码只有单元测试代码,demo代码不及以上几个框架,对于开发者不够易用。EasyTransaction对于代码的入侵性比较大,不及其他框架方便。
spring boot 多实例启动
方式1:在IDEA上点击Application右边的下三角,弹出选项后,点击Edit Configuration,去掉Single instance only(低版本的选择),或者选择All parallel run(允许并行运行,高版本)。然后改变端口,不需要方式2的,直接在Override paramters加上server.port,xxxx配置就好。
方式3: 如果上面不选择,All parallel run,那么可以直接复制一份配置出来,修改端口就好。
方式2: https://blog.csdn.net/forezp/article/details/76408139
SpringCloud系列教程 https://www.geekdigging.com/category/springcloud/
2小时学会springboot https://blog.csdn.net/forezp/article/details/61472783
查看原文: https://blog.csdn.net/forezp/article/details/70148833
Spring Cloud工具框架
- Spring Cloud Config 配置中心,利用 Git 集中管理程序的配置。
- Spring Cloud Netflix 集成众多Netflix的开源软件。
- Spring Cloud Netflix Eureka 服务中心(类似于管家的概念,需要什么直接从这里取,就可以了),一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
- Spring Cloud Netflix Hystrix 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
- Spring Cloud Netflix Zuul 网关,是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Web 网站后端所有请求的前门。
- Spring Cloud Netflix Archaius 配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
- Spring Cloud Netflix Ribbon 负载均衡。
- Spring Cloud Netflix Fegin REST客户端。
- Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化。
- Spring Cloud for Cloud Foundry 利用 Pivotal Cloudfoundry 集成你的应用程序。
- Spring Cloud Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。
- Spring Cloud Cluster 集群工具,基于 Zookeeper, Redis, Hazelcast, Consul 实现的领导选举和平民状态模式的抽象和实现。
- Spring Cloud Consul 基于 Hashicorp Consul 实现的服务发现和配置管理。
- Spring Cloud Security 安全控制,在 Zuul 代理中为 OAuth2 REST 客户端和认证头转发提供负载均衡。
- Spring Cloud Sleuth 分布式链路监控,SpringCloud 应用的分布式追踪系统,和 Zipkin,HTrace,ELK 兼容。
- Spring Cloud Data Flow 一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。
- Spring Cloud Stream 消息组件,基于 Redis,Rabbit,Kafka 实现的消息微服务,简单声明模型用以在 Spring Cloud 应用中收发消息。
- Spring Cloud Stream App Starters 基于 Spring Boot 为外部系统提供 Spring 的集成。
- Spring Cloud Task 短生命周期的微服务,为 Spring Booot 应用简单声明添加功能和非功能特性。
- Spring Cloud Task App Starters。
- Spring Cloud Zookeeper 服务发现和配置管理基于 Apache Zookeeper。
- Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。
- Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端像数据库和消息经纪服务。
- Spring Cloud Starters (项目已经终止并且在 Angel.SR2 后的版本和其他项目合并)
- Spring Cloud CLI 命令行工具,插件用 Groovy 快速的创建 Spring Cloud 组件应用。
CAP理论:
就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡
C A 满足的情况下,P不能满足的原因:
数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足
CP 满足的情况下,A不能满足的原因:
数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以A就不满足
AP 满足的情况下,C不能满足的原因:
机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足
Spring Cloud入门-汇总篇(Hoxton版本)
https://blog.csdn.net/ThinkWon/article/details/103786588
Finchley版本 https://www.fangzhipeng.com/spring-cloud.html 更多资料
Spring Cloud Finchley; Spring Boot 2.0.3
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
- 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)(Finchley版本)
- 史上最简单的SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix Turbine)(Finchley版本)
上面教程补充:
待增加
进阶篇
源码篇:
番外篇:
- 如何使用MongoDB+Springboot实现分布式ID?
- 如何在springcloud分布式系统中实现分布式锁?
- 如何用Redlock实现分布式锁
- 如何在IDEA启动多个Spring Boot工程实例
- JWT如何在Spring Cloud微服务系统中在服务相互调时传递
给数据库带来的挑战
每个微服务都有自己独立的数据库,那么后台管理的联合查询怎么处理?这是大家普遍遇到的一个问题。
有如下三种处理方案:
1. 严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法。
2. 将业务相关的表放到一个库中,将业务无关的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库各种切换导致后台统计难以实现,是一个折中的方案。
3. 数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到 NoSQL 数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用 Mongodb、Hbase 等。
三种方案在不同的公司我都使用过,第一种方案适合业务较为简单的小公司;第二种方案,适合想在原有系统之上,慢慢演化为微服务架构的公司;第三种适合大型高并发的互联网公司。
环境资源的命名规则由以下的三个参数确定:
{application}映射到Config客户端的spring.application.name属性
{profile}映射到Config客户端的spring.profiles.active属性,可以用来区分环境,比如dev,test,produce等等
{label}映射到Git服务器的commit id,分支名称或者tag,默认值为master
仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:
1 2 3 4 5 |
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties |
举个栗子:
我在配置中心的目录下放置文件:
1 2 3 4 |
cloud-config-rd.properties cloud-config-dev.properties cloud-config-test.properties cloud-config-test.properties |
以cloud-config-rd.properties为例子,它的application是cloud-config,profile是rd.client会根据填写的参数来选择读取对应的配置。
实践碰到的问题:
第一篇: 服务的注册与发现Eureka(Finchley版本)
- spring-boot-starter-parent要使用2.1.1.RELEASE版本,否则启动不了
第十二篇: 断路器监控(Hystrix Dashboard)(Finchley版本)
- 缺少配置
1234567891011#断路器监控(Hystrix Dashboard) https://blog.csdn.net/forezp/article/details/81041113 ,#文章没有加入下面的信息,导致不成功#http://localhost:8762/actuator/hystrix.streammanagement:endpoints:web:exposure:include: "*"cors:allowed-origins: "*"allowed-methods: "*"