在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。
(1)耦合角度:
单体架构:所有的模块全都耦合在一块,代码量大,维护困难。
微服务:每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
(2)数据存储角度:
单体架构:所有的模块都共用一个数据库,存储方式比较单一。
微服务:每个模块都可以使用不同的存储方式,数据库也是单个模块对应自己的数据库。
(3)开发技术的使用:
单体架构:所有的模块开发所使用的技术一样。
微服务:每个模块都可以使用不同的开发技术,开发模式更灵活。
微服务,关键其实不仅仅是微服务本身,而是系统要提供一套基础的架构,这种架构使得微服务可以独立的部署、运行、升级,不仅如此,这个系统架构还让微服务与微服务之间在结构上“松耦合”,而在功能上则表现为一个统一的整体。微服务的目的是有效的拆分应用,实现敏捷开发和部署 。
微服务可以按照业务功能本身的独立性来划分,如果系统提供的业务是非常底层的,如:操作系统内核、存储系统、网络系统、数据库系统等等,这类系统都偏底层,功能和功能之间有着紧密的配合关系,如果强制拆分为较小的服务单元,会让集成工作量急剧上升,并且这种人为的切割无法带来业务上的真正的隔离,所以无法做到独立部署和运行,也就不适合做成微服务了。总的来说,独立性越高、越顶层的应用程序适合使用微服务。
Spring Cloud 是一系列框架的集合。它利用 Spring Boot 的开发便利性简化了分布式系统基础设施的开发,如服务发现、服务注册、配置中心、消息总线、负载均衡、 熔断器、数据监控等,都可以用 SpringBoot 的开发风格做到一键启动和部署。
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于 Spring Boot 快速开发单个微服务。
SpringCloud 是一个基于 Spring Boot 实现的开发工具; Spring Boot 专注于快速、方便集成的单个微服务个体, Spring Cloud 关注全局的服务治理框架; Spring Boot 使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置, Spring Cloud 很大的一部分是基于 Spring Boot 来实现,必须基于Spring Boot开发。可以单独使Spring Boot开发项目,但是Spring Cloud离不开 Spring Boot。
服务发现——Netflix Eureka (Nacos)
服务调用——Netflix Feign
熔断器 ——Netflix Hystrix
服务网关 ——Spring Cloud GateWay
分布式配置——Spring Cloud Config (Nacos)
消息总线 —— Spring Cloud Bus (Nacos)
阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
Nacos经常使用的功能是服务发现,下图是其服务注册流程图。
Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,是以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。
Feign的作用是服务调用,下图是其服务调用图。
Hystrix是一个用于处理分布式系统的延迟和容错的开源库。在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的预备响应(FallBack),而不是长时间等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中蔓延,乃至雪崩。
Hystrix的作用是服务熔断,下图是其服务熔断图。
由于作者是初次使用SpringCloud,对SpringCloud的主要功能简单应用,上述的流程图主要展示SpringCloud的服务注册、服务调用和服务熔断三大技术的大体逻辑,其中隐藏了很多细节问题没有展示出来,读者有兴趣可继续往下研究。
本篇文章主要是理论部分的说明,下篇文章将聚焦于SpringCloud服务注册、服务调用和服务熔断三大技术的实践。
其中隐藏了很多细节问题没有展示出来,读者有兴趣可继续往下研究。
本篇文章主要是理论部分的说明,下篇文章将聚焦于SpringCloud服务注册、服务调用和服务熔断三大技术的实践。