当前位置 : 主页 > 编程语言 > java >

微服务架构的优缺点

来源:互联网 收集:自由互联 发布时间:2023-09-06
1微服务介绍 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 单体应用与微服务架构区别

1微服务介绍

随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?

单体应用与微服务架构区别

微服务架构的优缺点_缓存

如上图左侧为单体应用架构。在传统单体应用中,所有功能模块都在一个工程中编码、部署,即使是集群部署,也只是单体应用的水平复制。

微服务架构的优缺点_服务调用_02

如上图在微服务架构的项目中,每个应用会按照领域模型划分进行业务、功能聚合,由此拆分后聚合的应用往往:模型高度统一、职责清晰且收敛、应用与应用(领域与领域)之间边界清晰,并且提升了每个应用的独立性、扩展性。除了应用拆分维度,微服务架构也保证了每个应用可以使用独立语言开发、独立数据存储技术,只要能保持对外统一交互语言即可,存储模型差异如下:

应用拆分之后对应每个应用会独立、或共享一个数据库,数据库的拆分维度除了要考虑领域边界,还要更多的考虑每个数据库的QPS、TPS,避免高频写操作集中在一个DB,由此起到给数据库减压的功效。

基于上述分析,单体架构存在的问题主要集中在:功能混淆、边界模糊、维护成本高、可靠性差等角度,对于后续应用的升级、扩展同样存在瓶颈。因此随着互联网的发展,我们必须解决上述问题,而微服务就是这样一种架构模式。

微服务怎么理解

自2014年起,微服务架构由Martin Fowler、Adrain Cockcroft、Neal Ford等人接力进行介绍、完善、演进、实践后,一直维持着较高的热度直到现在,内容如下:

微服务架构是一种架构模式,它提倡将原本独立的单体应用,拆分成多个小型服务。这些小型服务各自独立运行,服务与服务间的通信采用轻量级通信机制(一般是基于HTTP协议的RESTful API),达到互相协调、互相配合的目的。被拆分后的服务都围绕着具体的业务进行构建,每个服务都能独立地进行开发、部署、扩展。由于相互独立,且采用轻量级通信机制,各个小型服务也能够使用不同的语言开发,也可以使用不同的数据存储技术。

微服务是一套经过漫长的架构演进、良好架构设计的分布式架构方案。从传统单体应用到分布式独立应用,从应用数据服务到引入缓存优化性能,从反向代理和CDN加速网站响应等等,技术架构不断演进的过程中,逐步出现前后端分离,数据读写分离,云原生、DDD领域驱动,最终孵化出如SpringCloud、SpringCloud Alibaba等成熟稳定的微服务架构方案。微服务的架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署和交付
  • 面向服务:微服务对外暴露业务接口,如RESTful API调用
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

2.微服务优缺点

优点:

  • 便于开发维护: 微服务基于领域模型拆分的应用,其内部模型高度统一,功能相对内聚,开发人员只需要对固定模型进行领域业务接口封装即可。
  • 技术栈开放: 因为微服务独立部署,独立开发,所以开发团队可以根据团队特点进行技术选型
  • 服务隔离升级: A服务技术升级,因为服务是单独部署,所以不在影响整体分布式架构的完整功能,只影响有交互的部分应用,并且这些问题也可以通过灰度、服务降级、服务熔断等方式进行处理,不会因为一个应用升级/错误导致整个项目都出现问题

缺点

  • 运维成本高:服务的增多意味着需要投入更多的运维成本,传统单体应用只有一个应用,但是微服务,可能需要几十甚至上百个服务相互协作才能正常运行。
  • 服务调用复杂: 微服务架构中,无法避免A服务调用B服务,B服务调用C服务,C服务继续调用D服务的情况,如果A服务调用异常,排查链路可能会从A->B->C->D,才能正常发现错误原因。
  • 分布式事务问题: 同上A->B->C->D长链路调用过程中,A修改自己数据,B修改自己数据,但是C服务出现异常,这时候就需要A,B都将事务回滚,这种情况单体服务可以很好完成,但是分布式情况下实现就比较服务了。
  • 学习成本高: 微服务学习除了需要一定基础之外:Spring、SpringMvc、MyBatis、SpringBoot、Maven、MySQL等,还需学习SpringCloud,中间件、缓存、Docker、文件服务器等多种技术,每一门学习都有很多难点需要克服。

3.通用微服务技术架构图

微服务架构的优缺点_服务调用_03

从架构图中,可以告诉大家我们要学习哪些微服务知识,主要包含一下知识:

  • 微服务技术
  • 异步通信技术
  • 缓存技术
  • 搜索技术
  • DevOps

我们再具体说一下,上面的技术又包含哪些内容要学习

微服务技术

微服务技术我们主要从以下部分进行学习:

  • 微服务治理
  • 注册发现
  • 远程调用
  • 配置管理
  • 网关路由

微服务技术

微服务技术我们主要从以下部分进行学习:

  • 微服务治理
  • 注册发现
  • 远程调用
  • 配置管理
  • 网关路由
  • 微服务保护
  • 流量控制

  • 系统保护

  • 熔断降级

  • 服务授权

  • 分布式事务

  • 分布式事务

  • TCC模型

  • AT模型

  • Seata

异步通信技术

异步通信技术我们主要从以下部分进行学习:

  • 异步通信
  • MQ消息模型
  • SpringAMQP
  • 消息问题堆积
  • 数据持久化
  • 可靠消息服务
  • 消息可靠性

  • MQ集群

  • 延迟队列

  • 消息幂等性

缓存技术

缓存技术我们主要从以下部分进行学习:

  • 分布式缓存
  • Redis缓存传统,雪崩
  • 多级缓存
  • OpenResty

  • 多级缓存

  • 缓存数据同步

  • Nginx本地缓存

  • Redis

  • Redis数据持久化

  • Redis主从复制

  • Lua脚本

  • Redis各种集群

搜索技术

搜索我们主要从以下部分进行学习:

  • 分布式搜索
  • DSL语句
  • ES集群

DevOps技术

DevOps我们主要从以下部分进行学习:

  • Docker技术
  • Docker
  • Dockerfile
  • DockerCompose
  • k8s
  • Jenkins

4.总结

本文介绍了微服务基本概念、演变过程,主要的原则及优缺点,最后谈到了微服务的实现方案之一,作为引文此章节偏理论知识一些。

上一篇:敏感数据的保护伞——SpringBoot集成jasypt
下一篇:没有了
网友评论