最近在学springboot,又遇到了springcloud,什么单体,分布式,SOA,微服务等架构也都遇见了,这节咱们了解一下什么是SOA(面向服务架构)?
首先俩看一下百度的概念:
面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
一大部分人肯定是不懂了,我们将上面的话提炼一下:
SOA是一种面向服务的架构 ,基于分布式架构 ,它将不同业务功能按服务进行拆分 ,并通过这些服务之间定义良好 的接口和协议联系起来。
总的来说,SOA不是具体的什么技术,而是一种开发项目的思想,一种架构。
那么这种架构他是怎样衍生出来的呢,下面我们来看一下:
软件架构的发展经历了从单体架构、垂直架构、 SOA架构到微服务架构的过程。
Web应用程序发展的早期 ,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行 ,所有功能 模块使用同一个数据库。
下图是一个单体架构的电商系统 :
1、所有的功能集成在一个项目工程中。
2、所有的功能打在一个war包部署到服务器。
3、通过部署应用集群和数据库集群来提高系统的性能。
1、项目架构简单 ,前期开发成本低 ,周期短 ,小型项目的首选。
2、 开发效率高 ,模块之间交互采用本地方法调用。
3、容易部署 ,运维成本小 ,直接打包为一个完整的包 ,拷贝到web容器的某个目录下即可运行。
4、容易测试 :IDE都是为开发单个应用设计的、 容易测试——在本地就可以启动完整的系统。
1、全部功能集成在一个工程中 ,对于大型项目不易开发、 扩展及维护。
2、版本迭代速度逐渐变慢 ,修改一个地方就要将整个应用全部编译、 部署、 启动 ,开发及测试周期过长。
3、 无法按需伸缩 ,通过集群的方式来实现水平扩展 ,无法针对某业务按需伸缩。
针对单体架构的不足 ,为了适应大型项目的开发需求 ,许多公司将一个单体系统按业务垂直拆分为若干系统 ,系统 之间通过网络交互来完成用户的业务处理 ,每个系统可分布式部署 ,这种架构称为分布式架构。
1、按业务垂直拆分成一个一个的单体系统 ,此架构也称为垂直架构。
2、系统与系统之间的存在数据冗余 ,耦合性较大 ,如上图中三个项目都存在客户信息。
3、系统之间的接口多为实现数据同步 ,如上图中三个项目要同步客户信息。
1、通过垂直拆分 ,每个子系统变成小型系统 ,功能简单 ,前期开发成本低 ,周期短。
2、每个子系统可按需伸缩。
3、每个子系统可采用不同的技术。
1、子系统之间存在数据冗余、 功能冗余 ,耦合性高。
2、按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现 ,比如订单管理和用户管理。
SOA是一种面向服务的架构 ,基于分布式架构 ,它将不同业务功能按服务进行拆分 ,并通过这些服务之间定义良好 的接口和协议联系起来。
1、基于SOA的架构思想 ,将重复公用的功能抽取为组件 ,以服务的方式向各各系统提供服务。
2、各各系 统与服务之间采用webservice、 rpc等方式进行通信。
3、 ESB企业服务总线作为系统与服务之间通信的桥梁。
1、将重复的功能抽取为服务 ,提高开发效率 ,提高系统的可重用性、 可维护性。
2、 可以针对不同服务的特 点按需伸缩。
3、采用ESB减少系统中的接口耦合。
1、系统与服务的界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。
2、 虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
基于SOA架构的思想 ,为了满足移动互联网对大型项目及多客户端的需求 ,对服务层进行细粒度的拆分 ,所拆分的 每个服务只完成某个特定的业务功能 ,比如订单服务只实现订单相关的业务 ,用户服务实现用户管理相关的业务等 等 ,服务的粒度很小 ,所以称为微服务架构。
1、 服务层按业务拆分为一个一个的微服务。
2、微服务的职责单一。
3、微服务之间采用RESTful、 RPC等轻量级协议传输。
4、有利于采用前后端分离架构。
1、 服务拆分粒度更细 ,有利于资源重复利用 ,提高开发效率。
2、 可以更加精准的制定每个服务的优化方案 ,按需伸缩。
3、适用于互联网时代 ,产品迭代周期更短。
1、==开发的复杂性增加 ==,因为一个业务流程需要多个微服务通过网络交互来完成。
2、微服务过多 ,服务治理成本高 ,不利于系统维护。
现在对SOA理解些了吗?
SOA是一种面向服务的架构,基于分布式架构 ,它将不同业务功能按服务进行拆分 ,并通过这些服务之间定义良好 的接口和协议联系起来。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