page contents

架构:微服务 VS SOA

SOA在早些年被提出来,是一种面向服务的架构。由于其比较厚重,一般只在大公司有一些落地。在这几年微服务的概念又被提了出来,而且非常火热。SOA与微服务都提到了服务,那么二者有什么区别呢?

attachments-2023-03-kQtX7Pdt6405883f9282e.jpeg
SOA在早些年被提出来,是一种面向服务的架构。由于其比较厚重,一般只在大公司有一些落地。在这几年微服务的概念又被提了出来,而且非常火热。SOA与微服务都提到了服务,那么二者有什么区别呢?

f42e826f90914bbfb832d3ab6be2e05a~noop.image?_iz=58558&from=article.pc_detail&x-expires=1678688667&x-signature=%2BAE70V%2BCfj7UMV6JAPk2foLBUYw%3D

如上图,SOA将服务拆分,拆分的力度较大,拆分的目的是为了服务的共享。整体对外提供服务的是业务服务,而业务服务的能力是通过编排企业服务达到的。企业服务又会编排应用服务,应用服务实现自身能力的时候又会调用基础服务。这样的架构也会导致这样的组织结构。这些不同类型的服务分别又不同的团队负责开发。SOA的一个显著特点就是平台中间件的存在,也称为EBS。平台中间件在SOA中比较厚重。为了整合这些服务,需要平台中间件进行粘合。平台中间件一般会提供这些能力:1.协议的转化。一般SOA里面的服务所使用的协议是多样的。比如一边是json,一边是xml,又比如一边提供http服务,一边提供rpc服务。对于协议的转换可以做到平台中间件里面。2.服务的路由。有些平台中间件提供服务的注册,实现服务发现。在A服务调用B服务的时候,中间件可以根据负载或者实例的健康状况选择服务。3.可以集成一些如熔断等能力。4.可以实现鉴权或者敏感信息的过滤等。平台中间件的厚重性也是很多公司放弃SOA的原因。但是对于非常复杂的企业应用,SOA还是很有用处的。

fd0f1d066c3043fda9d59d1435d12f13~noop.image?_iz=58558&from=article.pc_detail&x-expires=1678688667&x-signature=jJNtZ3mMiNYLWzuWjubkRS1FOaw%3D

从上图发现微服务的架构要简单得多。这也是很多人钟爱微服务的原因。拆分好的微服务一般比较小,三个人左右就可以负责一个微服务。微服务的原则是“能不共享就不共享”,与SOA的“能共享就共享”的原则正好相反。正是因为微服务的独立性,所以微服务可以被独立部署,可以快速启动,可以使用异构的技术,可以快速重构。也是因为独立性的原因,一般微服务会违背“DRY”,会有一些重复代码散落在不同的服务中。另外,因为拆分服务的时候,数据库也是要被拆分的,所以也会存在一部分数据的冗余。在微服务架构中的API网关并不是SOA架构中的EBS。API网关要轻量很多。我们提到微服务,常常把“微”作为核心特点。在真正拆分服务的时候,也要注意,按照业务边界拆分,不能过于“微”。因为服务过细,就会意味着服务数量很多,服务的依赖和交互就会很复杂,运维也很痛。另外,如果出现为了响应一次请求需要A调用B,B调用C,C调用D,D调用E的情况,那么可能你的服务拆分得可能过于细了或者服务的边界找错了。过长的调用链会导致性能的下降,毕竟增加了那么多次网络交互。还有一种情况就是,当你发现实现事务非常困难的时候,把涉及事务的几个服务合到一起也许是个好主意。


上面简单得对比了一下SOA与微服务的差别,后续的文章会继续介绍如果构建微服务,包括API网关的构建、服务发现、故障隔离、跨服务事务等。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

关注下方微信公众号:java圈子,获取价值999元全套java入门到进阶的学习资料以及教程,还有java技术交流群一起交流学习哦。
attachments-2023-03-srqsPSnc64058892e2ba0.jpg

  • 发表于 2021-12-17 09:20
  • 阅读 ( 608 )
  • 分类:Java开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章