菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做

那挺好呀,微服务现在的确很流行

我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀

的确,微服务和SOA有相同之处

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。它是一种设计方法,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。

微服务架构:其实和 SOA 架构类似,微服务是在 SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

基于SOA架构的系统,模块在进行划分的时候,颗粒度比较粗,比如一个会员系统SOA,可能包含会员基本信息管理,会员关系管理,会员资产管理等模块,这些模块统一规划在会员管理服务,部署的时候也在相同的进程中。如果按照微服务的理念来做架构设计的话,会员关系管理可能会是一个独立部署的服务,其他模块类似。是否需要独立,架构师需要根据这个模块的业务来决定,需要考察这个模块是否有独立的必要性。

有的时候,一个系统的领域边界划分在SOA和微服务中可能相同。SOA和微服务本质上有着相同的架构思想,但是微服务根据业务形态又引入了组件化和领域建模的架构理念,在多数的应用场景中比SOA有着更易维护,扩展方便的优点。

没太听明白,SOA和微服务有什么相同和不同吗

相同点和不同点都很多

无论是SOA还是微服务架构,都是系统发展到一定程度衍生而出的一种解决方案,都是为了解决系统存在的弊端而产生的架构方案。当系统一开始采用集中化部署的时候,随着系统模块越来越多,自然而然就产生了拆分的方案。

无论是SOA还是微服务架构都是根据业务进行拆分的结果,但是他们又有着很多不同。

服务通信

在SOA系统架构中,服务之间的调用采用ESB(企业服务总线)来进行通信。ESB负责服务定义、服务路由、消息转换、消息传递,总体上是重量级的实现。简单来说ESB就是一根管道,用来连接各个服务节点。

微服务强调使用统一的协议和格式,例如,RESTful 协议、RPC 协议,无须 ESB 这样的重量级实现。也有的系统为了统一管理微服务系统,会部署一个统一的网关系统,网关是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能,每个服务都需要去服务管理中心去主动注册,这样才能实现服务的自动发现。

服务划分粒度

整体上来说,SOA 的服务粒度要粗一些,而微服务的服务粒度要细一些。例如,对一个大型企业来说,“员工管理系统”就是一个 SOA 架构中的服务;而如果采用微服务架构,则“员工管理系统”会被拆分为更多的服务,比如“员工信息管理”“员工考勤管理”“员工假期管理”和“员工福利管理”等更多服务。

至于微服务的粒度要到什么程度,仁者见仁,智者见智,有的小伙伴说直到服务不能拆分为止,其实我认为这种想法是错的,一个微服务的拆分粒度,还是要根据你的具体业务来划分,根据你的依赖模块关系来划分,不要盲目拆分成太多颗粒度小的服务,这样在治理上会给团队带来很多困扰。举一个简单例子:员工管理系统中,如果考勤管理和假期管理之间业务关系非常密切,而且有很多操作需要事务性原子操作,你可以考虑将这两个微服务合并。

SOA鼓励组件的共享,而微服务尝试通过“上下文边界”来最小化共享。

服务交付

无论是SOA还是微服务,每个独立的系统都可以采用不同的编程语言来开发,只要对外提供的接口协议符合标准就可以。在开发方面,由于微服务会采用划分粒度更小的策略,所以实际情况中服务的数量会比SOA架构方式要多很多,微服务的架构理念要求“快速交付”,相应地要求采取自动化测试、持续集成、自动化部署等敏捷开发相关的最佳实践。如果没有这些基础能力支撑,微服务规模一旦变大(例如:超过 20个微服务),整体就难以达到快速交付的要求,这也是很多企业在实行微服务时踩过的一个明显的坑,就是系统拆分为微服务后,部署的成本呈指数上升。

如果企业内部快速交付的基础设施比较薄弱,采用微服务架构方式后期也许会遇到部署成本的问题。

适用场景

微服务适合那些需要快速交付,比较轻量级的互联网应用。现代互联网变化迅速,每个系统都需要快速尝试,快速交付,这也是产生微服务架构的主要原因之一。由于每个服务都可以单独部署,所以在那些大并发的情况下,更容易横向扩展,就算是某个服务down掉,也不会影响其他的服务正常运行。而SOA由于ESB的存在,一旦ESB挂掉,会影响到所有系统正常运行。

SOA相比较微服务,更适合那些访问量较小,但是业务体系庞大,复杂的企业级系统。当一个企业级的系统发展到一定程度,SOA会应运而生,而且这个系统还会延续很长时间,期间还会采用不同的技术栈来开发不同的系统,这些系统会不断集成进来,如果想要推倒重来或者进行大规模的优化,人力物力上根本得不偿失,所以这样的系统只能以兼容的方式继续,而承担各个异构系统通信的重要组件就是ESB。

听你这么一讲,我好想明白了很多,下次出去面试就又多了一分把握

每种技术都有它自己的适用场景,不要被微服务的吹嘘迷失了方向

