1. SOA、分布式、微服务之间有什么关系和区别?
1.分布式架构指将单体架构中的各个部分拆分,然后部署到不同的机器或进程中去,SOA和微服务基本上都是分布式架构的
2. SOA是一种面向服务的架构,系统的所有服务都注册在总线上,当调用服务时,从总线上查找服务信息,然后调用
3.微服务是一种更彻底的面向服务的架构,将系统中各个功能个体抽成一个个小的应用程序,基本保持一个应用对应的一个服务的架构
SpringCloudAlibaba架构
2.微服务间的通信方式
1.同步通信:微服务之间通过请求-响应的方式进行通信,例如RESTful API和RPC。通信过程中,请求方需要等待响应方的返回结果,因此可靠性较高,但可能会出现请求排队、线程阻塞等问题,从而影响系统的响应速度和并发性能。
2.异步通信:微服务之间通过消息队列进行异步通信,例如Kafka和RabbitMQ。通信过程中,发送方向消息队列发送消息,接收方从消息队列中消费消息,消息传输以异步的方式进行,不需要等待接收方的响应。由于解耦性高,消息队列还可以支持发布-订阅模式,消息得以广播到多个服务中,助于构建高可伸缩的系统。不过异步通信也可能导致延迟较高,以及可靠性和容错性较差等问题。
3.事件驱动架构(EDA):微服务之间通过发布-订阅模式进行通信,例如Apache Kafka和AWS SNS/SQS。通信过程中,发布者发布事件,订阅者订阅事件,事件传递以异步的方式进行。通过EDA,不同服务之间可以实现松耦合通信,提高系统的可伸缩性和弹性,但需要谨慎处理网络分区等极端情况,以避免出现一致性等问题。
3.微服务架构常用组件
Spring Cloud常用组件及其简要介绍:
Eureka:服务注册与发现组件,可以通过RESTFUL接口来实现服务注册与发现,并提供心跳检测机制来保证服务可用性。
Ribbon:客户端的负载均衡组件,可以集成到RestTemplate、Feign等HTTP客户端中使用。
Feign:基于Ribbon和Hystrix的声明式服务调用组件,可以让我们更方便地实现服务之间的调用。
Hystrix:熔断器组件,可以在服务出现故障或异常时进行自动熔断,避免服务雪崩问题。
Zuul:API网关组件,可以对外部请求进行统一的路由、过滤和转发。
Config:分布式配置中心组件,可以将应用程序的配置信息集中管理,并支持动态刷新配置。
Bus:消息总线组件,可以用于在分布式系统中传递事件消息,如配置更新事件、状态变更事件等。
Stream:数据流处理组件,可以帮助我们从消息中间件中读取、处理和发送消息。
Sleuth:分布式跟踪组件,可以追踪请求在微服务架构中的传递过程,帮助我们快速定位问题根源。
Zipkin:分布式跟踪系统,可以用于聚合、可视化和分析分布式系统中的调用链路信息。
以上是Spring Cloud的一些常用组件,每个组件都有其独特的特点和功能,可以根据具体业务场景选择使用。
Spring Cloud Alibaba常用组件及其简要介绍:
Nacos:服务注册与发现、配置管理、流量管理平台,可以替代Eureka、Config、Ribbon等组件。
Sentinel:流量控制、熔断降级、系统负载保护等组件,可以替代Hystrix。
Dubbo:高性能Java RPC框架,可以用于实现微服务之间的远程调用。
RocketMQ:分布式消息中间件,支持消息的广播、点对点传输、顺序传输等模式。
Seata:分布式事务解决方案,可以保证跨多个数据库或跨多个服务的操作的一致性和完整性。
Alibaba Cloud SDK:阿里云服务API的封装,包括云服务器、对象存储、关系型数据库等。
Alibaba Cloud OSS:阿里云对象存储服务,可以用于存储静态资源文件。
Alibaba Cloud RDS:阿里云关系型数据库服务,可以提供MySQL、SQL Server、PostgreSQL等数据库实例。
Alibaba Cloud ACM:阿里云配置管理服务,可以实现应用程序的动态配置。
以上是Spring Cloud Alibaba的一些常用组件,每个组件都有其独特的特点和功能,可以根据具体业务场景选择使用。同时,Spring Cloud Alibaba也与Spring Cloud组件进行了无缝集成,提供了更加完备的微服务解决方案。