SpringCloud微服务之一:简介优缺点以及SpringCloud版本兼容
文章目录
- SpringCloud微服务之一:简介优缺点以及SpringCloud版本兼容
- 一、单体应用存在的问题
- 二、微服务简介
- 1、微服务概念
- 2、微服务优势以及不足
- 3、微服务的目的
- 4、微服务之间通信REST方式
- 二、微服务相关概念
- 1、注册中心(Erurka)
- 2、网关(Zuul)
- 3、配置中心(Config)
- 3、服务APM(Grafana)
- 4、异步队列(MQ)
- 5、容错限流(Hystrix)
- 6、负载均衡+服务调用(Ribbon、Feign)
- 7、日志收集(ELK)
- 8、容器化(Docker+k8s)
- 三、SpringCloud特点
- 三、SpringCloud版本兼容
一、单体应用存在的问题
一个归档包(.jar或者.war)包含的所有功能的应用程序,通常称为单体应用,而架构单体应用的方法,就是单体应用架构。
单体应用架构
(一)、优点(容易部署,测试,项目初期,程序可以很好的运行。)
(二)、缺点 (随着项目的需求越来越多,项目越来越臃肿,可维护性,灵活性下降。)
具体包括以下缺点:
- 1、复杂性高:边界模糊,依赖模糊,开发人员不断更换,代码参差不齐,维护时,改动一点需求,都有可能引起一大堆的连锁反应。
- 2、技术更新难:随着时间推移,需求变更和人员更替,新技术难以维护到项目中。
- 3、部署频率低:单体应用构建和部署的时间会增长,每次修复bug都需要重新部署整个应用,风向高。
- 4、可靠性差:更新版本时有可能因为某个bug导致整个应用崩溃。
- 5、扩展性有限:只能部署在同一服务上,对服务硬件要求高,特别是数据量大时对内存,cpu要求提高时,无法很好地实现扩展。
- 6、阻碍技术更新,因为单体应用通常使用统一的一整套技术,想要应用新的技术,可能会与现有平台内的技术存在冲突,难以更新。
二、微服务简介
1、微服务概念
微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。应用springcloud的一般整理架构图,如下:
2、微服务优势以及不足
- 优势
- 应用小,可快速编译部署
- 单个微服务维护性变高,修改容易。新功能交付变快,可以快速开发交付
- 扩展性变高
- 可靠性变强,可以部署很多独立的服务
- 不足
- 整体复杂度变高。
- 微服务变多,怎么监控所有微服务,保证服务稳定,运维变的复杂。
- 分布式数据一致性、分布式事务
- 服务保障一个服务出了问题,如何才能不影响其他服务
3、微服务的目的
微服务架构是为了适应业务的快速变化,产品的快速迭代、交付、反馈和修改而提出的一种架构解决方案。
4、微服务之间通信REST方式
二、微服务相关概念
1、注册中心(Erurka)
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。
注册中心主要提供三个核心功能:
1.服务注册
服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表
2. 提供注册表
服务消费者在调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表
3. 同步状态
Eureka Client 通过注册、心跳机制和 Eureka Server 同步当前客户端的状态
2、网关(Zuul)
Zuul是NetFlix开源的微服务网关,网关是一个更为智能的应用服务器,它的存在就像是整个微服务架构系统的门面,所有的外部客户端访问都需要经过它来进行调度和过滤。除了需要实现请求路由,负载均衡及校验过滤等功能外还需要与服务治理框架的结合,请求转发时的熔断机制,服务的聚合等一系列高级功能。
主要核心功能:
- 服务路由转发
- 鉴权校验过滤
- 熔断限制保护
3、配置中心(Config)
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。主要核心功能:
业务配置
功能开关
服务配置
3、服务APM(Grafana)
grafana 是一个开源的时序性统计和监控平台,支持例如 elasticsearch、graphite、influxdb 等众多的数据源,并以功能强大的界面编辑器著称。我们可以通过这个平台监控所有服务的负载,流量,使用率,机器硬件相关参数,以及可以配置相关参数通过http或者短信邮件报警提醒等。
4、异步队列(MQ)
MQ大家都熟悉,现在主流的MQ有rabbitMQ,rocketMQ,kafka。三者的区别我会在以后的文章介绍对比,以及不同场景应该使用哪种MQ。
核心功能:削峰填谷
5、容错限流(Hystrix)
它设计用来当分布式系统发生不可避免的异常的时候去隔离当前服务和远程服务、系统、三方包的联系,防止出现级联失败的情况,从而导致整个系统雪崩。
主要核心功能:
失败转移和优雅降级
实时监控更改相关配置
基于线程和信号量的断路器隔离
6、负载均衡+服务调用(Ribbon、Feign)
ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。ribbon主要功能是提供客户端的软件负载均衡算法。Ribbon就属于进程内负载均衡,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
主要核心功能:负载均衡
7、日志收集(ELK)
ELK=Elasticsearch+Logstash+Kibana
-Elasticsearch:
是一个基于Apache Lucene的分布式开源搜索引擎,使用Apache2.0开源协议发布(意味着可以免费下载、使用或者修改)。它在Lucene的实时搜索之外提供了可扩展性、可靠性和多租户功能。Elasticsearch的功能可以通过基于JSON的RESTfulAPI来使用 。
-Logstash
提供了输入插件来支持不同的数据源和平台,设计用来高效地处理日志、事件和非结构化数据源,然后通过输出插件如文件、标准输出。
-Kibana
是一个基于Apache2.0开源协议的开源数据可视化平台。它可以对存储于es的索引中的各种结构化和非结构化的数据进行可视化呈现
8、容器化(Docker+k8s)
通过 Docker 技术,我们可以像管理我们的应用一样管理我们的基础设施(比如基础依赖等,这里的具体技术其实就是镜像)。通过 Docker 技术,我们可以精简我们的整个开发和交互流程。docker可以做到应用程序和底层基础设施分离,我们可以将这些依赖和应用程序都打包到镜像中,然后测试或者正式上线的时候只需要将整个镜像部署上去就可以了,不需要关心目标服务器上面的基础环境。k8s(Kubernetes )它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。通俗的讲就是管理docker的。
核心功能:
- 自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
- 弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
- 服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
- 滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
三、SpringCloud特点
1、约定优于配置;
2、适用于各种环境,可以部署到PC端或者云环境;
3、隐藏了组建的复杂性,并提供声明式、无xml式配置方式;
4、轻量级的组件。
5、组件丰富、功能齐全。
6、灵活。各组件是解耦的,可以根据需求自行选择组件。
三、SpringCloud版本兼容
Spring Cloud | Spring Boot |
Angel版本 | 兼容Spring Boot 1.2.x |
Brixton版本 | 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x |
Camden版本 | 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x |
Dalston版本、Edgware版本 | 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x |
Finchley版本 | 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x |
Greenwich版本 | 兼容Spring Boot 2.1.x |
Hoxtonl版本 | 兼容Spring Boot 2.2.x |