Spring Cloud微服务架构

什么是微服务?

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

微服务架构优势

  1. 复杂度可控
    在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。

由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

  1. 独立部署
    由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。

由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

  1. 技术选型灵活
    微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。

由于每个微服务相对简单,所以需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。

  1. 容错
    当某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。

在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

  1. 扩展

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

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 可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。

Spring Boot特点

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

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开源的一款容错框架,充当断路器,请求熔断与服务降级嘛,提供近实时的监控与告警。

Spring Cloud微服务架构_第1张图片

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

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

组件选型可替代方案

Spring Cloud Alibaba

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

组件的选型说明:

  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
    Spring Cloud微服务架构_第3张图片

  9. 分布式事务

Seata 是一款Alibaba开源的分布式事务解决方案,致力于在微服务下提供高性能和简单易用的分布式事务服务。并提供了 AT、TCC、SAGA 和 XA 事务模式。

性能比lcn要好,不会造成死锁的情况;
没有管理化界面,不能保证数据的强一致性,只能保证最终一致性;

TX-LCN 定位是于一款事务协调性框架,框架本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。

保证数据的强一致性;
性能不是特别强大,可能会造成死锁的现象

TX-LCN,Seata 分布式事务选型及对比
分布式事务六种解决方案

  1. 安全认证:Security 提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。

SpringSecurity、Shiro、Oauth2.0、Cas

Spring Cloud Security + Oauth2.0 + JWT

  1. 分布式定时任务:elastic-job , xxl-job ,quartz , saturn, opencron , antares

分布式定时任务对比

  1. 监控及日志:
    prometheus,grafana loki,ELK(Elasticsearch+Logstash+Kibana)

Spring Cloud 和 Dubbo 对比

Spring Cloud微服务架构_第4张图片

Spring Cloud微服务架构_第5张图片

Spring Cloud微服务架构_第6张图片

你可能感兴趣的:(springcloud,微服务)