SpringCloud Alibaba 学习圣经,10万字实现 SpringCloud 自由

Posted 40岁资深老架构师尼恩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Alibaba 学习圣经,10万字实现 SpringCloud 自由相关的知识,希望对你有一定的参考价值。

40岁老架构师尼恩的掏心窝:

现在拿到offer超级难,甚至连面试电话,一个都搞不到。

尼恩的技术社群中(50+),很多小伙伴凭借 “左手云原生+右手大数据 +SpringCloud Alibaba 微服务“三大绝活,拿到了offer,并且是非常优质的offer,据说年终奖都足足18个月 ,非常令人羡慕。

问题是:“左手云原生+右手大数据 +SpringCloud Alibaba 微服务“ 内容非常多,实操的环境非常复杂,底层原理很深

米饭要一口一口的吃,不能急。在这里,尼恩从架构师视角出发,左手云原生+右手大数据 +SpringCloud Alibaba 微服务 核心原理做一个宏观的介绍。

由于内容确实太多, 所以写多个pdf 电子书:

(1) Docker 学习圣经 》PDF (V1已经完成)

(2) 《 SpringCloud Alibaba 微服务 学习圣经 》PDF (V1已经完成)

(3) 《 K8S 学习圣经 》PDF (coding…)

(4) 《 flink + hbase 学习圣经 》PDF (planning …)

以上学习圣经,并且后续会持续升级,从V1版本一直迭代发布。 就像咱们的《尼恩 Java 面试宝典》一样, 已经迭代到V60啦。

40岁老架构师尼恩的掏心窝: 通过一系列的学习圣经,带大家穿透“左手云原生+右手大数据 +SpringCloud Alibaba 微服务“ ,实现技术 自由 ,走向颠覆人生,让大家不迷路。

本PDF 《SpringCloud Alibaba 微服务 学习圣经》完整版PDF的 V1版本,后面会持续迭代和升级。供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

以上学习圣经的 基础知识是 尼恩的 高并发三部曲,建议在看 学习圣经之前,一定把尼恩的 Java高并发三部曲过一遍,切记,切记。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从这里获取:码云

《 SpringCloud Alibaba 微服务 学习圣经 》PDF 封面