SOA和微服务本质上是两种不同的架构设计理念,即使他们在服务这个概念和划分思想上有交集。由于是两种不同的架构模式,所以在应用上并不存在孰优孰劣,只有是否合适之分。具体采用哪种架构设计,最终还是要取决于你的应用场景和目的。SOA更适合需要与许多其他应用程序集成的大型复杂企业应用程序环境。这就是说,小型应用程序不适合SOA架构,因为它们不需要消息中间件组件。而微服务架构,在另一方面,是更适合于较小和良好的分割,基于Web的系统。如果你开发的是互联网应用,并且没有历史遗留问题,请优先考虑采用微服务架构。

功能 SOA 微服务
系统划分 大块业务逻辑 单独任务或小块业务逻辑
系统通信 ESB 统一的协议标准
服务交付 手工交付 自动化快速交付
适用场景 企业内部 互联网应用
管理 着重中央管理 着重分散管理
扩展 难扩展 单个服务很容易横向扩展

关注后回复:“大礼包”和“福利”,领取惊喜

长按识别二维码关注

在看点一下

为什么我会了SOA,你们还要逼我学微服务?相关推荐

  1. 程序人家:你的老板逼你上微服务了吗??

    可均可可 读完需要 10 分钟 速读仅需 3 分钟 这些年软件的设计规模越来越庞大,业务需求也越来越复杂,针对系统的性能.高吞吐率.高稳定性.高扩展等特性提出了更高的要求. 可以说业务需求是软件架构能 ...

  2. 微服务之如何从零搭建(吹牛逼篇)

    [版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 概述 IT世界唯有变化才是永恒的.这不微服务刚兴起没有几年,现如今已经在全力向云原生时代过度了,有人称其为后微服务时代.云原生 ...

  3. SOA VS 微服务

    微服务是近几年非常火热的架构设计理念,大部分人认为是 Martin Fowler提出了微服务概念,但事实上微服务概念的历史要早得多,也不是 Martin Fowler创造出来的, Martin Fow ...

  4. 微服务是否使SOA变得无关紧要?

    服务导向架构(简称SOA,service-oriented architecture)已经死亡?你可能会这么想. 但其实不然.的确,随着新技术的出现,SOA本身的价值可能已经大不如前,但是SOA的遗产 ...

  5. 集群服务器分布式iis_集群,分布式,微服务,SOA概念

    概念: 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 1:分布式是指将不同的业务分布在不同的地方.而集群指的是将几台服务器集中在一起,实现同一业务. 分布 ...

  6. SOA和微服务之间的区别

    近几年,我们有很多文章对SOA和微服务之间的不同点和相似点进行了分析.有些人认为SOA有很多地方是值得微服务学习的,而有些人则认为区别对待微服务和SOA会更好.而Neal Ford认为,将单体迁移到面 ...

  7. 微服务架构和SOA的区别

    1. 2. 4 微服 务 架构 与 SOA 的 区别 1. 3. 1 微 服务 的 拆分 对于 一般 的 公司 而言, 实践 微 服务 有 非常 大的 技术 挑战, 所以 并不是 所有 的 公司 都 ...

  8. 阿里P8架构师谈:从单体架构、到SOA、再到微服务的架构设计详解

    本文涉及的内容以及知识点如下: 1.单体架构 2.单体架构的拆分 3.SOA与微服务的区别 4.微服务的优缺点 5.微服务的消息 6.服务集成 7.数据的去中心化 单体架构 Web应用程序发展的早期, ...

  9. Restful、SOAP、RPC、SOA、微服务之间的区别

    一.介绍Restful.SOAP.RPC.SOA以及微服务 1.1.什么是Restful? Restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构,而满足这些约束条件和原则的应用程序或 ...

最新文章

  1. 华为linux笔记本开售,华为 MateBook D Linux 版明天开售 一种价格两种版本
  2. js 中的[] {}是什么意思
  3. kalman滤波在雷达目标跟踪中的应用_简述Automotive radar中的多目标跟踪处理
  4. goroutine与panic不得不说的故事
  5. IDEA 点击进入方法内部_一份最详细的 IDEA调试教程,让bug无处藏身!
  6. python之集合操作
  7. 教你如何监控 Apache?
  8. VB 获取光标在TextBox、RichTextBox中所在的位置
  9. VS2012下基于Glut OpenGL glEdgeFlag示例程序:
  10. Material Design使用集合
  11. bootstrap 模态框modal
  12. Dell服务器重装系统
  13. linux bond服务是什么,linux 查看bond
  14. Vue项目区分开发环境问题
  15. 2-3、迭代法计算定积分
  16. 蔚来回应测试车坠楼:初步确认为意外事故;首发苹果M2,新MacBook Pro 13英寸正式开售:9999元起|极客头条
  17. 论文笔记 Multiple Instance Detection Network with Online Instance Classifier Refinement - CVPR 2017
  18. Mocha Pro 平面跟踪插件
  19. 前端学习(三)UI设计
  20. 更改图像长宽 厘米为单位

热门文章

  1. c++标准库中,含有链表的类list
  2. vim cheat-sheet
  3. Teams bot的调用限制
  4. 路由销毁上一页_路由器原理(数据通信)
  5. 神经网络- receptive field
  6. hdu 1556 Color the ball 线段树 区间更新
  7. 如何节约数据中心空间
  8. HttpHandler浅析
  9. OAuth 2.0 扩展协议之 PKCE
  10. ASP.NET Core启动地址配置方法及优先级顺序