微服务的定义:
维基上对其定义为:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体 ,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API 也可以使用RPC)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
从技术维度理解:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。
微服务的框架用哪个 ?
Spring Cloud Alibaba 是国产的微服务开发一站式解决方案,出自阿里团队,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。
相比 Spring Cloud 官方标准,Spring Cloud Alibaba 提供了更完整的功能、更好用的API,同时在中文的加持下让复杂的微服务架构变得不再高不可攀,目前 Spring Cloud Alibaba 已经是事实上的国内微服务技术标准,这也是我为什么极力推荐学习 Spring Cloud Alibaba 的重要原因。本教程案例基于 Spring Cloud Alibaba 框架完成。
Spring Cloud Alibaba的主要组件包括
Spring Cloud Alibaba是一个基于Spring Cloud的生态体系,提供了一系列的阿里巴巴分布式系统解决方案,其中包含了五大组件:Nacos、Sentinel、Dubbo、RocketMQ和Seata。
Nacos是阿里巴巴开源的一款注册中心和配置中心,它具有更灵活、更易于扩展、更强大的动态服务发现、配置管理和服务管理能力
Sentinel是一款面向分布式服务架构的实时流量控制、熔断降级降权、系统负载保护等多种服务保护功能的开源框架,它可以在几乎所有的微服务框架中无缝集成,具有强大的实时监控能力。
Dubbo是一款高性能、轻量级的RPC框架,它可以帮助用户快速构建基于Java的分布式应用程序,提供了负载均衡、服务发现、服务治理等一系列微服务必备的组件。
Seata是一个易于使用、高效、稳定的分布式事务解决方案,它可以帮助用户解决分布式场景下的事务一致性问题,提供了多种分布式事务协调支持。
RocketMQ是一个高性能、低延迟、高可用、分布式消息中间件,它可以支持海量的消息存储并且提供多种可靠的消息传输保障方式。
其他类似组件
Eureka:Eureka是一种服务注册和发现的组件,它允许服务将自己注册到Eureka服务器,并允许其他服务通过查询Eureka服务器来发现可用的服务实例。
Ribbon:Ribbon是一个负载均衡组件,它用于在客户端之间分发负载,并提供了多种负载均衡策略,例如轮询、随机等。
Feign:Feign是一个声明式的Web服务客户端,它简化了通过HTTP调用远程服务的过程,开发者只需要编写接口并使用注解来描述服务调用的细节,而不需要手动编写HTTP请求代码。
Hystrix:Hystrix是一个容错和延迟容忍的库,它旨在提高分布式系统的弹性和韧性。它通过隔离和限制服务之间的依赖关系,以及提供故障处理和回退机制来保护系统免受故障的影响。
Zuul:Zuul是一个网关服务,它提供了动态路由、负载均衡、安全认证等功能。通过Zuul,开发者可以将请求路由到不同的后端服务,并进行统一的权限验证和访问控制。