ITPub博客

首页 > 数据库 > 数据库开发技术 > 深入理解微服务架构:银弹 or 焦油坑?

深入理解微服务架构:银弹 or 焦油坑?

原创 数据库开发技术 作者:greencoatman 时间:2024-05-03 13:51:13 0 删除 编辑

微服务与 SOA 的关系

对于熟悉SOA的人来说,当他们首次接触到微服务概念时,可能会感到困惑:既然已经有了SOA,为什么还要引入微服务呢?而当他们稍微了解微服务后,可能会更加迷惑:这和SOA有什么不同吗?

关于SOA与微服务的关系和区别,通常有以下几种流行的观点:

  • 微服务是SOA的一种实现:从这个角度看,SOA被视为一种较为宽泛的架构理念,而微服务则是这一理念的具体实践方式。例如,有人会说“微服务是通过HTTP RESTful协议实现SOA中的ESB”或者“用SOA构建单一系统即可视为微服务”,亦或“微服务是SOA的更细粒度形式”。






  • 微服务是去除ESB的SOA:这个观点认为,传统的SOA架构中最受批评的部分是庞大、复杂且低效的ESB(企业服务总线)。去掉ESB,并采用轻量级的HTTP实现,这样就形成了微服务架构。




  • 微服务与SOA在本质上是不同的架构理念:根据这种观点,尽管微服务和SOA在某些方面相似,但在本质上是两种不同的架构设计。它们的相似之处在于都强调通过服务的拆分来解决可扩展性问题,不同之处则在于使用ESB的选择、服务的粒度大小、以及架构设计的目标等方面。



虽然从表面上看,SOA和微服务的概念难以区分,但如果深入比较这两种架构的具体实践,就会发现它们在实际应用中表现出不同的特点和优势。

服务的粒度一般而言,SOA架构中的服务粒度较粗。比如在一个大型企业中,"员工管理系统"可能被视为一个单一的服务。而在微服务架构中,这个"员工管理系统"会被细分为多个独立的服务,如"员工信息管理"、"员工考勤管理"、"员工假期管理"和"员工福利管理"等。

服务间通信在SOA架构中,ESB(企业服务总线)是服务间通信的关键,它负责服务定义、路由、消息转换和传递,通常是较为重量级的实现。相比之下,微服务倡导使用简单的通信协议和格式,如RESTful和RPC,不依赖于像ESB这样的重量级组件。Martin Fowler描述微服务的通信方式为“Smart endpoints and dumb pipes”,意味着尽管终端聪明,但传输管道应简单到只负责传输消息,不处理消息的具体内容和格式。

服务交付SOA对服务的交付模式没有特别的要求,主要是考虑到兼容已有的复杂系统。而微服务架构强调“快速交付”,这通常要求实施自动化测试、持续集成和自动化部署等敏捷开发实践。没有这些支持,微服务的规模一旦扩大,比如超过20个服务,部署和管理的成本将显著增加,这是实施微服务时常见的问题。

应用场景SOA适合那些庞大、复杂且多样化的企业级系统,这些系统通常包含多年发展的不同技术和外部采购的解决方案,因此需要一个兼容各种技术的架构。ESB在这种场景下起到了关键的兼容作用。而微服务则更适合快速发展、以Web为基础的轻量级系统,这些系统需要快速迭代和部署,且主要接口通常是基于HTTP RESTful风格的。

综合上述分析,我将 SOA 和微服务对比如下:


微服务的陷阱

尽管微服务在理论上看似具有显著优势于SOA,很多团队在实际应用时往往会不加思考地选择微服务,而忽略了团队规模、业务发展和技术基础等关键因素。这种急功近利的做法通常会使团队陷入微服务的种种难题中。

我们来探讨微服务可能带来的一些常见问题:

服务划分的过度细化和复杂性增加微服务通过将系统内部的复杂性转化为系统间的复杂性,虽然降低了单个服务的复杂度,但却增加了整体系统的复杂性。当服务数量增加时,系统整体的复杂度以指数形式增长,如同从粗粒度的几个服务划分到细粒度的多个服务,虽然每个服务简化了,但服务间的依赖关系却变得更加复杂。


服务数量增多导致团队效率降低“微”字可能误导团队过分细化服务划分,如5到6个人的团队分担30多个微服务,平均每人需维护5个以上微服务。这种做法明显影响了工作效率,因为即便是简单的需求也可能涉及多个微服务,增加了设计、开发、测试和部署的复杂性。

调用链过长导致性能下降微服务之间通常通过网络进行HTTP或RPC调用,每次调用都涉及网络延迟。如果一次业务处理需要多次服务调用,总的延时可能导致性能问题,这在高性能需求的场景下尤为明显。

问题定位困难在微服务架构下,一个用户请求可能需要多个服务共同处理,任何一个服务的故障都可能导致整个请求失败。由于服务数量多,故障可能会扩散,使得快速定位问题源变得更加困难。


缺乏自动化支撑导致的交付难题如果缺乏自动化测试、部署和监控系统,微服务的管理和运维将变得异常困难。这不仅降低了快速交付的能力,甚至可能导致效率低下。


服务治理问题随着微服务的数量和种类增加,如果没有有效的服务治理机制,系统将难以管理。服务路由、故障隔离、服务注册和发现等问题,如果依赖人工管理,将使系统运营陷入混乱。

原文作者:二进制跳动;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-07-08

  • 博文量
    312
  • 访问量
    141140