深刻浅出SOA

      前一阵换了份工做,来到新公司,刚好新同事问起SOA是什么,我随口说了几点,其实本身之前研究过,不过并无详细的整理过,说的比较模糊,刚好周末,拿出点时间整理下之前对SOA的认知。ajax

     SOA是什么?SOA全英文是Service-Oriented Architecture,中文意思是中文面向服务编程,是一种思想,一种方法论,一种分布式的服务架构(具体能够百度)。数据库

     用途:SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫作服务治理。编程

     经过一个系统咱们看一下架构的演变过程(由统一到分布式):服务器

   

        当咱们的项目比较小时,咱们只有一个系统,而且把他们写到一块儿,放在一个服务器上,可是随着平台愈来愈大,数据量愈来愈大,咱们不得不经过分库,把多个模块的数据库分别放在对应得服务器上,每一个模块调用本身的子系统便可。架构

     

     随着咱们系统的进一步复杂度的提示,咱们不得不进一步对系统的性能进行提高,咱们将多个模块分红多个子系统,多个子系统直接互相调用(由于SOA通常用于大型项目,比较复杂,因此通常总系统不会再集成,会拆分多个,分别作成服务,相互调用)。当咱们的电商UI进行一个下订单的任务时,多个服务直接互相调用,系统经过数据总线,分别调用对于的子系统便可。负载均衡

     企业数据总线:企业数据总线不是对多个子模块的集成,他在这里充当数据通道的做用,数据总线不关心业务,数据总线根据给的地址和协议去调服务,上端不关心服务在哪里是什么,只找数据总线。框架

     上面几个图应该算是比较清楚了,随着业务的深刻,咱们不得不对系统进行调整,分别是对数据和业务的拆分,最后每一个子系统对面提供服务。分布式

     还要提的一点就是下面那个图,下面的IP库以及几个子系统是公共服务,分别向上提供功能,也是SOA方法论的一部分。性能

2、SOA主要的使用场景,以下图:学习

   

经过上面的图咱们能够看出,多个子系统直接相互交互,相互调用很是凌乱,这样咱们就很不爽,因此咱们就用到了咱们的SOA架构,SOA又叫服务治理,SOA就是帮助咱们把服务之间调用的乱七八糟的关系给治理起来,而后提供一个统一的标准,把咱们的服务治理成下图所示,之前咱们的服务是互相交互,如今是只对数据总线进行交互,这样系统就变得统一块儿来。

统一标准:各系统的协议、地址、交互方式。

新的交互方式:各个系统分别根据统一标准向数据总线进行注册,各子系统调用其余子系统时,咱们并不关心若是找到其余子系统,咱们只招数据总线,数据总线再根据统一标准找其余子系统,因此数据总线在这里充当一个只路人的做用。

SOA的好处:

  一、下降用户成本,用户不须要关心各服务之间是什么语言的、不须要知道若是调用他们,只要经过统一标准找数据总线就能够了。

 二、程序之间关系服务简单

 三、识别哪些程序有问题(挂掉)

缺点:提示了系统的复杂程度,性能有相应影响。

3、数据总线是什么?

      其实我在上面写了,数据总线是起到调度服务的做用,数据总线不是集成服务,数据总线更新一个调度框架,每一个服务须要根据约定向数据总线注册服务,那么如何注册那?其实数据总线就像一个字典结构,

      数据总线里面一个key对于一个value,key指的是服务名,value则是服务的调度方式,还有一点须要说明的是,数据总线只是指路人,服务是不通过数据总线的,如上图的黄色线的路径。

     数据总线经过域名解析实现:一个域名绑定多台服务器,ajax也能够,dns也能够,解析域名嘛。

     其实数据总线还有一些高级应用,好比心跳检测,实现负载均衡等等,就不细说了,目前应用数据总线的有阿里的dubbo,还有zookeeper。

     基本上SOA的架构体系个人理解就是这样,上面配合图基本上也算清晰,若是哪里有不对的地方,欢迎大牛指出,你们能够互相探讨,相互学习。