SOA和微服务

一、面向服务的架构SOA

SOA代表了面向服务的架构。 SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能。

面向服务的架构(Service-Oriented Architecture)是一种软件体系结构,应用程序的不同组件通过网络上的通信协议向其他组件提供服务。通信可以是简单的数据传递,也可以是两个或多个服务彼此协调连接。这些独特的服务执行一些小功能,例如验证付款、创建用户帐户或提供社交登录等。

面向服务的架构不太关于如何对应用程序进行模块化构建,更多的是关于如何通过分布式、单独维护和部署的软件组件的集成来组成应用程序。这些通过技术和标准来实现,通过技术和标准使得组件能够更容易地通过网络(尤其是IP网络)进行通信和协作。

SOA架构中有两个主要角色:服务提供者(Provider)和服务使用者(Consumer)。而软件代理则可以扮演这两个角色。该Consumer层是用户(人、应用程序或第三方的其它组件)与SOA交互的点,和Provider层则由SOA架构内的所有服务所构成。

SOA首先在90年代中期得名,当时一家名为Gartner Group的公司认识到了这个软件架构的新趋势,并在全球推广。通过这样做,他们设法大大加快了这种架构模式的采用和进一步发展。然而,使用分布式服务作为软件体系结构的最早记录可追溯到二十世纪80年代初。

1.1 什么是合同,地址和绑定?

这是三个SOA的标准术语。每个服务都必须公开一个或多个端点,以便让该服务提供给客户端调用。

  • 合同是两方或多方之间的协议。它定义了一种客户端如何与服务通信的协议。从技术上讲,它有描述参数和返回值的方法。
  • 地址表明在哪儿能找到这种服务。地址是一个URL,它指向服务的位置。
  • 绑定是决定这个端点如何可以访问。它决定了如何完成通信。例如,你暴露你的服务,可以使用SOAP over HTTP或通过TCP的BINARY进行访问。因此,对于这些通信介质将被创建两个绑定。

二、微服务架构

微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步。基本上,这种架构类型是开发软件,网络或移动应用程序作为独立服务套件(又称微服务)的一种特殊方式。这些服务的创建仅限于一个特定的业务功能,如用户管理、用户角色、电子商务车、搜索引擎、社交媒体登录等。此外,它们是完全独立的,也就是说它们可以写入不同的编程语言并使用不同的数据库。集中式服务管理几乎不存在,微服务使用轻量级HTTP、REST或Thrift API进行通信。

这个词本身起源于2011年5月在威尼斯附近举行的软件架构师研讨会。他们第一次使用“微服务”这个术语来描述参与者看到的一个共同的架构风格,其中许多参会者都在探索相似的内容。2012年5月,同一个团队决定将“微服务”作为最合适的名称。然而实际上,微软、亚马逊、Netflix和Facebook等主要的科技公司已经在微服务架构方面工作了十多年。

乍一看,微服务架构似乎谈论的是与SOA相同的事情。不过,如果引用微软服务领域的先驱Martin Flower的话,他曾经说过,“我们应该把SOA看作微服务的超集”。

三、架构演进

技术为业务而生,架构也为业务而出现,当然SOA和微服务也是因为业务的发展而出现。出现SOA和微服务框架与业务的发展、平台的壮大密不可分,下面借用dubbo的网站架构发展图和说明:
在这里插入图片描述

  • 单一应用架构
    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
    此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。

  • 垂直应用架构
    当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
    此时,用于加速前端页面开发的 Web框架(MVC) 是关键。

  • 分布式服务架构
    当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
    此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。

  • 流动计算架构
    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
    此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

平台随着业务的发展从 All in One 环境就可以满足业务需求(以Java来说,可能只是一两个war包就解决了);发展到需要拆分多个应用,并且采用MVC的方式分离前后端,加快开发效率;在发展到服务越来越多,不得不将一些核心或共用的服务拆分出来,其实发展到此阶段,如果服务拆分的足够精细,并且独立运行,我觉得就可以将之理解为一个微服务了。