《 SpringCloud Alibaba 微服务 学习圣经 》目录

  • 40岁老架构师尼恩的掏心窝:
  • 当前版本V1
  • 一键导入 SpringCloud 开发环境 (地表最强)
    • 环境准备
    • 一键导入OR自己折腾
    • 随书源码 crazy-springcloud 脚手架涉以及基础中间件
  • 微服务 分布式系统的架构12次演进
    • 微服务 分布式系统的几个基础概念
    • 架构演进1:单机架构
    • 架构演进2:引入缓存架构
    • 架构演进3:接入层引入反向代理实现负载均衡
    • 架构演进4:数据库读写分离
    • 架构演进5:数据库按业务分库
    • 架构演进6:使用LVS或F5接入层负载均衡
    • 架构演进7:通过DNS轮询实现机房间的负载均衡
    • 架构演进8:引入NoSQL数据库和搜索引擎等技术
    • 架构演进9:大应用拆分为微服务
    • 架构演进10:引入企业服务总线ESB对微服务进行编排
    • 架构演进11:引入容器化技术实现动态扩容和缩容
    • 架构演进12:以云平台承载系统
    • 架构演进的涉及的核心知识
  • SpringCloud netflix 入门
    • SpringCloud 开发脚手架
    • 启动Eureka Server 注册中心
    • 启动Config 配置中心
      • config-server 服务
    • 微服务入门案例
    • uaa-provider 微服务提供者
      • uaa-provider 实现一个Rest接口
      • uaa-provider的运行结果
    • demo-provider 完成RPC远程调用
      • REST服务的本地代理接口
      • 通过REST服务的本地代理接口,进行RPC调用
      • 启动demo-provider
      • 通过swagger 执行RPC操作
  • SpringCloud Eureka 服务注册
  • SpringCloud Config 统一配置
  • Nacos 服务注册+ 统一配置
    • 1、Nacos 优势
      • 1.1 与eureka对比
      • 1.2 与springcloud config 对比
        • 三大优势:
    • 2、Spring Cloud Alibaba 套件
      • Spring Cloud Alibaba 套件和Spring Cloud Netflix套件类比
    • 3、Nacos 的架构和安装
      • 3.1 Nacos 的架构
      • 3.2 Nacos Server 的下载和安装
    • 4、Nacos Server 的运行
      • 4.1两种模式
      • 4.2 standalone 模式
      • 4.3 cluster 模式
        • cluster 模式需要依赖 mysql,然后改两个配置文件:
      • 4.4 Nacos Server 的配置数据是存在哪里呢?
    • 5、实战1:使用Nacos作为注册中心
      • 实战的工程
      • 5.1 如何使用Nacos Client组件
        • 首先引入 Spring Cloud Alibaba 的 BOM
      • 5.2 演示的模块结构
      • 5.3 provider 微服务
        • step1:在 provider 和 consumer 的 pom 添加以下依赖:
        • step2:启动类
        • step3:服务提供者的 Rest 服务接口
        • step4:配置文件
        • step5:启动之后,通过swagger UI访问:
      • 5.4 Consumer 微服务演示RPC远程调用
        • 消费者的controller 类
        • 消费者配置文件
        • 通过swagger UI访问消费者:
      • 5.5涉及到的演示地址:
      • 5.6 Nacos Console
    • 6、实战2:使用Nacos作为配置中心
      • 6.1 基本概念
        • 1)Profile
        • 2)Data ID
        • 3)Group
      • 6.2 通过Nacos的console 去增加配置
        • 1)nacos-config-demo-dev.yaml
        • 2)nacos-config-demo-sit.yaml
      • 6.3 使用Nacos Config Client组件
        • 1)加载nacos config 的客户端依赖:
        • 启动类
        • 控制类:
        • 2)bootstrap配置文件
      • 6.4 测试结果
      • 6.4 可以端如何与服务端的配置文件相互对应
    • 7、配置的隔离
    • 8、nacos集群搭建
      • IP规划
      • 集群的使用
  • Nacos 高可用架构与实操
    • 客户端高可用
      • 客户端高可用的方式一:配置多个nacos-server
      • Nacos Java Client通用参数
      • 客户端高可用的方式二:本地缓存文件 Failover 机制
        • 本地缓存文件 Failover 机制
        • 客户端Naming通用参数
    • Nacos两种健康检查模式
      • agent上报模式
      • 服务端主动检测
      • 临时实例
        • 注册实例支持ephemeral字段
        • 临时实例和持久化实例区别
    • Nacos Server运行模式
      • Nacos CP/AP模式设定
      • Nacos CP/AP模式切换
    • AP/CP的配套一致性协议
      • AP模式下的distro 协议
      • CP模式下的raft协议
    • 集群内部的特殊的心跳同步服务
    • 集群部署模式高可用
      • 节点数量
      • 多可用区部署
      • 部署模式
      • 高可用nacos的部署架构
      • 高可用nacos的部署实操
    • 总结
  • SpringCloud Feign 实现RPC 远程调用
  • SpringCloud + Dubbo 实现RPC 远程调用
    • 大背景:全链路异步化的大趋势来了
    • SpringCloud + Dubbo 完成 RPC 异步
    • Dubbo3应用的宏观架构
    • Dubbo3 应用架构的核心组件
    • SpringBoot整合Dubbo3.0基础准备
    • SpringCloud+Nacos+Dubbo3.0
      • 版本说明
      • 项目结构介绍
        • 1、dubbo的依赖的坐标
        • 2、 注册中心的依赖的坐标
      • SpringBoot整合Dubbo3.0大致步骤
      • 模块结构
      • Dubbo微服务注册发现的相关配置
      • 命名空间隔离
    • 微服务yml配置
    • common-service 模块
    • 服务提供者实操:dubbo-provider 服务
      • pom依赖
      • 服务实现类
      • dubbo和Feign的一个不同
      • Provider的Dubbo+Nacos配置文件
      • 启动类 加上@EnableDubbo 注解
      • 启动、体验Provider
      • 在Nacos查看Dubbo服务的注册情况
    • 服务消费者实操:dubbo-consumer 服务
    • consumer模块
      • 消费者实现类
      • 消费者Dubbo+Nacos配置文件
      • 启动类 加上@EnableDubbo 注解
      • 启动、体验 Consumer
      • 在Nacos查看Dubbo服务的注册情况
    • Feign+Dubbo性能的对比测试
      • Dubbo比Feign高10倍以上的本质
      • Dubbo 与 SpringCloud 的通信 Openfeign的区别
        • 1、协议支持方面
        • 2、通信性能方面
        • 3、线程模型方面
    • SpringCloud + Dubbo RPC 的集成价值
  • hystrix 服务保护
  • Sentinel 服务保护
    • sentinel 基本概念
    • 1、什么是Sentinel:
      • Sentinel 具有以下特征:
      • Sentinel主要特性:
      • Sentinel 的使用
      • Sentinel中的管理控制台
        • 1 获取 Sentinel 控制台
        • 2 sentinel服务启动
      • 客户端能接入控制台
      • Sentinel与Hystrix的区别
    • 2、使用 Sentinel 来进行熔断与限流
      • 1)定义资源
        • 资源注解@SentinelResource
        • @SentinelResource 注解
          • fallback 函数签名和位置要求:
          • defaultFallback 函数签名要求:
      • 2)定义规则
    • 3、sentinel 熔断降级
      • 1)什么是熔断降级
      • 2)熔断降级规则
      • 3)几种降级策略
      • 4)熔断降级代码实现
      • 5)控制台降级规则
      • 6)与Hystrix的熔断对比:
    • 4、Sentinel 流控(限流)
      • 基本的参数
      • 流控的几种 strategy:
      • 4.1 直接失败模式
        • 使用API进行资源定义
        • 代码限流规则
        • 网页限流规则配置
        • 测试
      • 4.2 关联模式
        • 使用注解进行资源定义
        • 代码配置关联限流规则
        • 网页限流规则配置
        • 测试
      • 4.3 Warm up(预热)模式
        • 使用注解定义资源
        • 代码限流规则
        • 网页限流规则配置
        • 通过jmeter进行测试
      • 4.4 排队等待模式
        • 示例
        • 使用注解定义资源
        • 代码限流规则
        • 网页限流规则配置
        • 通过jmeter进行测试
      • 4.5 热点规则 (ParamFlowRule)
        • 自定义资源
        • 限流规则代码:
        • 网页限流规则配置
    • 5、Sentinel 系统保护
      • 系统保护的目的
      • 系统保护规则的应用
      • 网页限流规则配置
    • 6、黑白名单规则
      • 访问控制规则 (AuthorityRule)
    • 7、如何定义资源
      • 方式一:主流框架的默认适配
      • 方式二:抛出异常的方式定义资源
      • 方式三:返回布尔值方式定义资源
      • 方式四:注解方式定义资源
      • 方式五:异步调用支持
    • 8、核心组件
      • Resource
      • Context
        • Context的创建与销毁
      • Entry
      • DefaultNode
      • StatisticNode
    • 9、插槽Slot
      • NodeSelectorSlot
      • 调用链树
      • 构造树干
        • 创建context
        • 创建Entry
        • 退出Entry
      • 构造叶子节点
        • 保存子节点
      • ClusterBuilderSlot
      • StatistcSlot
      • SystemSlot
      • AuthoritySlot
      • FlowSlot
      • DegradeSlot
      • DefaultProcessorSlotChain
      • slot总结
    • 10、sentinel滑动窗口实现原理
      • 1)基本原理
      • 2)sentinel使用滑动窗口都统计啥
      • 3)滑动窗口源码实现
        • 3.1)MetricBucket
        • 3.2)WindowWrap
        • 3.3)LeapArray
  • Zuul 微服务网关
  • Webflux 响应式编程
    • WebFlux 学习前言
    • WebFlux 增删改查完整实战 demo
      • Dao层 (又称 repository 层)
      • entity(又称 PO对象)
      • Dao 实现类
      • Service服务层
      • Controller控制层
      • Mono
      • Flux
    • 使用配置模式进行WebFlux 接口开发
    • 处理器类 Handler
    • 路由配置
    • WebFlux集成Swagger
      • maven依赖
      • swagger 配置
    • WebFlux 测试
      • 配置模式的 WebFlux Rest接口测试
      • 注解模式的WebFlux Rest接口测试
      • swagger 增加界面
    • 配置大全
      • 静态资源配置
      • WebFluxSecurity配置
      • WebSession配置
      • 文件上传配置
    • WebFlux 执行流程
    • WebFlux学习提示
  • Spring Cloud Gateway 微服务网关
    • 1、SpringCloud Gateway 简介
      • 1.1 本文姊妹篇 《Flux 和 Mono 、reactor实战 (史上最全)》
      • 1.2 SpringCloud Gateway 特征
      • 1.3 SpringCloud Gateway和架构
        • 1)SpringCloud Zuul的IO模型
        • 2)Webflux 服务器
        • 3)Spring Cloud Gateway的处理流程
    • 2、路由配置方式
      • 2.1 基础URI路由配置方式
      • 2.2 基于代码的路由配置方式
      • 2.3 和注册中心相结合的路由配置方式
    • 3、路由 匹配规则
      • 说明:
      • 3.1 Predicate 断言条件(转发规则)介绍
        • 1)通过请求参数匹配
        • 2)通过 Header 属性匹配
        • 3)通过 Cookie 匹配
        • 4)通过 Host 匹配
        • 5)通过请求方式匹配
        • 6)通过请求路径匹配
        • 7)通过请求 ip 地址进行匹配
        • 8)组合使用
      • 3.2 过滤器规则(Filter)
        • 过滤器规则(Filter)
        • PrefixPath
        • RedirectTo
        • RemoveRequestHeader
      • RemoveResponseHeader
        • RemoveRequestParameter
        • RewritePath
        • SetPath
        • SetRequestHeader
        • SetStatus
        • StripPrefix
        • RequestSize
        • Default-filters
      • 3.3 通过代码进行配置
      • 3.2 实现熔断降级
    • 4、高级配置
      • 4.1 分布式限流
      • 4.2 健康检查配置
        • maven依赖
        • 配置文件
      • 4.3 统一配置跨域请求:
    • 5、整合Nacos
      • maven依赖
      • 服务发现配置:从Nacos获取微服务提供者清单
      • nacos实现动态配置
      • 服务发现路由predicates和filters的自定义定义
      • 为注册中心路由配置断言和过滤器
    • 6、整合Swagger聚合微服务系统API文档
      • maven依赖
      • 配置文件
      • 效果:
    • 7、Gatway 网关的过滤器开发
      • 7.1 过滤器的执行次序
      • 7.2定义全局过滤器
      • 7.3定义局部过滤器
    • 8、整合Sentinel完成流控和降级
      • maven依赖
      • 配置文件
      • 限流规则通用配置
      • 限流规则设置
      • 网关限流参数
  • SpringBoot Admin 进行微服务实例的监控
    • 使用SpringBoot Admin 进行日志的记录
    • 1、SpringBoot Admin 简介
    • 2、使用 SpringBoot Admin 监控服务
      • 2.1 导入依赖
      • 2.2 配置yml
      • 2.3 集成spring security
      • 2.4 启动器类
      • 2.5、测试
    • 3、actuator 启用和暴露端点
      • 3.1 启用端点
      • 3.2 暴露端点
    • 4、微服务Provider改造
      • 4.1 导入依赖
      • 4.2 配置yml
      • 使用context-path
      • 加上spring security密码
    • 5、admin实现在线日志查看
      • 5.1、添加jar包
      • 5.2 在application.yml平级文件夹中添加logback-spring.xml配置文件
      • 5.3 log.path 如何使用环境变量呢?
      • 5.4 actuator的配置
    • 测试结果
      • 1.不暴露端点 测试
      • 2.正常情况
    • 6、admin与Nacos(或Eureka)结合的好处
  • ELK日志平台(elasticsearch +logstash+kibana)原理和实操
    • ELK的关系
      • ELK优点
      • 简单的ELK日志平台
      • ELK改进之引入Filebeat
      • ELK的应用场景
      • ELK的不足
        • es的资源占用
    • Elasticsearch概述
    • logstash概述
      • logstash作用:
      • logstash的架构:
        • Input(输入):
        • Filter(过滤器)
        • Output(输出):
      • Logstash的角色与不足
    • filebeat介绍
      • filebeat和beats的关系
      • Filebeat是如何工作的
      • Filebeat下载页面
      • Filebeat文件夹结构
        • Filebeat启动命令
      • 配置inputs
        • Log input
      • 配置项
        • 管理多行消息
      • 配置Logstash output
    • 一键安装 es+logstash+ kibana
      • 对应的镜像版本
      • docker编码文件
      • 访问kibana
    • 读取filebeat-输出到es集群
    • 在kibana显示的效果
    • 使用filebeat发送日志
      • 制作filebeat镜像
      • 制作基础的unbantu镜像
      • 推送镜像到dockerhub
      • 制作filebeat镜像
        • dockerfile
      • 推送镜像到dockerhub
    • example-application微服务的filebeat配置:
      • filebeat.yml的参考配置:
    • input.yml配置:
    • 修改dockerfile
    • 一键发布
    • 启动之后
    • message-dispatcher微服务的日志
      • 查看日志索引
    • logstash 详解
      • stash第一个事件
        • Logstash的核心流程的三个环节
      • logstash数值类型
      • logstash 条件判断
      • logstash 比较运算符
      • 数据输入环节
      • stdin
      • file
      • syslogs
      • beats
      • kafka
    • 数据处理环节
      • grok解析文本并构造
      • date日期解析
      • mutate字段转换
    • covert类型转换
      • split
      • merge
      • rename
      • remove_field:移除字段
      • join
      • geoip
      • ruby
      • urldecode
      • kv
      • useragent
    • 数据输出
      • stdout
      • file
      • kafka
      • elasticseach
    • Kibana查看应用日志
      • 1 查看应用日志
      • 2 如何搜索日志
      • 3 如何查看指定时间的应用日志
      • 4 如何定位错误日志
      • 5 如何展开显示日志
    • es的安全认证
    • 配置 elk的ElastAlert 预警插件
  • Prometheus+Grafana 检测预警
    • 什么是性能可观测
      • 系统监控的核心指标
        • 系统性能指标
        • 资源性能指标
    • 什么是prometheus
      • prometheus的运行原理
      • prometheus主要特点
    • 什么是 Grafana
    • Prometheus的体系结构
    • Prometheus+Grafana分层架构
      • Promcthcus体系涉及的组件
      • 如何收集度量值
    • 指标类型
      • 计数器
      • 仪表盘
      • 直方图
      • Summary
    • 指标摘要及聚合
      • 指标摘要
      • 指标聚合
    • 一键安装 prometheus
      • bridge网络管理
      • 创建库
      • docker编排文件
      • 一键安装 prometheus的脚本
      • 进入 prometheus
      • 进入 grafana
    • Prometheus+Grafana监控SpringBoot项目JVM信息
      • SpringBoot项目配置JVM采集
      • Prometheus配置
    • 配置grafana监控Linux系统
      • 使用 Exporter 收集指标
      • inux直接安装node_exporter
      • 使用Docker容器安装node_exporter
      • 创建一个任务定时扫描暴露的指标信息
      • 创建仪表盘grafna
      • 导入Dashboard
    • 选择数据源为Prometheus
    • 配置grafana监控SpringBoot应用
      • 主要步骤
      • 找jvm的 dashboard
      • JVM Quarkus 面板
    • Prometheus数据模型
      • time-series 时间序列值
      • Sample样本值
      • metrics name指标名称
      • label标签
      • Notation(符号)
      • TSDB时序数据库
    • 度量指标类型
      • Counter(计数器)类型
      • Gauge(计量器、测量器)
      • Histogram(柱状图、直方图)
      • Summary
      • Summary 和 Histogram 的区分
    • 学习 PromQL
      • 数据模型
      • PromQL 入门
      • HTTP API
    • 告警和通知
      • 配置告警规则
      • 使用 Alertmanager 发送告警通知
    • 服务发现
      • 为什么需要服务发现
      • prometheus目前支持的服务发现类型
    • 基于文件的服务发现方式
      • file_sd_configs
    • 基于consul 的服务发现
      • 什么是基于consul的服务发现
      • Prometheus配置
    • 基于eureka的服务发现
      • eureka 客户端暴露出 prometheus 端口
      • prometheus配置文件
    • 基于nacos的服务发现
      • docker 编排文件
      • 生产的配置文件
      • 修改prometheus配置文件
      • 修改springboot项目配置文件
  • 全方位 Springcloud 性能调优
    • Servlet 容器 优化
    • Zuul配置 优化
    • Feign 配置优化
    • hystrix配置 优化
    • ribbon 优化
  • 高质量实操:SpringCloud 高并发实战案例
    • 1、超高并发10Wqps秒杀实操
    • 2、超高并发100Wqps车联网实操
    • 3、N多其他的超高并发实操项目
  • 技术自由的实现路径:
    • 实现你的 架构自由:
    • 实现你的 响应式 自由:
    • 实现你的 spring cloud 自由:
    • 实现你的 linux 自由:
    • 实现你的 网络 自由:
    • 实现你的 分布式锁 自由:
    • 实现你的 王者组件 自由:
    • 实现你的 面试题 自由:
  • 参考文献

