微服务架构 与 Dubbo 微服务框架、SpringCloud 微服务框架 详解
什么是微服务架构?
-
微服务架构就是
将单体的应用程序分成多个应用程序
,这
一个应用程序就组成一个服务
,
这多个应用程序就组成服务体系(微服务)
,这种这种方式组成的服务架构称为
微服务架构
。 -
每个微服务
运行在自己的进程中
,并使用轻量级的机制
通信
。 -
这些服务
围绕业务能力来划分
,并通过自动化部署机制来
独立部署
。 -
这些服务
可以使用不同的编程语言
,
不同数据库
,以保证
最低限度的集中式管理
。 -
提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
-
每个服务都有自己的堆载、数据库和数据模型
。松散耦合。 -
通过 Rest API、事件流和消息代理的组合相互通信
。
微服务框架有哪些?微服务组件又有哪些,用来干什么的?
-
微服务组件主要有 9 种:
服务注册中心、服务调用、服务网关、熔断器、分布式配置、服务跟踪、数据流、批量任务
。 -
常用的 微服务框架 有 Dubbo 和 SpringCloud,其中,
SpringCloud 框架中微服务组件丰富、版本更新快
;
Dubbo 框架只提供服务远程调用、负载均衡、服务注册三个功能组件,同时方便其他的组件接入
。
Dubbo 微服务框架
-
是一个
高性能、轻量级的开源 Java RPC 框架
,阿里巴巴开发,后捐赠给 Apache。 -
提供
服务远程调用、负载均衡、服务自动注册
三个核心功能组件。
Dubbo 微服务框架 结构图
-
init(初始化)、async(异步)、sync(同步)。
-
Dubbo 的模块对象及其功能:
-
Registry(服务注册中心):负责服务注册与发现
-
Consumer(服务消费者):就是使用服务的程序
-
Provider(服务提供者):将注册中心中的服务暴露出来,使其可以被调用
-
Container(服务运行容器):服务的提供在此实现
-
Monitor(服务监控中心):统计服务的调用次数和调用时间
-
-
流程 说明:
-
0.start:
服务运行容器(Container)运行起来并提供服务
-
1.register:
服务提供商(Provider)将服务注册到 服务注册中心(Registry)
-
2.subscribe:
服务消费者(Consumer)从服务注册中心(Registry)获取服务
-
3.notify:
服务注册中心(Registry)将最新的服务信息推送给服务消费者(Consumer)
-
4.invoke:
保证服务的供给、不中断
-
5.count:
为服务消费者(Consumer)和服务提供商(Provider) 提供数据统计服务
-
特点
-
提供高性能的
远程调用功能
,以接口粒度提供服务,屏蔽远程调用底层相关细节。 -
自动的负载均衡功能
,通过各种负载均衡策略,自动调节资源使用情况。 -
服务自动注册与发现∶支持
多种注册中心服务
,服务实例上下线
实时感知
。 -
高度可扩展能力
:遵循微「内核+插件」的设计原则,所有核心能力(如 Protocol、Transport、Serialization)被设计为扩展点,平等对待内置实现和第三方实现。 -
运行期流量调度
:内置条件、脚本等路由策略,配置不同的路由规则,可以轻松实现灰度发布,以及同一机房服务优先调用等功能。 -
可视化的服务治理与运维:提供
丰富的服务治理和运维工具
,如 随时查询服务元数据、服务健康状态及调用统计,以及实时下发路由策略、调整配置参数。
SpringCloud 微服务框架
SpringCloud 是什么?
-
Spring Cloud 是
一系列微服务开发框架的有序集合
。 -
这一系列微服务开发框架有:
服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控
等等。 -
SpringCloud 就是基于 SpringBoot 把市场上优秀的服务框架组合起来,再进行封装屏蔽掉了复杂的配置和实现原理。
-
Spring Cloud
保留了 SpringBoot 的开发风格
,做到可以直接用 SpringBoot 风格
一键式开发部署
。
SpringCloud 微服务框架 组件
核心组件:EureKa,服务注册中心
-
是微服务架构中的
注册中心
。 -
专门负责
服务的注册与发现
。 -
Eureka Server:注册中心,里面有一个
注册表,保存了各服务所在的机器和端口号
。 -
Eureka Client:注册负责器,负责将这个服务的信息注册到 Eureka Server 中。
核心组件:Feign,服务调用
-
传统的服务调用是:直接通过 HTTP URL 生成请求,添加参数、设置请求头,然后获得发送状态。
-
Feign 的一个关键机制就是使用了
动态代理
。 -
用注解定义一个 FeignClient 接口,然后调用那个接口就可以了。
-
Feign Client 会在底层根据你的注解,跟你指定的服务
建立连接、构造请求、发起靕求、获取响应、解析响应
,等等 -
Feign是一个使用起来更加方便的 HTTP 客户端,采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 HTTP 请求。
核心组件:Ribbon,负载均衡
-
作用:在每次请求时选择一台机器,
均匀的把请求分发到各个机器上
。 -
Ribbon 的负载均衡默认使用的最经典的
Round Robin 轮询算法(就是每个机器都处理请求一次,然后循环)
。
核心组件:Hystrix,隔离、熔断以及降级
-
服务雪崩问题:当一个服务(服务 A)崩溃后,在高并发场景下,大量的请求进入,其他线程因为要访问服务 A,也进入阻塞状态,无响应,这就是服务雪崩。
-
Hystrix 是
隔离、熔断以及降级
的一个框架。 -
根据服务的分类,
创建多个线程池,每个线程池只负责一项单独的服务(隔离)
。某个
服务崩溃后,会在一定时间后直接跳出该服务的调用(熔断
),并
添加服务调用失败记录(降级)
,后续用来手动调用完成服务。
核心组件:Zuul,网关
-
负责网络路由的,
统一请求的入口,Zuul 根据请求中的特征,将请求转发给后端的各个服务
。 -
请求
不用去关心后端有几百个服务,就知道有一个网关
,所有请求都往网关走。 -
网关记录了:服务名称、服务所在的机器的位置(地址,URL)。
SpringCloud 微服务框架 结构图
-
所有的服务都要注册到 EureKa Server 中
。 -
服务的调用统一使用 Feign
。 -
Ribbon 均衡服务的调用
。 -
前端的请求统一走 Zull 网关
。 -
Monitor 监控所有服务
。
Spring Cloud 和 Spring Boot 版本对应关系
Spring Cloud Version | SpringBoot Version |
---|---|
Hoxton 版本 | 兼容 Spring Boot 2.2.x |
Greenwich 版本 | 兼容 Spring Boot 2.1.x,不兼容 Spring Boot 2.0.x |
Finchley 版本 | 兼容 Spring Boot 2.0.x,不兼容 Spring Boot 1.5.x |
Edgware 版本、Dalston 版本 | 兼容 Spring Boot 1.5.x,不兼容 Spring Boot 2.0.x |
Camden 版本 | 兼容 Spring Boot 1.4.x,也兼容 Spring Boot 1.5.x |
Brixton 版本 | 兼容 Spring Boot 1.3.x,也兼容 Spring Boot 1.4.x |
Angel 版本 | 兼容 Spring Boot 1.2.x |
特点
-
约定优于配置
-
开箱即用、快速启动
-
适用于各种环境
-
轻量级的组件
-
组件支持丰富,功能齐全
Dubbo 微服务框架 和 SpringCloud 微服务框架的 对比
组件 | Dubbo 微服务框架 | SpringCloud 微服务框架 |
---|---|---|
服务注册中心 | ZooKeeper | Spring Cloud Neiflix Eureka |
服务调用方式 | RPC | REST FUL API |
服务网关 | 无,需要外接 | Spring Cloud Netflix Zuul |
熔断器 | 不完善,建议外接 | Spring Cloud Netflix Hystrix |
分布式配置 | 无,需要外接 | Spring Cloud Config |
服务跟踪 | 无,需要外接 | Spring Cloud Sleuth |
消息总线 | 无,需要外接 | Spring Cloud Bus |
数据流 | 无,需要外接 | Spring Cloud Stream |
批量任务 | 无,需要外接 | Spring Cloud Task |