32周Spring Cloud 基础
- 微服务的基本概念、设计与拆分原则
- 微服务和Spring Cloud的关系
- 微服务常见的组件和功能
- 实战:springcloud查询案例
- 分模块构建Spring Cloud项目
- 完成课程列表、课程价格服务开发
- 课程服务整合、服务注册与发现
- 整合Feign实现服务间调用
- 网关集成与开发
- 服务的熔断与降级,进行实操演练
1. 微服务
1.1 什么是微服务
- 单体应用的痛点
- 引入依赖越来越多,部署效率低下
- 团队协作开发成本高
- 系统高可用性差
- 解决单体痛点-服务化
- 把传统的单机应用中的本地方法调用,改成通过RPC、HTTP产生的远程方法调用
- 把模块从单体应用中拆分出来,独立成一个服务部署
- 微服务概念
- 微服务是一种架构风格,开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进行中,并且通过轻量级的机制实现彼此间通信,这通常是HTTP资源的API
- 这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署
- 而且这些服务的集中式管理做到了最小化(例如docker集中管理),每一种服务都可以通过不同的编程语言进行编写,并且可以使用不同的数据存储技术
1.2 微服务的特点
-
组件以服务形式来提供
-
微服务是一个产品,不是一个项目
-
轻量级通信、独立进行
-
分散治理、去中心化治理
-
容错性设计
-
会带来团队组织架构的调整
1.3 微服务的优缺点
- 优点
- 服务简单、便于学习和上手,相对易于维护
- 独立部署,灵活扩展
- 技术栈丰富
- 缺点
- 运维成本过高
- 接口可能不匹配
- 代码可能重复
- 架构复杂度提高
1.4 微服务的两大门派
-
Spring Cloud :非常成熟的微服务框架,拥有众多子项目,提供一站式配套服务,可以快速构建分布式系统
-
Dubbo:高性能、轻量级的开源Java RPC框架,它提供了三大核心能力
- 面向接口的远程方法调用
- 只能容错和负载均衡
- 服务发现与注册
Dubbo提供的能力只是SpringCloud一部分
-
两者对别
- 配套服务
核心组件 | SpringCloud | Dubbo |
---|---|---|
服务发现与注册 | SpringCloud Netflix Eureka | Zookeeper |
服务调用方式 | REST API 、Feign、Ribbon(负载均衡) | RPC |
服务网关 | SpringCloud Netflix Zuul | 不提供 |
断路器 | SpringCloud Netflix Hystrix | 不提供 |
分布式配置 | SpringCloud Config | 本身不提供,可以与第三方组件联合配置使用(百度的disconf,阿里的diamond) |
服务跟踪 | SpringCloud Sleuth | 同上(京东Hydra) |
消息总线 | SpringCloud Bus | 不提供 |
数据流 | SpringCloud Stream | 不提供 |
批量任务 | SpringCloud Task | 同上(当当Elastic-Job) |
-
通信协议对别
- RPC
- REST(HTTP)
-
总结
组装电脑 PK 品牌机
1.5 微服务拆分
- 什么时候进行服务化拆分
- 第一阶段的主要目标是快速开发和验证想法
- 进一步增加更多的新特性来吸引更多的目标用户
- 项目复杂度过高,同时开发团队人员超过10人左右
- 不适合拆分
- 小团队,技术基础较薄弱
- 流量不高、压力小、业务变化也不大(比如OA)
- 对延迟很敏感的低延迟高并发系统
- 微服务拆分两种方式
- 纵向拆分(按照业务来拆分,商品服务、订单服务等)
- 横向拆分
1.6 微服务扩展
-
自动按需扩展
根据CPU负载程度、特定时间(比如周末)、消息中间件的队列长度、业务具体规则、预测等来决定是否扩展
2. 实战:springcloud查询案例
- 分模块构建Spring Cloud项目
- 完成商品列表、商品价格服务开发
- 课程服务整合、服务注册与发现
- 整合Feign实现服务间调用
- 负载均衡Ribbon
- 断路器Hystrix
- 网关集成与开发Zuul
- 服务的熔断与降级,进行实操演练