当前版本V1

此书会持续迭代,最新版本,请关注公众号:技术自由圈

一键导入 SpringCloud 开发环境 (地表最强)

SpringCloud + docker 学习环境非常复杂,尼恩搞这个 前前后后起码 折腾了一周 ,应该还不止

其中,很多头疼的工作,包括linux内核升级、磁盘扩容等等, 苦不堪言。

现在把这个环境,以虚拟机box镜像的方式,导出来直接给大家,

大家一键导入后,直接享受SpringCloud + docker 的实操,可以说,爽到不要不要的。

以上软件和 尼恩个人的虚拟机box镜像,可以找尼恩获取。

环境准备

硬件总体要求,可以参考尼恩的本地硬件情况:

1 硬件要求。

本文硬件总体要求如下表:

序号硬件要求
1CPU至少2核
2内存至少16G
3硬盘至少100G磁盘空间

2 本地虚拟机环境

软件版本
Winwin10以上
virtual box6以上
vagrant2以上

一键导入OR自己折腾

大家一键导入尼恩的虚拟机环境,里边zookeeper、nacos、docker、k8s等组件都已经预装,直接享受SpringCloud + docker 的实操,可以说,爽到不要不要的。

当然,如果想自己折腾, 也可以按照的步骤来哈。

工欲善其事 必先利其器
地表最强 开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
地表最强 热部署:java SpringBoot SpringCloud 热部署 热加载 热调试
地表最强 发请求工具(再见吧, PostMan ):IDEA HTTP Client(史上最全)
地表最强 PPT 小工具: 屌炸天,像写代码一样写PPT
无编程不创客,无编程不创客,一大波编程高手正在疯狂创客圈交流、学习中! 找组织,GO

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从下面的链接获取:语雀 或者 码云

