SpringCloud 架构组件简易比较
Posted 喜欢雨天的我
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud 架构组件简易比较相关的知识,希望对你有一定的参考价值。
文章目录
概要
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
架构
这里找了一个传统的SpringCloud的架构图 架构图来源
从此图中我们介绍各个组件之间的说明和功能描述。
- 模块说明
模块名 | 说明介绍 |
---|---|
服务治理 | 分为核心几块为: 1. 服务注册发现 2. 服务监控 3. 熔点处理 4. 链路追踪 5. 高可用配合中心 依托服务治理 可以很好使 微服务 高可用 |
存储层 | 各个服务的存储依托,常见的NOSQL 和 关系SQL 数据库 以及实时性较高的 时序数据库 |
服务层 | 服务层 核心分为如下几块: 1. 网关层 用来进行分发和负载均衡 以及权限检验 2. 服务之间的连通 (主要有Feign 和 ribbion 2种方式) |
接入层 | 接入层 是外部连入 微服务系统 前 服务器做的 负载均衡、 内容分发网络、 防止DDOS攻击、防火墙 等 |
题外话: 微服务的opsdev和 环境发布 可以使用 Rancher平台进行有效的管理。
- 组件介绍
组件名 | 说明介绍 | 可替换的第三方组件 |
---|---|---|
config | 通过Git或SVN等版本控制器 存放配置文件 ,拉取远程地址的配置文件并启动时加载到系统内 或 同步Bus 更新配置值 | Alibaba-nacos Apollo |
Eureka | 微服务的注册和发现 ,具有最终一致性 | consul (强一致性)/ zookpeer(强一致性)/ Alibaba-nacos(强一致性) |
BootAdmin | 主要管理服务的健康状态 、 当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息 | Prometheus + grafana |
hystrix | 熔断器 和 降级处理 | 暂无 |
turbine | 集群监控 主要管理hystrix 整合为一个整体的dashborad | |
sleuth | 服务链路追踪 一般集成Zipkin | |
cloud bus | Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控 | |
cloud stream | Spring Cloud Stream是一个用于构建与共享消息传递系统相连的高度可扩展的事件驱动微服务的框架。 | |
cloudTask | SpringCloud的定时任务 | |
zuul | 服务网关 主要有限流 禁止IP 权限资源管理 和 负载均衡 | gateway |
gateway | 服务网关 主要有限流 禁止IP 权限资源管理 和 负载均衡 | zuul |
组件对比
Config VS nacos VS Apollo
微服务配置内容高可用,主要是进行远程配置文件修改和配置,方便管理生产环境。那我们比对一下现在 最常用的配置中心。 这里以 spring config 和 alibaba nacos 对比
spring config | alibaba-nacos | Apollo | |
---|---|---|---|
git仓库管理 | ✔️ | ❌ | ❌ |
可视化界面 | ❌ | ✔️ | ✔️ |
是否支持注册发现 | ❌ | ✔️ | ❌ |
支持配置环境分割 | ✔️ | ✔️ | ✔️ |
支持灰度发布 | ❌ | ✔️ | ✔️ |
Spring是否无缝接入 | ✔️ | ✔️ | ❌ |
配置动态变更 | ✔️(繁琐) | ✔️(简单) | ✔️(简单) |
支持集群 | ✔️ | ✔️ | ✔️ |
性能对比
硬件环境
Nacos和Apollo使用同样的数据库(32C128G),部署Server服务的机器使用的8C16G配置的容器,磁盘是100G SSD。
版本
Spring Cloud Config使用2.0.0.M9版本,Apollo使用1.2.0 release版本,Nacos使用0.5版本。
spring config | alibaba-nacos | Apollo | |
---|---|---|---|
单机读取 | 客户端限制 7QPS | 15000 QPS | 读数据库 7500 QPS 读内存缓存 9000QPS |
3节点集群读取 | 21QPS | 45000 QPS | 内存读取27000 QPS |
单机写 | 5QPS | 1800 QPS | 压满CPU 1100QPS |
3节点写 | 5QPS | 6000QPS | 3300 QPS(CPU压满) |
备注: 每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
Eureka VS nacos VS consul
CAP 原则
- 一致性(Consistency) (所有节点在同一时间具有相同的数据)
- 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
- 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP 无法三者都获取,因此选择两种即可。
alibaba-nacos | Eureka | consul | zookpeer | |
---|---|---|---|---|
一致性协议 | CP+AP | AP | CP | CP |
健康检查 | TCP/HTTP/mysql/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
负载均衡策略 | 权重/metadata/Selector | Ribbon | Fabio | – |
雪崩保护 | 有 | 有 | 无 | 无 |
自动注销实例 | 支持 | 支持 | 不支持 | 支持 |
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 不支持 |
Dubbo集成 | 支持 | 不支持 | 不支持 | 支持 |
K8S集成 | 支持 | 不支持 | 支持 | 不支持 |
gateway VS zuul 1.0
spring gateway | zuul 1.0 | |
---|---|---|
spring-cloud-gateway-bench 官方压测工具 | Requests/sec: 32213.38 | Requests/sec: 20800.13 |
阻塞IO | 非阻塞IO | 阻塞IO |
组件教程
- Springboot —Eureka使用
- Springboot —服务消费者(restTempleate+ribbon)
- Springboot —服务消费者(Feign)
- Springboot —断路器(Hystrix)
- Springboot —路由网关(zuul)
- Springboot —分布式配置中心(Spring Cloud Config)
- Springboot —消息总线(Spring Cloud Bus)
以上是关于SpringCloud 架构组件简易比较的主要内容,如果未能解决你的问题,请参考以下文章
好文,SpringCloud架构的各个组件的原理分析,建议收藏