天天看点

SpringCloud微服务架构选型

作者:IT技术范

什么是微服务?

微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

1、微服务架构优势

  • 复杂度可控

在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

  • 独立部署

由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

  • 技术选型灵活

微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,所以需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。

  • 容错

当某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

  • 扩展

单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

2、SpringBoot

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

用我的话来理解,就是 Spring Boot 不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架(不知道这样比喻是否合适)。

Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。

Spring Boot 的核心思想就是约定大于配置,多数 Spring Boot 应用只需要很少的 Spring 配置。采用 Spring Boot 可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。

3、Spring Boot特点

  1. 创建独立的Spring应用程序
  2. 嵌入的Tomcat,无需部署WAR文件(现在大部分使用Undertow)
  3. 简化Maven配置
  4. 自动配置Spring
  5. 提供生产就绪型功能,如指标,健康检查和外部配置
  6. 绝对没有代码生成和对XML没有要求配置

4、Spring Cloud Netflix(奈飞/网飞)

核心功能组件:

  1. 配置中心SpringCloud Config。目前SpringCloud Config的使用主要是通过Git/SVN方式做一个配置中心,然后每个服务从其中获取自身配置所需的参数。
  2. 服务发现——Netflix Eureka(停更)。Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
  3. 服务网关——Netflix Zuul。作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。
  4. 服务调用,客服端负载均衡——Netflix Ribbon。Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。
  5. 服务降级,断路器——Netflix Hystrix。Netflix开源的一款容错框架,充当断路器,请求熔断与服务降级嘛,提供近实时的监控与告警。
SpringCloud微服务架构选型

除了以上的基础组件,还有其他几十种工具框架。

上面所说到的五种组件已经是元老级别的了,后续除了很更加好用的可替代方案。

5、组件选型可替代方案

Spring Cloud Alibaba

是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。

SpringCloud微服务架构选型

组件的选型说明:

  1. 服务配置:Config,Nacos(把Config替代了)
  2. 注册中心:eureka(停更)、Zookeeper、Consul(go语言编写)、Nacos
  3. 服务网关:Zuul,gateway(Spring自己推出的)旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注,例如:安全性,监视/指标和弹性。
  4. 服务调用:Ribbon、LoadBalancer(新出的)/ Feign(Netfilx公司不在更新)、OpenFeign(Spring公司自己出的,与Feign相当于葫芦娃兄弟,几乎一样)
  5. 服务降级:Hystrix(cloud自带的停更,国内依然很多使用,其思想很值得学习),resilience4j(国外推荐代替Hystrix),sentienl(国内一般推荐用这个,阿里出品)
  6. 服务总线:Bus(淘汰)Nacos(实现配置的动态刷新)
  7. 消息驱动: Stream-spring 用于与外部消息中间件集成的组件,用于创建绑定。例如,Kafka,RabbitMQ,RocketMQ。
  8. 分布式链路跟踪: APM工具Zipkin+Sleuth、pinpoint、SkyWalking、CAT
SpringCloud微服务架构选型

Spring Cloud 和 Dubbo 对比

SpringCloud微服务架构选型
SpringCloud微服务架构选型
SpringCloud微服务架构选型

继续阅读