随书源码 crazy-springcloud 脚手架涉以及基础中间件

本PDF的随书源码仓库,就是尼恩的 《Java 高并发核心编程 卷3 加强版,老版本为 SpringCloud Nginx 高并发核心编程》一书的源码

也是尼恩的一个微服务开发脚手架 crazy-springcloud,其大致的模块和功能具体如下:

crazymaker-server     --  根项目
│  ├─cloud-center     --  微服务的基础设施中心
│  │  ├─cloud-eureka      --  注册中心
│  │  ├─cloud-config      --  配置中心
│  │  ├─cloud-zuul        --  网关服务
│  │  ├─cloud-zipkin      -- 监控中心
│  ├─crazymaker-base  -- 公共基础依赖模块
│  │  ├─base-common     -- 普通的公共依赖,如 utils 类的公共方法
│  │  ├─base-redis      -- 公共的 redis 操作模块 
│  │  ├─base-zookeeper  -- 公共的 zookeeper 操作模块
│  │  ├─base-session    -- 分布式 session 模块
│  │  ├─base-auth       -- 基于 JWT + SpringSecurity 的用户凭证与认证模块
│  │  ├─base-runtime    -- 各 provider 的运行时公共依赖,装配的一些通用 Spring IOC Bean 实例
│  ├─crazymaker-uaa   --业务模块: 用户认证与授权
│  │  ├─uaa-api        -- 用户 DTO、Constants 等
│  │  ├─uaa-client     --  用户服务的 Feign 远程客户端
│  │  ├─uaa-provider   -- 用户认证与权限的实现,包含controller 层、service层、dao层的代码实现
│  ├─crazymaker-seckill  --业务模块: 秒杀练习
│  │  ├─seckill-api        -- 秒杀 DTO、Constants 等
│  │  ├─seckill-client     -- 秒杀服务的 Feign 远程调用模块
│  │  ├─seckill-provider   -- 秒杀服务核心实现,包含controller层、service层、dao层的代码实现
│  ├─crazymaker-demo    --业务模块: 练习演示
│  │  ├─demo-api        -- 演示模块的 DTO、Constants 等
│  │  ├─demo-client     -- 演示模块的 Feign 远程调用模块
│  │  ├─demo-provider   -- 演示模块的核心实现,包含controller层、service层、dao层的代码实现

