Spring Cloud微服务标准及相关实现了解
一、前言
1、微服务架构是什么?
微服务架构是一个架构风格,提倡:
- 将一个单一应用程序开发为一组小型服务;
- 每个服务运行在自己的进程中;
- 服务之间通过轻量级的通信机制(如http rpc)等进行通信;
- 每个服务都能够独立打包部署;
- 每个服务都可以拥有自己独立的数据库;
微服务和微服务架构是两个不同的概念,微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把一个个的微服务组合管理起来对外提供一套完整的服务。
微服务概念如下图所示:
单体架构及扩展如下图所示:
微服务架构及扩展如下图所示:
单体服务和微服务的数据存储如下图所示:
综上所述,可以得出微服务的优缺点:
优点:
- 每个服务足够小,足够内聚,代码更加容易理解,只专注于一个业务功能点,对比传统应用,可能改几行代码需要了解整个系统,而微服务不会,只关注需要的关注的即可;
- 开发简单,一个服务只干一件事;
- 微服务能够被2-5个人的小团队开发,可以提高开发效率;
- 微服务可以根据流量大小进行按需伸缩扩容;
- 前后端分离,后端只需要关注api的实现,按照规范给前端返回数据即可;
- 一个服务可以拥有自己独立的数据库,也可以多个服务连接到同一个数据库。
缺点:
- 增加了运维人员的工作量,以前只要部署一个war包,现在可能要部署成百上千个war包;
- 服务之间相互调用,增加通信成本;
- 数据一致性问题,即分布式事务问题;
- 服务治理问题;
- 系统监控,问题排错,链路追踪等问题。
二、Spring Cloud标准及相关生态和实现
Spring Cloud是一系列框架的有序集合,是一个生态也是一个标准。它利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册与发现、配置中心、消息总线、负载均衡、断路器、数据监控等,这些都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring Cloud是微服务的一个标准,提供了很多组件方便开发者迅速进行微服务的开发。根据该标准有两套实现,分别是Spring Cloud Netflix和Spring Cloud Alibaba,前者已进行维护阶段,后者势头强劲在持续不断的进行发展着。
三、Spring Cloud Netflix
Netflix提供了多种组件,其中包括Eureka、Hystrix、Ribbon、Zuul、Archaic等。
- Spring Cloud Netflix Eureka:它是一个基于Rest服务的服务治理组件,包括服务注册中心、服务注册与发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移;
- Spring Cloud NetFlix Hystrix:它是一个容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大额容错能力;
- Spring Cloud NetFlix Ribbon:它是客户端负载均衡的服务调用组件;
- Spring Cloud NetFlix Feign:它是基于Ribbon和Hystrix的声明式服务调用组件,后被OpenFeign替代;
- Spring Cloud OpenFeign(可替代Feign):OpenFeign是Spring Cloud在Feign的基础上支持了Spring MVC的注解,如@RequestMapping等等,OpenFeign的@FeignClient可以解析Spring MVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务;
- Spring Cloud NetFlix Zuul:它是微服务网关,提供动态路由,访问过滤等服务,后被Spring Cloud gateway网关所替代;
- Spring Cloud Gateway(可替代Zuul):它是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单而有效的API路由管理方式。它作为Spring Cloud生态中的网关,目标是为了替代Netflix Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本功能,如:安全、监控/埋点和限流等功能;
- Spring Cloud NetFlix Archaic:配置管理api,包含一系列配置管理api,提供动态类型化属性,线程安全配置操作、轮询框架、回调机制等功能;
- Spring Cloud Config:分布式配置中心。配置管理工具,支持使用Git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等;
- Spring Cloud Bus:事件、消息总线,用于在集群(例如配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署;
- Spring Cloud Stream:消息驱动微服务;
- Spring Cloud Sleuth:分布式服务跟踪;
- Spring Cloud Alibaba:阿里巴巴结合自身微服务实践,开源的微服务一站式解决方案。
NetFlix主要的组件就是以上这些,当然还有一些其他的组件,这里没有例举出来。
四、Spring Cloud Alibaba
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。
基于Spring Cloud Alibaba只需要添加一些注解和少量配置就可以将Spring Cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Spring Cloud Alibaba提供了包含但不限于如下组件:
- Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、注册、配置管理和服务管理平台;
- Sentinel:面向分布式服务架构的轻量级流量控制产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性;
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务;
- Dubbo:一款高性能的java RPC通信框架;
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案;
- Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品;
- Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。使用它可以在任何应用、任何时间、任何地点存储和访问任意类型的数据;
- Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)的任务调度服务;
- Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
五、第一代和第二代的比较
六、案例图示
七、架构原则
八、其他
1、微服务架构的常见问题:
- 那么多小服务,如何管理他们?通过服务注册与发现,剔除,如nacos进行管理;
- 那么多小服务,服务之间如何通讯?通过restful、rpc进行通讯;
- 那么多小服务,客户端如何访问它们?通过网关gateway;
- 那么多小服务,一旦出现问题了,应该如何自处理?通过服务容错机制进行自处理;
- 那么多小服务,一旦出现问题了,如何快速排错?通过链路追踪进行分析快速排错。
2、Spring系列配置文件中,可以直接使用字符串赋值的类型有哪些? 有8种基本类型、包装类型、String、URI、Class、Resource,这里指的是可以直接通过@value或者配置文件进行赋值的情况。
3、版本情况说明
4、配置文件优先级说明
配置文件的优先级:优先级高的会覆盖优先级低的,并且配置文件之间会形成互补配置。配置优先级如下:
profile >默认配置文件 >extension-configs(下标越大优先级越高)>shared-configs(下标越大优先级越高)
九、相关视频或资料链接
(1)https://www.bilibili.com/video/BV1xX4y1A7Yf?p=38&spm_id_from=pageDriver (nacos基础视频讲解)
(2)https://nacos.io/zh-cn/docs/quick-start.html (nacos官方文档)
(3) https://www.bilibili.com/video/BV1aB4y1P7eh?p=5&spm_id_from=pageDriver (gateway 视频讲解)
(4)https://www.bilibili.com/video/BV1eh411e7pw?from=search&seid=12632236743751665897 (微服务解决方案,讲解微服务是什么等内容)
(5)https://www.bilibili.com/video/BV1gZ4y1L7hi?from=search&seid=12632236743751665897 (讲解微服务架构演讲及相关框架解决方案)
(6)https://www.bilibili.com/video/BV1ht411h772?from=search&seid=2601172782889351481 (nacos部分情况讲解)
(7)https://www.springcloud.cc/ (springcloud中文官方文档)
(8)http://c.biancheng.net/view/5309.html (springcloud教程)
(9)https://martinfowler.com/articles/microservices.html (微服务概念地址)
(10)http://blog.cuicc.com/blog/2015/07/22/microservices/ (微服务相关中文文档)
(11)https://spring.io/projects/spring-cloud (微服务官网)
(12)https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md (springcloud Alibaba地址)
(13)https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 (微服务开发时版本对应关系)