微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。
由于每个微服务相对简单,所以需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。
在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。
单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
用我的话来理解,就是 Spring Boot 不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架(不知道这样比喻是否合适)。
Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。
Spring Boot 的核心思想就是约定大于配置,多数 Spring Boot 应用只需要很少的 Spring 配置。采用 Spring Boot 可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。
核心功能组件:
配置中心SpringCloud Config
目前SpringCloud Config的使用主要是通过Git/SVN方式做一个配置中心,然后每个服务从其中获取自身配置所需的参数。
服务发现——Netflix Eureka(停更)
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
服务网关——Netflix Zuul
作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。
服务调用,客服端负载均衡——Netflix Ribbon
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。
服务降级,断路器——Netflix Hystrix
Netflix开源的一款容错框架,充当断路器,请求熔断与服务降级嘛,提供近实时的监控与告警。
除了以上的基础组件,还有其他几十种工具框架。
上面所说到的五种组件已经是元老级别的了,后续除了很更加好用的可替代方案。
是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。
服务配置:Config,Nacos(把Config替代了)
注册中心:eureka(停更)、Zookeeper、Consul(go语言编写)、Nacos
服务网关:Zuul,gateway(Spring自己推出的)旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注,例如:安全性,监视/指标和弹性。
服务调用:Ribbon、LoadBalancer(新出的)/ Feign(Netfilx公司不在更新)、OpenFeign(Spring公司自己出的,与Feign相当于葫芦娃兄弟,几乎一样)
服务降级:Hystrix(cloud自带的停更,国内依然很多使用,其思想很值得学习),resilience4j(国外推荐代替Hystrix),sentienl(国内一般推荐用这个,阿里出品)
服务总线:Bus(淘汰)Nacos(实现配置的动态刷新)
消息驱动: Stream-spring 用于与外部消息中间件集成的组件,用于创建绑定。例如,Kafka,RabbitMQ,RocketMQ。
分布式事务
Seata 是一款Alibaba开源的分布式事务解决方案,致力于在微服务下提供高性能和简单易用的分布式事务服务。并提供了 AT、TCC、SAGA 和 XA 事务模式。
性能比lcn要好,不会造成死锁的情况;
没有管理化界面,不能保证数据的强一致性,只能保证最终一致性;
TX-LCN 定位是于一款事务协调性框架,框架本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。
保证数据的强一致性;
性能不是特别强大,可能会造成死锁的现象
TX-LCN,Seata 分布式事务选型及对比
分布式事务六种解决方案
SpringSecurity、Shiro、Oauth2.0、Cas
Spring Cloud Security + Oauth2.0 + JWT
分布式定时任务对比