基于 crazy-springcloud 脚手架(其他的脚手架也类似)的微服务开发和自验证过程中,涉及到的基础中间件大致如下:

(1)ZooKeeper (虚拟机中已经预装)

ZooKeeper 是一个分布式的、开放源码的分布式协调应用程序,是大数据框架 Hadoop 和 Hbase的重要组件。在分布式应用中,它能够高可用地提供很多保障数据一致性的基础能力:分布式锁、选主、分布式命名服务等。

在 crazy-springcloud 脚手架中,高性能分布式 ID 生成器用到了 ZooKeeper。有关其原理和使用,请参见《Netty Zookeeper Redis 高并发实战》一书。

(2)Redis (虚拟机中已经预装)

Redis 是一个高性能的缓存数据库。在高并发的场景下,Redis 可以对关系数据库起到很好的缓冲作用;在提高系统的并发能力和响应速度方面,Redis 举足轻重和至关重要。crazy-springcloud 脚手架的分布式 Session 用到了 Redis。 有关 Redis 的原理和使用,还是请参见《Netty Zookeeper Redis 高并发实战》一书。

(3)Eureka (虚拟机中已经预装)

Eureka 是 Netflix 开发的服务注册和发现框架,本身是一个 REST 服务提供者,主要用于定位运行在 AWS(Amazon 云)的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务注册和发现功能。

(4)SpringCloud Config (虚拟机中已经预装)

SpringCloud Config 是 SpringCloud 全家桶中最早的配置中心,虽然在生产场景中,很多的企业已经使用 Nacos 或者 Consul 整合型的配置中心替代了独立的配置中心,但是 Config 依然适用于 SpringCloud 项目,通过简单的配置即可使用。

(5) Zuul

Zuul 是 Netflix 开源网关,可以和 Eureka、Ribbon、Hystrix 等组件配合使用,SpringCloud 对Zuul 进行了整合与增强,使用其作为微服务集群的内部网关,负责对给集群内部各个 provider 服务提供者进行 RPC 路由和请求过滤。

以上中间件的端口配置,以及部分安装和使用视频,大致如下表所示。

中间件链接地址
Linux Redis 安装(带视频)Linux Redis 安装(带视频)
Linux Zookeeper 安装(带视频)Linux Zookeeper 安装, 带视频
…完整的开发环境的准备工作,->请去疯狂创客圈 博客园 总入口
。。。。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从下面的链接获取:语雀 或者 码云

ok,是不是很简单

源码请参见 《Java 高并发核心编程 卷3 加强版,老版本为 SpringCloud Nginx 高并发核心编程》一书源码
虽然SpringCloud 入门很简单,但是原理很复杂, 而且掌握SpringCloud 原理,是成为核心工厂师的必备知识

微服务 分布式系统的架构12次演进

在进入实操之前,咱们来点微服务 分布式系统的架构演进。

在尼恩的 《Java 高并发核心编程 卷3 加强版,老版本为 SpringCloud Nginx 高并发核心编程》 一书中,对亿级流量的系统架构,做了一个内部的分析。

本文《SpringCloud Alibaba学习圣经 》与之相配合,介绍一下微服务 分布式系统的架构演进。

《Java 高并发核心编程 卷3 加强版》的 亿级流量的系统架构, 大家更加要好好看看,可以结合起来看。

微服务 分布式系统的几个基础概念

在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个微服务分布式系统中最基础的概念进行介绍。

1)什么是分布式?

系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上。

2)什么是高可用?

系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性。

3)什么是集群?

一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。

如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。

在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性。

4)什么是负载均衡?

请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的。

5)什么是正向代理和反向代理?

系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理;

当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。

简单来说,正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从下面的链接获取:语雀 或者 码云

架构演进1:单机架构

在网站最初时,应用数量与用户数都较少,可以把Java应用(主要是Tomcat承载)和数据库部署在同一台服务器上。

浏览器往发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该IP对应的Tomcat。

具体的架构图,如下:

架构瓶颈:

随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务。

架构演进2:引入缓存架构

随着 吞吐量的提升, 不得不引入引入缓存架构。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。

含: 本地缓存和分布式缓存

在Tomcat同服务器上或同JVM中增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的html页面等。

涉及的技术包括:

使用caffeine 作为本地缓存,使用Redis作为分布式缓存

架构瓶颈:

(1)这里会涉及缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题

(2)这里会涉及缓存一致性的问题

(3)这里会涉及 hotkey的问题

有关上面问题的解决方案:

请参见尼恩的 《100Wqps三级缓存组件实操》+ 《100Wqps Caffeine 底层源码、架构实操实操》

架构演进3:接入层引入反向代理实现负载均衡

接下来,缓存抗住了大部分的访问请求,服务层Tomcat上还是吞吐量低,响应逐渐变慢,需要进行架构演进。

在多台服务器上分别部署Tomcat,使用反向代理软件(nginx)把请求均匀分发到每个Tomcat中。

此处假设Tomcat最多支持100个并发,Nginx最多支持50000个并发,那么理论上Nginx把请求分发到500个Tomcat上,就能抗住50000个并发。

**其中涉及的技术包括:**Nginx、HAProxy,

两者都是工作在网络第七层的反向代理软件,主要支持http协议,还会涉及session共享、文件上传下载的问题。