那么,SOA与微服务差异在哪里呢?可以说,两种架构比起不同的架构有更多的相似之处,然而,它们是两种不同类型的架构。下面会详细分析这一点。

三、区别

在这里插入图片描述
下面进一步解释上表所述的不同之处:

  • 开发方面 - 在这两种体系结构中,可以使用不同的编程语言和工具开发服务,从而将技术多样性带入开发团队。开发可以在多个团队中组织,但是在SOA中,每个团队都需要了解常见的通信机制。另一方面,使用微服务,服务可以独立于其他服务运行和部署。因此,频繁部署新版本的微服务或独立扩展服务会更容易。

  • “上下文边界” - SOA鼓励组件的共享,而微服务尝试通过“上下文边界”来最小化共享。上下文边界是指以最小的依赖关系将组件及其数据耦合为单个单元。由于SOA依靠多个服务来完成业务请求,构建在SOA上的系统可能比微服务要慢。

  • 通信 - 在SOA中,ESB可能成为影响整个系统的单一故障点。由于每个服务都通过ESB进行通信,如果其中一个服务变慢,可能会阻塞ESB并请求该服务。另一方面,微服务在容错方面要好得多。例如,如果一个微服务存在内存错误,那么只有该微服务会受到影响。所有其他微服务将继续定期处理请求。

  • 互操作性 - SOA通过消息中间件组件促进了多种异构协议的使用。微服务试图通过减少集成选择的数量来简化架构模式。因此,如果您想要在异构环境中使用不同协议来集成多个系统,则需要考虑SOA。如果您的所有服务都可以通过相同的远程访问协议访问,那么微服务对您来说是一个更好的选择。

  • 大小Size - 最后一点但并非最不重要的一点,SOA和微服务的主要区别在于规模和范围。微服务架构中的前缀“微”是指内部组件的粒度,意味着它们必须比SOA架构的服务往往要小得多。微服务中的服务组件通常有一个单一的目的,他们做得很好。另一方面,在SOA服务中通​​常包含更多的业务功能,并且通常将它们实现为完整的子系统。

四、总结

我们不能简单地说一种架构比另一种架构更好。这主要取决于您正在构建的应用程序的目的。SOA更适合需要与许多其他应用程序集成的大型复杂企业应用程序环境。这就是说,小型应用程序不适合SOA架构,因为它们不需要消息中间件组件。而微服务架构,在另一方面,是更适合于较小和良好的分割,基于Web的系统。另外,如果您正在开发移动或Web应用程序,那么微服务作为开发人员可以为您提供更大的控制权。最后,我们可以得出结论,因为它们服务于不同的目的,微服务和SOA确实是不同类型的体系结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的.NET程序员,相信传统的.NET应用的开发方式已经深深地烙印…

下一代微服务架构基础:ServiceMesh?

最近,ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础。作为架构师,如果你现在还不了解 ServiceMesh 的话,是否感觉有点落伍了&…

ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记

本文结构先决条件升级目标框架(Target Framework)的版本过时的IHostingEnvironment与IApplicationLifetime对象Endpoint Routing与AddMvc中间件Swashbuckle.AspNetCore总结手头有个ASP.NET Core 2.0的项目,打算将里面的依赖包进行一个版本升级…

常见消息队列对比

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,Rabbit…

Precision-Recall Curve

原文出自:http://blog.csdn.net/pirage/article/details/9851339 最近一直在做相关推荐方面的研究与应用工作,召回率与准确率这两个概念偶尔会遇到, 知道意思,但是有时候要很清晰地向同学介绍则有点转不过弯来。 召回率和准确率是…

2019 中国.NET 开发者峰会正式启动

2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.NET基金会,Google,微软,AWS三大云厂商已经齐聚.NET基金会,在平台项目中,.NET平台上有…

