什么是微服务

1.3 微服务架构 - 图1

微服务是将单体应用拆分成多个服务,每个服务运⾏在其独⽴的进程中服务与服务间采⽤轻量级的通信机制互相协作。
总结:微服务架构应该具备以下特征:

  • 根据业务模块划分服务;
  • 每个微服务可以独立部署且相互隔离;
  • 通过轻量级API调用微服务服务
    • 通过 HTTPRPC 的方式调用;
  • 服务需保障良好的高可用性,每个服务可以水平扩展;
  • 实现服务的自动化部署;

    微服务和 SOA 的区别

    | | SOA | 微服务 | | —- | —- | —- | | 通信方式 | 基于 ESB,SOAP、WSDL 等重协议 | 点对点通信,开放式协议,如 RESTful、gRPC、或者是轻量级的二进制协议。 | | 数据管理 | 全局数据模型以及共享存储 | 每个服务独立模型和存储 | | 服务粒度 | 较粗 | 较细 | | 诞生的背景 | 企业级应用 | 互联网 | | 解决的问题 | 面向企业内,系统集成 | 面向最终产品,解决扩展,维护的问题 |

通信手段、数据等的不同只是表象,其本质区别还是由于两者诞生于不同历史时期,需
要解决的问题域不同。

  • SOA 解决的核心问题是复用
  • 微服务解决的核心问题是扩展

    微服务的优点

  • 按需伸缩,弹性扩展,解决系统资源浪费
    可以根据需求实现细粒度的扩展,系统中某个微服务遇到瓶颈,可以只针对该服务增加内存、升级CPU或增加节点;

  • 代码修改容易部署
    单体应用有修改需要重新部署整个应用,微服务进行修改,只需要重新部署该微服务;
  • 技术选型灵活
    单体应用技术选型受限,微服务可以灵活选择不同的技术;

    微服务不是银弹

  • 运维成本高
    运维工程师除了需要使用自动化技术来部署微服务(自动化部署),还需要对整个微服务系统进行有效的监控,并保证系统的高可用性,微服务架构的引入会带来运维成本的上升。

  • 分布式系统的复杂性
    微服务架构本质是分布式架构,每个服务可以部署到任意的机器上,对分布式系统而言,网络延迟、系统容错、分布式事务等问题都会给我们带来很大的技术挑战。
  • 通信成本较高
    每个微服务都在自己独立的进程中运行,那么客户端调用微服务,需要跨进程进行调用,而进程间的调用一定比进程内的调用更加消耗资源,从而带来更多通信成本的开销。
  • 协同代价

    1. 如果你经历过一个项目上线需要发布十几个应用,而这些应用又分别由多个团队在维护。<br /> 你就能深刻的体会到协同是一件多么痛苦的事情了。
  • 服务拆分需要很强的设计功力

    微服务的各种优势,其中一个重要的基础是对服务领域的正确切分如果使用了不合适的切分粒度,或者是错误的切分方法,都会让服务不能很好的实 现高内聚低耦合的要求。