微服务与 SOA

  • 注:文章来源:极客时间的专栏《从0开始学架构》

关于SOA和微服务的关系和区别,大概分为下面几个典型的观点

一、微服务是SOA的实现方式
  • 观点认为SOA是一种架构理念,而微服务是SOA理念的一种具体实现方法
  • 例如,“微服务就是使用HTTP RESTful协议来实现ESB的SOA” “使用SOA来构建单个系统就是微服务”和“微服务就是更细粒度的SOA”

二、微服务是去掉ESB后的SOA
  • 观点认为传统SOA架构最广为人诟病的就是庞大、复杂、低效的ESB,所以将ESB去掉,改成轻量级的HTTP实现,就是微服务

三、微服务是一种和SOA类似但本质上不一样的架构理念
  • 类似点在于二者都关注“服务”,都是经过服务的拆分来解决可扩展性问题
  • 本质上不一样的地方在于几个核心理念的差别:是否有ESB、服务的粒度、架构设计的目标

SOA和微服务的对比

一、服务粒度
  • SOA的服务粒度要粗一些,而微服务要细一些
  • 例如,对一个大型企业来讲,“员工管理系统”就是一个SOA架构中的服务;而若是采用微服务架构,则“员工管理系统”会被拆分为更多的服务,好比“员工信息管理”“员工考勤管理”“员工假期管理”和“员工福利管理”等更多服务
二、服务通讯
  • SOA采用了ESB做为服务间通讯的关键组件,负责服务定义、服务路由、消息转换、消息传递,整体上是重量级的实现;微服务推荐使用统一的协议和格式,例如,RESTful协议、RPC协议,无须ESB这样的重量级实现
三、服务交付
  • SOA对服务的交付并无特殊要求,由于SOA更多考虑的是兼容已有的系统;微服务的架构理念要求“快速交付”,相应地要求采起自动化测试、持续集成、自 动化部署等敏捷开发相关的最佳实践
四、应用场景
  • SOA更加适合于庞大、负责、异构的企业级系统,这类系统都发展多年,采用不一样的企业级技术,有的是内部开发的,有的是外部购买的,没法彻底推倒重来 或者进行大规模的优化和重构,因为成本和影响太大,只能采用兼容的方式进行处理,而承担兼容任务的就是ESB
  • 微服务更加适合于快速、轻量级、基于Web的互联网系统,这类系统业务变化快,须要快速尝试、快速交付;虽然开发技术可能差别很大(Java、C++、.NET等),但对外接口基本都是提供HTTP RESTful风格的接口,无须考虑在接口层进行相似SOA的ESB处理
SOA和微服务对好比下:

微服务的陷阱

一、服务划分过细,服务间关系复杂

二、服务数量太多,团队效率急剧降低
三、调用链太长,性能降低
四、调用链太长,问题定位困难

五、没有自动化支撑,没法快速交付
六、没有服务治理,微服务数量多了后管理混乱

注:有兴趣了解极客时间专栏的同窗,能够查看极客时间专栏—可提供返现服务架构

相关文章
相关标签/搜索