架构演进4:数据库读写分离

反向代理使服务层的并发量大大增加,但并发量的增长也意味着: 更多请求会穿透到数据库,数据库最终成为瓶颈。

数据库如何高并发?

简单的方案:把数据库划分为读库和写库,读库可以有多个,

读库和写库之间,如何实现数据一致性?

简单的方案:可以通过DB的同步机制,把写库的数据同步到读库,对于需要查询最新写入数据场景,可通过在缓存中多写一份,通过缓存获得最新数据。

数据库读写分离的架构如下:

其中涉及的技术包括:shardingjdbc ,它是数据库中间件,可通过它来组织数据库的分离读写和分库分表,客户端通过它来访问下层数据库,还会涉及数据同步,数据一致性的问题。

有关上面分库分表解决方案:

请参见尼恩的 《10Wqps 日志平台实操》, 对分库分表方案,做了非常详解的架构介绍,并且在实操维度,对其中的核心的组件分布式ID,结合雪花id源码,百度id源码,shardingjdbc id源码,做了深入骨髓的介绍。

架构演进5:数据库按业务分库

业务逐渐变多,不同业务之间的访问量差距较大,不同业务直接竞争数据库,相互影响性能。

随着用户数的增长,单机的写库会逐渐会达到性能瓶颈。

把不同业务的数据保存到不同的数据库中,使业务之间的资源竞争降低,对于访问量大的业务,可以部署更多的服务器来支撑。

有关上面分库分表解决方案:

请参见尼恩的 《10Wqps 日志平台实操》, 对分库分表方案,做了非常详解的架构介绍,并且在实操维度,对其中的核心的组件分布式ID,结合雪花id源码,百度id源码,shardingjdbc id源码,做了深入骨髓的介绍。

架构演进6:使用LVS或F5接入层负载均衡

随着吞吐量大于5W,接入层Nginx扛不住了

由于瓶颈在Nginx,因此无法LVS或F5来实现多个Nginx的负载均衡。

图中的LVS和F5是工作在网络第四层的负载均衡解决方案,区别是:

(1 ) LVS是软件,运行在操作系统内核态,可对TCP请求或更高层级的网络协议进行转发,因此支持的协议更丰富,并且性能也远高于Nginx,可假设单机的LVS可支持几十万个并发的请求转发;

(2 ) F5是一种负载均衡硬件,与LVS提供的能力类似,性能比LVS更高,但价格昂贵。

如果不是财大气粗的guoqi,推荐使用LVS。

由于LVS是单机版的软件,若LVS所在服务器宕机则会导致整个后端系统都无法访问,因此需要有备用节点。

LVS 如何高可用呢?

可使用keepalived软件模拟出虚拟IP,然后把虚拟IP绑定到多台LVS服务器上,浏览器访问虚拟IP时,会被路由器重定向到真实的LVS服务器

当主LVS服务器宕机时,keepalived软件会自动更新路由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果。

架构演进7:通过DNS轮询实现机房间的负载均衡

由于LVS也是单机的,随着并发数增长到几十万时,LVS服务器最终会达到瓶颈,此时用户数达到千万甚至上亿级别,用户分布在不同的地区,与服务器机房距离不同,导致了访问的延迟会明显不同。

此时,可以使用 DNS 进行负载均衡:在DNS服务器中可配置一个域名对应多个IP地址,每个IP地址对应到不同的机房里的虚拟IP。

当用户访问taobao时,DNS服务器会使用轮询策略或其他策略,来选择某个IP供用户访问。

此方式能实现机房间的负载均衡

至此,系统可做到机房级别的水平扩展,千万级到亿级的并发量都可通过增加机房来解决,系统入口处的请求并发量不再是问题。

问题是,光用DNS进行简单的 LVS负载均衡,是不够的。

所以呢?大部分的大厂应用,都是采用 智能DNS + 接入层流量二次路由的模式, 具体的案例,可以来找尼恩进行交流,这里不做展开。主要是内容太多啦。

架构演进8:引入NoSQL数据库和搜索引擎等技术

随着数据的丰富程度和业务的发展,检索、分析等需求越来越丰富,单单依靠数据库无法解决如此丰富的需求。

当数据库中的数据多到一定规模时,数据库就不适用于复杂的查询了,往往只能满足普通查询的场景。

对于统计报表场景,在数据量大时不一定能跑出结果,而且在跑复杂查询时会导致其他查询变慢

对于全文检索、可变数据结构等场景,数据库天生不适用,使用 elasticsearch 分布式搜索引擎解决。

如对于海量文件存储,可通过分布式文件系统hbase解决

对于全文检索场景,可通过搜索引擎如ElasticSearch解决,对于多维分析场景,可通过Kylin或Druid等方案解决。

当然,引入更多组件同时会提高系统的复杂度,不同的组件保存的数据需要同步,需要考虑一致性的问题,需要有更多的运维手段来管理这些组件等。

接下来尼恩会讲 云原生+大数据的架构,就是介绍的这套方案。

架构演进9:大应用拆分为微服务

引入更多组件解决了丰富的需求,业务维度能够极大扩充,随之而来的是一个应用中包含了太多的业务代码,业务的升级迭代、部署维护变得困难,效率低下。

解决方式是,进行 业务的解耦。按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。

不同的业务,可以解耦成不同的微服务。

这样的服务就是所谓的微服务,应用和服务之间通过HTTP、TCP或RPC请求等多种方式来访问公共服务,每个单独的服务都可以由单独的团队来管理。

此外,可以通过Dubbo、SpringCloud等框架实现服务治理、限流、熔断、降级等功能,提高服务的稳定性和可用性。

这时候应用之间可能会涉及到一些公共配置,可以通过分布式配置中心 Nacos来解决。

架构演进10:引入企业服务总线ESB对微服务进行编排

由于不同服务之间存在共用的模块,由微服务单独管理会导致相同代码存在多份,导致公共功能升级时全部应用代码都要跟着升级。

不同微服务的接口访问方式不同,微服务代码需要适配多种访问方式才能使用,此外,微服务访问微服务,微服务之间也可能相互访问,调用链将会变得非常复杂,逻辑变得混乱。

