架构演变及分布式解决方案

架构

单体架构

架构演变及分布式解决方案_第1张图片
所有的功能都集中在一个项目中,并部署在同一台服务器,往往一个功能的阻塞会导致整个应用的阻塞,最终导致整个服务器不
可用,随着业务模块的不断拓展,代码的可读性、维护性越来越差,测试成本也越来越高

单体架构下的集群部署:(Session共享问题:通过SpringSession + Redis实现分布式Session共享)
通过负载均衡器 + 多WEB容器实例实现水平负载,提升系统的并发性和高可用性,但还是不能解决一个模块的阻塞导致整个服务阻塞的问题

垂直架构

架构演变及分布式解决方案_第2张图片
为了避免单体架构上出现的代码维护以及阻塞问题,按照业务分组把单体应用拆成多个子系统应用
优点:
1、子系统间相互独⽴,互不影响
2、子系统拆分实现了流量分担,解决了并发问题
缺点:
每个子系统之间会冗余和其它子系统有关的业务代码

SOA架构(面向服务架构)

架构演变及分布式解决方案_第3张图片
将重复公用的功能抽取成为服务,以服务方式为子系统提供服务,各个系统与服务之间通过(RPC、Http)相互通信
优点:
1、解决了垂直架构的痛点(每个系统之间会冗余和其它系统有关的业务代码),提高了代码的复用性
缺点:
1、子系统和各服务之间的调用信息发生改变,需要在子系统中修改相关调用配置信息
2、子系统中调用多个服务时,某个服务的阻塞也会导致当前子系统中的业务不可用

微服务架构

相比于SOA架构,微服务架构中提供了很多特性:
1、服务的注册中心、服务的配置中心
2、网关、服务的负载均衡、服务的远程调用
3、服务的熔断、服务的限流、服务的降级

架构演变及分布式解决方案_第4张图片

微服务8大组件

注册中心(Consul、ZK、Eureka、Nacos)
配置中心(Nacos、Config、Apollo)

网关(Zuul、Gateway)
负载均衡(Ribbon、LoadBalance)
声明式远程调用(OpenFeign)

断路器(Hystrixs、Sentinel)
链路追踪(Skywalking、Zipkin、Sleuth)
日志监控(ELK)

微服务框架

SpringCloud

Eureka(注册中心) 
Apollo(配置中心)
OpenFeign(远程调用) 
Gateway(网关) 
Netflix.Ribbon(负载均衡) 
Netflix.Hystrixs(限流、熔断)

SpringCloudAlibaba

Nacos(注册中心) (配置中心)
OpenFeign(远程调用) 
Gateway(网关) 
LoadBalance(负载均衡)
Sentinel(限流、熔断)

分布式解决方案

分布式调度中心

  • PowerJob
  • Elastic-Job
  • XXL_JOB
    具体参考这篇文章

分布式消息中间件

  • kafaka
  • RocketMQ
    具体参考这篇文章

分布缓存

具体参考这篇文章

分布式锁

具体参考这篇文章

分布式事务

1、一个本地事务 + 一个分布式事务,这种情况最简单,根据分布式事务的执行情况对本地事务进行回滚/提交
2、一个本地事务 + 多个分布式事务,这种情况需要根据业务去做选择:
业务上必须要保证强一致性的,可以使用Seata
业务上可以容忍短暂不一致,但最终要一致,可以使用RocketMQ

Seata参考这篇文章
RocketMQ参考这篇文章

你可能感兴趣的:(微服务,微服务架构,分布式,架构,java,微服务)