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

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

通过一个系统我们看一下架构的演变过程(由统一到分布式):

当我们的项目比较小时,我们只有一个系统,并且把他们写到一起,放在一个服务器上,但是随着平台越来越大,数据量越来越大,我们不得不通过分库,把多个模块的数据库分别放在对应得服务器上,每个模块调用自己的子系统即可。

随着我们系统的进一步复杂度的提示,我们不得不进一步对系统的性能进行提升,我们将多个模块分成多个子系统,多个子系统直接互相调用(因为SOA一般用于大型项目,比较复杂,所以一般总系统不会再集成,会拆分多个,分别做成服务,相互调用)。当我们的电商UI进行一个下订单的任务时,多个服务直接互相调用,系统通过数据总线,分别调用对于的子系统即可。

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

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

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

二、SOA主要的使用场景,如下图:

通过上面的图我们可以看出,多个子系统直接相互交互,相互调用非常凌乱,这样我们就很不爽,所以我们就用到了我们的SOA架构,SOA又叫服务治理,SOA就是帮助我们把服务之间调用的乱七八糟的关系给治理起来,然后提供一个统一的标准,把我们的服务治理成下图所示,以前我们的服务是互相交互,现在是只对数据总线进行交互,这样系统就变得统一起来。

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

新的交互方式:各个系统分别根据统一标准向数据总线进行注册,各子系统调用其他子系统时,我们并不关心如果找到其他子系统,我们只招数据总线,数据总线再根据统一标准找其他子系统,所以数据总线在这里充当一个只路人的作用。

SOA的好处:

1、降低用户成本,用户不需要关心各服务之间是什么语言的、不需要知道如果调用他们,只要通过统一标准找数据总线就可以了。

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

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

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

三、数据总线是什么?

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

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

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

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

基本上SOA的架构体系我的理解就是这样,上面配合图基本上也算清晰,如果哪里有不对的地方,欢迎大牛指出,大家可以互相探讨,相互学习。

转载自:https://www.cnblogs.com/renzhitian/p/6853289.html

dubbo入门学习 一SOA的更多相关文章

  1. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  2. dubbo入门学习笔记之环境准备

    粗略的学完springcloud后由于公司的项目有用到一点dubbo,刚好手头上又有dubbo的学习资料,于是趁机相对系统的学了下duboo框架,今天开始记录下我的所学所悟;说来惭愧,今年之前,作为一 ...

  3. dubbo入门学习

    官方网址:http://dubbo.apache.org/zh-cn/index.html 学习可以参考官网中文文档:http://dubbo.apache.org/zh-cn/docs/user/q ...

  4. 2018.11.9 Dubbo入门学习

    1.什么是Dubbo dubbo.io 代表是开源的 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服 ...

  5. dubbo入门学习(一)-----分布式基础理论、架构发展以及rpc、dubbo核心概念

    一.分布式基础理论 1.什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed ...

  6. dubbo入门学习(二)-----dubbo hello world

    一.dubbo hello world入门示例 1.提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在需要创建两个服务模块进行测试: 模块 功能 订单服务web模块 创 ...

  7. Dubbo 入门学习笔记

    项目结构 模块介绍: DubboAPI    ----API接口 DubboConsumer ----消费者 DubboProvider ----生产者 DubboAPI  Service 提供的接口 ...

  8. dubbo入门学习 六 admin管理界面

    1. 本质就是一个web项目 2. 获取注册中心内Provider注册的信息.用页面呈现出来. 3. 实现步骤 3.1 把dubbo-admin-2.5.3.war上传到服务器tomcat中. 3.2 ...

  9. dubbo入门学习 五 provider端的编写

    1. 新建Maven Project, 里面只有接口(dubbo-service) 1.1 为什么这么做? RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consum ...

随机推荐

  1. 回溯法 17. Letter Combinations of a Phone Number

    class Solution { public: map<char,string> dict; vector<string> letterCombinations(string ...

  2. 关于background-size 的一点小坑

    目前在做一个网页,要求使用一个图片作为背景,必须要全屏目填充,于是我想,这不是很简单的事情么: 有两种实现方法:首先设置添加一个div(或者body),把div(或者body)元素的宽和高都设置成10 ...

  3. 自定义 serializeJSON() 函数

    说明:jQuery框架提供了serialize()方法, 能够将DOM元素内容序列化为json格式字符串,用于ajax请求.通过使用serialize()方法,可以提交本页面的所有域. 但是此方法具有 ...

  4. MySQL 权限相关

    # ============================= mysql 权限相关 =====================================================gran ...

  5. 聊聊 HashMap

    数据存储底层? 数据底层具体存储是一个Node<K,V> HashMap 是基于哈希来映射的,那当映射冲突时候怎么解决? 链地址,数组+链表 HashMap 什么时候扩容? 负载因子 lo ...

  6. 项目需求分析与建议-NABCD模型

    N(Need 需求) 首先我们的创意解决了现有阶段学校查空余教师的问题,充分解决了同学们上自习却找不到教室的苦衷,同时也会适当的拓展一些适当的学习计时功能或者每日一语等等,来帮助同学们来控制好学习时间 ...

  7. Django系列之web应用与http协议

    第一节:最简单的web应用程序 web应用程序指供浏览器访问的程序,通常也简称为web应用.应用程序有两种模式C/S,B/S.C/S是客户端/服务器程序.也就是说这类程序一般独立运行.而B/S就是浏览 ...

  8. MFC新建工程中目录包含中文,资源文件打开失败

    ※尽量不适用中文,各种未知错误,嘿嘿 此方法临时解决问题,可以使程序运行,后续是否还有错误是未知数 需要修改3处位置: 1.资源文件中.rc 右键,点击“查看代码”,找到带中文的资源ID,把中文修改掉 ...

  9. event 事件1

    1.事件流 1.1 事件冒泡 IE8- 浏览器支持的事件流是事件冒泡.事件冒泡是事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)的过程. <!doctype html&g ...

  10. mysql链接服务器,update报错

    select * from Openquery(MySQL, 'SELECT * FROM official.sys_hospital') 执行更新语句: ; 报错,错误信息: 链接服务器" ...