在微服务的基础上,以应用为单位,进行微服务的分组,并且引入企业服务总线ESB,对微服务进行编排,形成应用。

通过ESB统一进行访问协议转换,应用统一通过ESB来访问后端服务,服务与服务之间也通过ESB来相互调用,以此降低系统的耦合程度。

这种微服务编排为多个应用,公共服务单独抽取出来来管理,并使用企业消息总线来解除服务之间耦合问题的架构。

接下来尼恩会讲 ESB架构,就是介绍的这套方案。

架构演进11:引入容器化技术实现动态扩容和缩容

业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题

此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难。

目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S),应用/服务可以打包为Docker镜像,通过K8S来动态分发和部署镜像。

Docker镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。

把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动Docker镜像就可以把服务起起来,使服务的部署和运维变得简单。

有关 Docker + Kubernetes(K8S) 的内容,请参见尼恩的电子书:

由于内容确实太多, 所以写多个pdf 电子书:

(1) 《 Docker 学习圣经 》PDF

(2) **《 SpringCloud Alibaba 微服务 学习圣经 》**PDF

使用 Docker + Kubernetes(K8S) 后,在大促的之前,可以在现有的机器集群上划分出服务器来启动Docker镜像,增强服务的性能

大促过后就可以关闭镜像,对机器上的其他服务不造成影响。

架构演进12:以云平台承载系统

使用容器化技术后服务动态扩缩容问题得以解决,但是机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低。

系统可部署到公有云上,利用公有云的海量机器资源,解决动态硬件资源的问题

在大促的时间段里,在云平台中临时申请更多的资源,结合Docker和K8S来快速部署服务,在大促结束后释放资源,真正做到按需付费,资源利用率大大提高,同时大大降低了运维成本。

所谓的云平台,就是把海量机器资源,通过统一的资源管理,抽象为一个资源整体

在云平台上可按需动态申请硬件资源(如CPU、内存、网络等),并且之上提供通用的操作系统,提供常用的技术组件(如Hadoop技术栈,MPP数据库等)供用户使用,甚至提供开发好的应用

用户不需要关心应用内部使用了什么技术,就能够解决需求(如音视频转码服务、邮件服务、个人博客等)。

在云平台中会涉及如下几个概念:

IaaS:基础设施即服务。对应于上面所说的机器资源统一为资源整体,可动态申请硬件资源的层面;
PaaS:平台即服务。对应于上面所说的提供常用的技术组件方便系统的开发和维护;
SaaS:软件即服务。对应于上面所说的提供开发好的应用或服务,按功能或性能要求付费。

至此:以上所提到的从高并发访问问题,到服务的架构和系统实施的层面都有了各自的解决方案。

架构演进的涉及的核心知识

通过以上架构的演进,可以看出:

(1)开发侧: 重点的知识体系是 SpringCloud + Nginx 的基础架构;

有关 SpringCloud + Nginx的知识,请阅读本文《SpringCloud Alibaba学习圣经 》和与之相配合的《Java 高并发核心编程 卷3 加强版》

《Java 高并发核心编程 卷3 加强版》

(2)运维侧: 重点的知识体系是 docker + k8s 的基础架构;

有关 docker + k8s 的知识,请阅读本文《docker 学习圣经 》和与之相配合的《K8s 学习圣经》

搞定这些,应对亿级流量,就具备了基础的知识底座。

本文,聚焦 SpringCloud 的学习,主要是 SpringCloud Alibaba 的学习。

SpringCloud netflix 入门

要了解 SpringCloud Alibaba ,先得了解 SpringCloud netflix。

为啥? SpringCloud Alibaba 仅仅是在 SpringCloud netflix 的基础上,替换了部分组件。 比如说注册中心,比如RPC组件。

所以,咱们得从SpringCloud netflix 开始。

SpringCloud Netflix全家桶是 Pivotal 团队提供的一整套微服务开源解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、断路器等组件,以上的组件主要通过对 NetFilx的 NetFlix OSS 套件中的组件通过整合完成的,其中,比较重要的整合组件有:

(1)spring-cloud-netflix-Eureka 注册中心

(2)spring-cloud-netflix-hystrix RPC保护组件

(3)spring-cloud-netflix-ribbon 客户端负载均衡组件

(4)spring-cloud-netflix-zuul 内部网关组件

(6)spring-cloud-config 配置中心

SpringCloud 全家桶技术栈除了对 NetFlix OSS的开源组件做整合之外,还有整合了一些选型中立的开源组件。比如,SpringCloud Zookeeper 组件整合了 Zookeeper,提供了另一种方式的服务发现和配置管理。

SpringCloud 架构中的单体业务服务是基于 SpringBoot 应用进行启动和执行的。SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。SpringCloud 利用 SpringBoot 是什么关系呢?

(1)首先 SpringCloud 利用 SpringBoot 开发便利性巧妙地简化了分布式系统基础设施的开发;

(2)其次 SpringBoot 专注于快速方便地开发单体微服务提供者,而 SpringCloud 解决的是各微服务提供者之间的协调治理关系;

(3)第三 SpringBoot 可以离开 SpringCloud 独立使用开发项目,但是 SpringCloud 离不开SpringBoot,其依赖 SpringBoot 而存在。

最终,SpringCloud 将 SpringBoot 开发的一个个单体微服务整合并管理起来,为各单体微服务提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等基础的分布式协助能力。

SpringCloud 开发脚手架

无论是单体应用还是分布式应用,如果从零开始开发,都会涉及很多基础性的、重复性的工作需要做,比如用户认证,比如 session 管理等等。有了开发脚手架,这块基础工作就可以省去,直接利用脚手架提供的基础模块,然后按照脚手架的规范进行业务模块的开发即可。

笔者看了开源平台的不少开源的脚手架,发现很少是可以直接拿来做业务模块开发的,或者封装的过于重量级而不好解耦,或者业务模块分包不清晰而不方便开发,所以,本着简洁和清晰的原则,笔者的发起的疯狂创客圈社群推出了自己的微服务开发脚手架 crazy-springcloud,其大致的模块和功能具体如下:

