【SpringCloud】SpringCloud基础教程(1)
前言:
本文内容:阶段回顾、微服务和微服务架构、什么是SpringCloud
推荐免费SpringCloud基础教程视频:【狂神说Java】SpringCloud最新教程IDEA版_哔哩哔哩_bilibili
阶段回顾
所学内容回顾
- JavaSE
- 数据库
- 前端
- Servlet
- Http
- Mybatis
- Spring
- SpringMVC
- SpringBoot(Dubbo+zookeeper)
- Maven、Git
- Ajax、JSON
内容梳理
Web架构的演进
-
三层架构+MVC
|
-
Spring
|
-
SpringBoot(新一代JavaEE开发标准) 自动装配(模块化)
微服务架构核心问题
- 服务多,客户端如何访问?
- 这么多服务,它们之间如何通信?
- 服务太多,如何治理?
- 服务宕机怎么办?
解决方案:Spring Cloud(生态)
-
Spring Cloud NetFlix(一站式解决方案)
api:使用api网关,zuul组件
Feign–HttpClient–Http通信方式,同步,阻塞
服务注册发现:Eureka
熔断机制:Hystrix
-
Apache Dubbo Zookeeper(半自动,需要整合)
api:找第三方组件,或者自己实现
Dubbo
服务注册发现:Zookeeper
熔断机制:借助Hystrix
-
Spring Cloud Alibaba(一站式解决方案)
新概念
服务网络-Server Mesh–istio
总结
- API
- HTTP,RPC
- 注册和发现
- 熔断机制
微服务和微服务架构
什么是微服务
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。
微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。
微服务与微服务架构
微服务
强调的是服务的大小,他关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个应用,可以狭义的看作是IDEA中的一个个微服务工程,或者Module
微服务架构
一种架构形式,Martin Fowler于2014年提出
微服务架构将应用程序构建为独立的组件,并将每个应用程序进程作为一项服务运行。这些服务使用轻量级 API 通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。
微服务的优缺点
优点
- 单一职责
- 高内聚,低耦合
- 可以使用不同语言开发
- 可以被小团队单独开发
- 易于和第三方集成
- 便于维护
- 每一个微服务可以有单独的数据库,也可以有统一数据库
- 只是业务逻辑代码,不会和其他界面混合
缺点
- 开发人员处理分布式系统的复杂性
- 系统部署依赖
- 服务间通信成本
- 数据一致性
- 系统集成测试
- 性能监控
微服务技术栈
微服务条目 | 落地技术 |
---|---|
服务开发 | SpringBoot,Spring,SpringMVC |
服务配置与管理 | Netflix公司的Archaius,阿里的Diamond等 |
服务注册于发现 | Eureka,Consul,Zookeeper等 |
服务调用 | Rest,RPC,gRPC |
服务熔断器 | Hystrix,Envoy等 |
负载均衡 | Ribbon,Nginx等 |
服务接口调用 | Feign |
消息队列 | Kafka,RabbitMQ,ActiveMQ等 |
服务配置中心管理 | SpringCloudConfig,Chef等 |
服务路由(API网关) | Zuul |
服务监控 | Zabbix,Nagios,Metrics,Specatator等 |
全链路追踪 | Zipkin,Brave,Dapper等 |
服务部署 | Docker,OpenStack,Kubernetes等 |
数据流操作开发包 | SpringCloud Stream(封装与Redis,Rabbit,kafka等发送接收消息) |
事件消息总线 | SpringCloud Bus |
为什么选择SpringCloud作为微服务架构
选型依据
- 整体解决方案和框架成熟度
- 社区热度
- 可维护性
- 学习曲线
各大公司的微服务架构
- 阿里:dubbo+HFS
- 京东:JSF
- 新浪:Motan
- 当当:DubboX
- …
各位服务架构对比
功能点/服务框架 | Netflix、Spring Cloud | Motan | gRPC | Thrift | Dubbo,DubboX |
---|---|---|---|---|---|
功能定位 | 完整的微服务架构 | RPC架构,但整合了ZK或Consul,是心啊集群环境的基本服务注册、发现 | RPC架构 | RPC脚骨 | 服务框架 |
支持Rest | 是,Ribbon支持多种可把拔插的序列化选择 | 否 | 否 | 否 | 否 |
支持RPC | 否 | 是(Hession2) | 是 | 是 | 是 |
支持多语言 | 是 | 否 | 是 | 是 | 否 |
负载均衡 | 是(服务端zuul+客户端Ribbon),zuul+fuwu,动态路由,云端负载均衡,Eureka(针对中间层服务器) | 是(客户端) | 否 | 否 | 是(客户端) |
配置服务 | Netflx Archaius,Spring Cloud Config Server集中配置 | 是(Zookeeper提供) | 否 | 否 | 否 |
服务调用链监控 | 是(zuul),zuul提供边缘服务,API网关 | 否 | 否 | 否 | 否 |
高可用、容错 | 是(服务端Hystrix+客户端Ribbon) | 是(客户端) | 否 | 否 | 是(客户端) |
典型应用案例 | Netflix | Sina | |||
社区活跃度 | 高 | 一般 | 高 | 一般 | 2017年后重新开始维护,中断了5年 |
学习难度 | 中等 | 低 | 高 | 高 | 低 |
文档丰富度 | 高 | 一般 | 一般 | 一般 | 高 |
其他 | Spring Cloud Bus为我们的应用程序带来了更多管理端点 | 支持降级 | Netflix内部再开发集成gRPC | IDL定义 | 实践的公司比较多 |
什么是SpringCloud
SpringCloud概述
Spring Cloud
是一系列框架的有序集合,它利用 Spring Boot
的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。
Spring Cloud
并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。
换句话说:Spring Cloud
提供了构建分布式系统所需的“全家桶”
Spirng Cloud和Spring Boot的关系
SpringBoot
专注于快速方便的开发单个微服务SpringCloud
是关注全局的微服务协调整治框架,它将SpringBoot
开发的一个个单体微服务整合并管理,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策精选,分布式会话等集成服务SpringBoot
可以离开SpringCloud
独立应用,开发项目,但是SpringCloud
离不开SpringBoot
,属于依赖关系SpringBoot
专注于快速,方便的开发单个微服务,SpringCloud
关注全局的服务治理框架
Dubbo和Spring Cloud技术选型
-
分布式+服务治理Dubbo
目前成熟的互联网架构:应用服务化拆分+消息中间件
-
Dubbo和SpringCloud对比
功能 Dubbo SpringCloud 服务注册中心 Zookeeper Spring Cloud Netflix Eureka 服务调用方式 RPC Rest API 服务监控 Dubbo-monitor Spring Boot Admin 断路器 不完善 Spring Cloud Netflix Hystrix 服务网关 无 Spring Cloud Netflix Zuul 分布式配置 无 Spring Cloud Config 服务跟踪 无 Spring Cloud Sleuth 消息总线 无 Spring Cloud Bus 数据流 无 Spring Cloud Stream 批量任务 无 Spring Cloud Task
最大区别
Spring Cloud
抛弃了Dubbo
的RPC
通信,采用基于HTTP
的Rest
方式。
Spring Cloud
拥有一条完整的生态,社区活跃度高,而Dubbo
的自定义程度高,但社区活跃度低,二者各有优略,按需选择即可。
Spring Cloud能干什么
Distributed/version configuration
(分布式、版本控制配置)Service registration and discovery
(服务注册与发现)Routing
(路由)Service-to-service calls
(服务到服务的调用)Load balancing
(负载均衡配置)Circuit Breakers
(断路器)Distributed messaging
(分布式消息管理)
Spring Cloud下载
下载地址:Spring Cloud
一般选择GA稳定版本
学习参考