聊一聊顺序消息(RocketMQ顺序消息的实现机制)

本文来自:https://www.cnblogs.com/hzmark/p/orderly_message.html 当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系。 比如事件A发生在下午3点一刻&#…

如何摆脱「技术思维」的惯性?

大家好,我是Z哥。虽然从标题上看,这篇文章是写给“技术人”的,但从广义上来说,只要你是一位以理性见长的人,那么这篇文章要讲的东西可能会与你有关。先问大家一个问题。如果你现在打算做一件事A,它的目的是…

RocketMq重试及消息不丢失机制

1、消息重试机制 由于MQ经常处于复杂的分布式系统中,考虑网络波动、服务宕机、程序异常因素,很有可能出现消息发送或者消费失败的问题。因此,消息的重试就是所有MQ中间件必须考虑到的一个关键点。如果没有消息重试,就可能产生消息…

cmake编译opencv3.0

本文参照了 http://www.huqiwen.com/2012/11/27/compile-opencv-243-in-visual-studio-2012/ 安装CMake 从CMake的官方网站下载最新版的CMake。http://www.cmake.org/cmake/resources/software.html,选择Windows (Win32 Installer)平台的进行下载。 安装时请勾选…

【 .NET Core 3.0 】框架之五 || JWT权限验证

前言关于JWT一共三篇 姊妹篇,内容分别从简单到复杂,一定要多看多想:一、Swagger的使用 3.3 JWT权限验证【修改】二、解决JWT权限验证过期问题三、JWT完美实现权限与接口的动态分配这里一共三个文章,目前是第一篇,剩下两…

OpenCV Stitching 工程搭建

转自http://www.tuicool.com/articles/fMbUfaF Opencv中提供Stitcher类,实现了多图像自动拼接,Opencv是开源的,程序实现的源代码都在Opencv安装文件中,以及Opencv提供的函数查询手册和Opencv教程都可以在…

asp.net core 3.0 更新简记

asp.net core 3.0 更新简记Intro最近把活动室预约项目从 asp.net core 2.2 更新到了 asp.net core 3.0,记录一下,升级踩过的坑以及经验总结,包括但不限于TargetFramework ( netcoreapp2.2 需要更新为 netcoreapp3.0)DependencyHost/Environme…

kafka吞吐量高的原因

kafa 吞吐量高的原因 1、顺序读写 kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能 顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写 2、零拷贝 在Linux kernel2.2 之…

【 .NET Core 3.0 】框架之三 || swagger的使用

一、为什么使用Swagger上文中已经说到,单纯的项目接口在前后端开发人员使用是特别不舒服的,那所有要推荐一个,既方便又美观的接口文档说明框架,当当当,就是Swagger,随着互联网技术的发展,现在的…

MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)

1、kafka主从同步与高可用 https://1028826685.iteye.com/blog/2354570 http://developer.51cto.com/art/201808/581538.htm 2、MQ有可能发生重复消费,如何避免,如何做到幂等 2.1 MQ消息发送 1、发送端MQ-client(消息生产者:Producer)将消…

微软编程题:寻找最小的k个值

转载自:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数 题目描述:5.查找最小的k个元素 题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5&#xf…

Bumblebee微服务网关之访问日志处理

记录访问日志可以起到非常重要的作用,它不仅记录了API的使用情况,更可以反映API各种相关数据;通过分析日志可以得到API不同时间的负载情况,访问效率和流量分布,更进一步还能分析出用户的操作历史和行为这是非常有价值的…

负载均衡基础

1、什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服…

Bumblebee微服务网关之并发限制

对于服务应用来说支持的并发越高越好,但很多时候资源有限,超负载的并发则会给整体应用带来更大的危险性(更何况有些并发来源是恶意的)。作为微服务网关应该具有一定的挡洪作用,这样可以一定程度保障后台逻辑服务的稳定…