crazymaker-server     --  根项目
│  ├─cloud-center     --  微服务的基础设施中心
│  │  ├─cloud-eureka      --  注册中心
│  │  ├─cloud-config      --  配置中心
│  │  ├─cloud-zuul        --  网关服务
│  │  ├─cloud-zipkin      -- 监控中心
│  ├─crazymaker-base  -- 公共基础依赖模块
│  │  ├─base-common     -- 普通的公共依赖,如 utils 类的公共方法
│  │  ├─base-redis      -- 公共的 redis 操作模块 
│  │  ├─base-zookeeper  -- 公共的 zookeeper 操作模块
│  │  ├─base-session    -- 分布式 session 模块
│  │  ├─base-auth       -- 基于 JWT + SpringSecurity 的用户凭证与认证模块
│  │  ├─base-runtime    -- 各 provider 的运行时公共依赖,装配的一些通用 Spring IOC Bean 实例
│  ├─crazymaker-uaa   --业务模块: 用户认证与授权
│  │  ├─uaa-api        -- 用户 DTO、Constants 等
│  │  ├─uaa-client     --  用户服务的 Feign 远程客户端
│  │  ├─uaa-provider   -- 用户认证与权限的实现,包含controller 层、service层、dao层的代码实现
│  ├─crazymaker-seckill  --业务模块: 秒杀练习
│  │  ├─seckill-api        -- 秒杀 DTO、Constants 等
│  │  ├─seckill-client     -- 秒杀服务的 Feign 远程调用模块
│  │  ├─seckill-provider   -- 秒杀服务核心实现,包含controller层、service层、dao层的代码实现
│  ├─crazymaker-demo    --业务模块: 练习演示
│  │  ├─demo-api        -- 演示模块的 DTO、Constants 等
│  │  ├─demo-client     -- 演示模块的 Feign 远程调用模块
│  │  ├─demo-provider   -- 演示模块的核心实现,包含controller层、service层、dao层的代码实现

在业务模块如何分包的问题上,实际上大部分企业都有自己的统一规范。crazy-springcloud 脚手架从职责清晰、方便维护、能快速导航代码的角度出发,将每一个业务模块,细分成以下三个子模块:

(1) module-api

此子模块定义了一些公共的 Constants 业务常量和 DTO 传输对象,该子模块既被业务模块内部依赖,也可能被依赖该业务模块的外部模块所依赖;

(2) module-client

此子模块定义了一些被外部模块所依赖的 Feign 远程调用客户类,该子模块是专供外部的模块,不能被内部的其他子模块所依赖;

(3) module-provider

此子模块是整个业务模块的核心,也是一个能够独立启动、运行的服务提供者(Application),该模块包含涉及到业务逻辑的 controller 层、service 层、dao 层的完整代码实现。

crazy-springcloud 微服务开发脚手架在以下两方面进行了弱化:

(1)在部署方面对容器的介绍进行了弱化,没有使用 Docker 容器而是使用 Shell 脚本。有多方面的原因:一是本脚手架初心是学习,使用 Shell 脚本而不是 Docker 去部署,方便大家学习 Shell 命令和脚本;二是 Java 和 Docker 其实整合得很好,学习非常容易,可以稍加配置就能做到一键发布,找点资料就可以掌握; 三是部署和运维是一个专门的工作,生产环境的部署、甚至是整个自动化构建和部署的工作,实际上属于运维的专项工作,由专门的运维岗位人员去完成,而部署的核心仍然是 Shell 脚本,所以对于开发人员来说掌握 Shell 脚本才是重中之重。

(2)对监控软件的介绍进行了弱化。本书没有对链路监控、JVM性能指标、断路器监控软件的使用做专门介绍。有多方面的原因:一是监控的软件太多,如果介绍太全,篇幅又不够,介绍太少,大家又不一定用到; 二是监控软件的使用大多是一些软件的操作步骤和说明,原理性的内容比较少,使用视频的形式会比文字形式知识传递的效果会更好。疯狂创客圈后续可能(但不一定)会推出一些微服务监控方面的教学视频供大家参考,请大家关注社群博客。不论如何,只要掌握了 SpringCloud 核心原理,对那些监控组件使用的掌握,对大家来说基本上都是一碟小菜。

启动Eureka Server 注册中心

Eureka 本身是 Netflix 开源的一款注册中心产品,并且 SpringCloud 提供了相应的集成封装,选择其作为注册中心的讲解实例,是出于以下的原因:

(1)Eureka 在业界的应用十分广泛(尤其是国外),整个框架也经受住了 Netflix 严酷生产环境的考验。

(2)除了 Eureka 注册中心,Netflix 的其他服务治理功能也十分强大,包括 Ribbon、Hystrix、Feign、Zuul 等组件,结合到一起组成了一套完整的服务治理框架,使得服务的调用、路由也变得异常容易。

那么,Netflix 和 SpringCloud 是什么关系呢?

Netflix 是一家互联网流媒体播放商,是美国视频巨头,访问量非常的大。也正是如此,Netflix 把整体的系统迁移到了微服务架构。并且,Netflix 就把它的几乎整个微服务治理生态中的组件,都开源贡献给了 Java 社区,叫做 Netflix OSS。

SpringCloud 是 Spring 背后的 Pivotal 公司(由 EMC 和 VMware 联合成立的公司)在 2015 年推出的开源产品,主要对 Netflix 开源组件的进一步封装,方便 Spring 开发人员构建微服务架构的应用。

SpringCloud Eureka 是 SpringCloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务实例的自动化注册与发现,这也是微服务架构中最为核心和基础的功能。

Eureka 所治理的每一个微服务实例,被称之为 Provider Instance (提供者实例)。每一个 Provider Instance 微服务实例包含一个 Eureka Client 客户端组件(相当于注册中心客户端组件)

以上是关于SpringCloud Alibaba 学习圣经,10万字实现 SpringCloud 自由的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习 —— SpringCloud Alibaba Nacos服务注册和配置中心

微服务圣经1:零基础搭建一套SpringCloud微服务脚手架(SpringCloud+Dubbo+Docker+Jenkins)

阿里疯传“SpringCloud Alibaba”学习笔记

17.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos组件

无敌!SpringBoot+SpringCloud Alibaba 全套脑图 + 学习笔记 + 大厂面试题

一个困扰程序员很多年的问题:微服务领域SpringCloud这么火,为何还要学习SpringCloud Alibaba?