什么是SOA(软件产品架构中什么是单体架构、SOA架构、微服务架构?)
题图来自Unsplash,基于CC0协议
本文目录
正文
1、软件产品架构中什么是单体架构、SOA架构、微服务架构?
软件产品架构是不断迭代演化的,从单体服务架构发展到现在的服务化、微服务的架构。
单体架构单体架构就是所有的业务模块都是耦合在一个项目中,开发、部署都在一起;如果其中一个模块需要上线升级,那么所有模块都要一起启停;
在早期,单体架构的项目团队成员需要是“全栈”,因为前端、后端、数据库都是一波人负责,后来开始进行了逻辑分层,团队也分成了前端 UI 团队、后端和 DBA 团队,每个团队都有自己负责的职责。
然而随着业务逻辑越来越复杂,模块和模块之间的耦合度越来越高;另外随着用户和数据量的增多,单体架构也不再能够支撑高并发和大数据。
SOA 架构为了解决上面的问题,SOA 出现了。
SOA 代表了面向服务的架构,SOA 将应用程序的业务模块进行拆分,形成独立的应用系统,系统和系统之间通过明确的接口串联起来;
每个系统内部结构和逻辑发生改变,并不影响对外提供的服务,只要保持接口不变,服务内部对外是透明的;
SOA 架构中,服务定义标注的接口,可以提供给多个调用方使用,增加了服务的重用性。
SOA 架构时代有两个很重要技术实现方式:Web Service 和 ESB :前者提供了标准的数据传输协议,后者实现了服务编排和协议转换。
微服务架构但是随着用户和数据量的进一步增长,SOA 也暴露出来一些缺点,比如 SOAP 协议、XML较重;服务管理不完善;ESB本身就比较重,而且它本身算是一个单点,在软件架构中,单点意味着风险。
在微服务的架构中,各个微服务可以独立开发,独立部署;微服务之间通常使用Restful风格的API通信,传输格式也通常选择JSON;
微服务是SOA架构的延续,它们和单体应用相比,大大提高了系统的负载能力,解决了应用高并发的需求;
服务和服务之间的耦合度也被降低,并且项目团队可以被拆分成多个小团队,每个微服务都可以进行敏捷开发部署;
每个团队的技术栈也可以不相同,只要遵守接口协议即可。
至于微服务和 SOA 架构的区别,我是这样理解的:SOA 架构和微服务架构都属于分布式架构,分布式的思想就是把不同的业务模块,部署在不同的服务器上,以应对高并发的问题;SOA 是一种分布式架构,把业务系统分成多个子系统,提供不同的服务,再通过服务组合、编排实现业务流程;微服务是SOA的升华,如果非要说点儿不同的,那么微服务更加强调服务的细分和专业,去ESB总线、去中心化,部署粒度更细,服务扩展更灵活。
当然SOA、微服务的出现,在解决一些问题的时候,也带来了另外一部分的问题,比如增加了网络开销、服务依赖性、增加了测试运维难度、数据一致性问题等等。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。2、SOA和微服务架构的区别是什么?
笔者目前就职于国内知名互联网公司,做过toG和toB的私有化项目的微服务架构设计,也做过大型产品层面的微服务架构设计,就SOA和微服务架构的区别这个问题,来谈一谈我的看法。
不同的声音某些针对微服务架构的批评声称微服务其实就是SOA,并没有新鲜的内容。在某些层面,它们的确有些相似。SOA和微服务架构都是特定的架构风格,它们都以一系列服务的方式来把一个系统组织在一起。但如果深入研究,你就会发现微服务和SOA之间巨大的差异。
SOA与微服务差异SOA与微服务的差异主要体现在三个方面:服务间通信、数据管理、服务规模:
1 服务间通信
SOA和微服务架构通常采用完全不同的技术栈:
SOA采用智能管道,如Enterprise Service Bus(ESB,是包含了业务和消息处理的智能管道),往往采用重量级协议,例如SOAP或其他WS*标准;
微服务使用哑管道,例如消息代理,或者服务之间点对点通信,例如restfull请求或者grpc类的轻量级协议。
2 数据管理
SOA和微服务架构在处理数据的方式上也不尽相同:
SOA采用全局数据模型并共享数据库;
微服务架构则是每个服务都有自己的数据模型和数据库。更进一步,每一个服务一般都拥有属于它自己的领域模型。(笔者后续会有文章专门讲述领域模型设计)
3 服务规模
SOA和微服务架构之间的另一个重要区别就是服务的尺寸(规模):
SOA善于集成大型、复杂的单体应用程序;
微服务则是拆分为较小的服务
SOA与微服务架构图一个典型的SOA系统架构如下:
一个典型的微服务架构如下:
3、soa和soap分别是什么?
SOA,即面向服务的体系结构(Service-Oriented Architecture,也叫面向服务架构),是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。