SOA架构演变由来

一:了解市场上系统架构

1.1:市面上有那些架构?

(1):单体架构
(2):垂直架构
(3):分布式服务架构
(4):SOA架构
(5):微服务架构

1.2:各自架构的优缺点

1.2.1单体架构

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

(2)优点:架构简单,前期开发成本低、开发周期短,适合小型项目(OA、CRM、ERP 企业内部应用)。
(3)缺点:全部功能集成在一个工程中

  1. 业务代码耦合度高,不易维护。
  2. 维护成本高,不易拓展。
  3. 并发量大,不易解决。
  4. 技术栈受限,只能使用一种语言开发。
1.2.2:垂直应用架构

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

2:架构优点:
(1)业务代码相对解耦
(2)维护成本相对易于拓展(修改一个功能,可以直接修改一个项目,单独部署)
(3)并发量大相对易于解决(搭建集群)
(4)技术栈可扩展(不同的系统可以用不同的编程语言编写)。
3:架构缺点:
(1)功能集中在一个项目中,不利于开发、扩展、维护。(2)代码之间存在数据、方法的冗余

1.2.3:分布式服务架构

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

1:架构优点:
(1)业务代码完全解耦,并可实现通用。
(2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)。
(3)并发量大易于解决(搭建集群)。
(4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)。
2:架构缺点:
(1)缺少统一管理资源调度的框架 。

1.2.4:SOA面向服务架构(流动计算架构)

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

2:架构优点:
(1)业务代码完全解耦,并可实现通用
(2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)
(3)并发量大易于解决(搭建集群)
(4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)。
( 5 ) 框架实现了服务治理,不去担心集群的使用情况(失败会尝试其它服务…)
3:架构缺点:
组织结构的改变、组织权力结构的改变、业务面临的新挑战、IT变得简单之前会越来越复杂、没有数据视图、监控复杂性、技术不匹配。

1.3:SOA架构演变史

二:SOA架构需要用到那些技术?

1:Zookeeper

zookeeper介绍在上一篇博客以及谈过请阅读:浅谈------Zookeeper
zookeeper在SOA架构上面扮演了注册中心的角色,负责提供一个平台给服务提供者注册服务,以及服务消费者订阅服务。实现原理是通过zookeeper的代码客户端org.apache.curator来在zookeeper服务器上面添加节点信息(注册服务)以及订阅节点信息(订阅服务)。

2:Dubbo简介

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。Dubbo官网地址:dubbo官网Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
dubbo的架构图:

zook架构图中的角色说明:

虚线都是异步访问,实线都是同步访问
蓝色虚线:在启动时完成的功能
红色虚线(实线)都是程序运行过程中执行的功能调用关系说明:
1:服务容器负责启动,加载,运行服务提供者。
2:服务提供者在启动时,向注册中心注册自己提供的服务。
3:服务消费者在启动时,向注册中心订阅自己所需的服务。
4:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。什么是长连接?

RPC:Remote Procedure Call 远程过程调用

1:是分布式架构的核心,按响应方式分如下两种:

1:同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作。
2:异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。
5. 是一种进程间的通信方式
6. 它允许应用程序调用网络上的另一个应用程序中的方法
7. 对于服务的消费者而言,无需了解远程调用的底层细节,是透明的需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo、spring Cloud(restapi http)等。
8. 一台电脑调用另外一台脑上的方法
3:RPC主件介绍
1、 客户端(Client):服务调用者
2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务
4、 服务端(Server):服务提供者。

2:RPC调用时序图


1、 服务调用方(client)调用以本地调用方式调用服务;2、 client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体 在Java里就是序列化的过程3、 client stub找到服务地址,并将消息通过网络发送到服务端;
4、 server stub收到消息后进行解码,在Java里就是反序列化的过程;
5、 server stub根据解码结果调用本地的服务;
6、 本地服务执行处理逻辑;
7、 本地服务将结果返回给server stub;
8、 server stub将返回结果打包成消息,Java里的序列化;9、 server stub将打包后的消息通过网络并发送至消费方;10、 client stub接收到消息,并进行解码, Java里的反序列化;
11、 服务调用方(client)得到最终结果。

SOA架构开发结构与分布式比较

分布式与SOA架构对比

1:分布式架构分析

我们写分布式架构的时候分成以下几个等级
1:model层,这层是数据模型层,主要是用来封装数据以及放常量的模块,一般是一张表一个javaBean类。数据库查询出来的数据封装到这里的类对象里面。
2:dao层,这层主要是用来操作数据库。(这里用到mybatis框架,德鲁伊连接池作为数据源
3:service层,这层是用来调用dao层以及调用其他的接口来完成业务需求。(这里用到spring框架
4:web层,这层主要是接收客户端请求以及调用service层获取数据响应给客户端。(这里用到了springMVC框架

2:SOA架构分析

我们写SOA架构的时候分成以下几个等级
1:common模块:这个模块和分布式的model是一样的,存放javaBean类。
2:interface模块:这里是抽取服务弄成接口模块,这里提供接口给provider模块实现,也提供给consumer模块订阅服务。总之就是两者的桥梁吧。
3:provider(服务提供者)模块:这里是服务提供者模块,这个模块实现了interface暴露出来的接口,并将接口通过dubbo发布到zookeeper服务器上面。单独的war工程!
4:consumer(服务消费者),这里是接收客户端请求,调用provider模块提供的接口完成业务,并将数据返回给客户端。这里是通过dubbo订阅provider发布到zookeeper的服务。

3:分布式与SOA对比

1:model层对应common模块,者没啥区别。
2:service层+dao层对应provider模块(soa架构只是多了一个配置文件spring-provider.xml用来配置服务发布。)
3:web层对应consumer模块(SOA架构只是多了一个订阅服务的spring-dubbo.xml配置文件)
4:SOA架构将服务提取出来,单独成一个模块,通过dubbo将服务发布到zookeeper服务器上面,而provider模块通过实现接口,发布服务调用数据库完成数据处理。而consumer模块是通过dubbo订阅zookeeper上面的服务,从而将服务注入到controller类中完成服务的调用。

4:总结

由上面我们可以看出,分布式架构的体系如果要转成SOA架构做以下几步即可:
1:将服务提取出来,单独成一个模块(如soa的interface模块)。
2:在你的service层实现提取出来的服务,并将提供的服务发布到zookeeper服务器上面。(通过配置文件配置如:soa的provider模块的spring-provider.xml)
3:在你的web层订阅需要的服务,而服务的实现类就是service层的实现类。(通过配置文件配置如:soa的consumer模块的spring-dubbo.xml)
4:当然了,引入zookeeper的客户端依赖,dubbo的依赖那是必须的了,还有开启zookeeper的服务器。在配置服务和订阅服务的时候指定zookeeper的服务器地址。

END…

(浅谈SOA架构)------SOA架构演变由来相关推荐

  1. 【ZZ】浅谈大型web系统架构 | 菜鸟教程

    浅谈大型web系统架构 http://www.runoob.com/w3cnote/large-scale-web-system-architecture.html 转载于:https://www.c ...

  2. 五分钟DBA:浅谈伪分布式数据库架构

    [IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以"互联网行业应用最佳实践"为主题,定位于互联网架构设计.应用开发.应用运维 ...

  3. 浅谈ARM Cortex-M系列架构——架构篇

    浅谈ARM Cortex-M系列架构文章 浅谈ARM Cortex-M系列架构--指令集 目录 前言 1.操作状态 2.操作模式 二.寄存器 1.通用目的寄存器 2.R13,栈指针(SP) 3.R14 ...

  4. 浅谈因特网时代的操作系统演变

        <浅谈因特网时代的操作系统演变> 北京科泰世纪科技有限公司首席科学家陈榕 操作系统存在的目的只有一个,就是为了更好地支持应用程序运行.在某种程度上,操作系统所提供的支持决定了应用程 ...

  5. 浅谈BPM和SOA架构下的电子政务系统

    摘  要:面对我国电子政务建设中存在的若干问题,为了实现政府由"管理型"向"服务型"转变,本文提出,未来的电子政务系统采用以服务驱动为核心的SOA技术架构将更能 ...

  6. 浅谈分布式、SOA与微服务

    记得面试邮储银行软开部,面试官问到SOA和微服务的区别,忘记当时怎么说的了,总之回答的不是很好,下来也查了很多,但网上的说法真的是仁者见仁,各执一词,事实也是如此,有关分布式,SOA,微服务从来没有一 ...

  7. 阿里浅谈大型项目前端架构设计

    1.综合 我在2年之前,写过一篇中小型项目的前端架构浅谈. 随着能力的上升,以及在阿里巴巴工作的经验,是时候写一篇大型项目的前端架构分析了. 本篇文章不会更多侧重于具体技术实现,而是尝试从更高角度出发 ...

  8. 浅谈关于CPU的架构和工艺(1)

    http://www.jianshu.com/p/fa7e11321cd8 inside 高通骁龙 刚入手了SONY Xperia Z5 Premium,其CPU采用了争(fa)议(re)较大的骁龙( ...

  9. 浅谈大数据平台架构设计

    全文共3735个字,建议8分钟阅读 近年来,随着IT技术与大数据.机器学习.算法方向的不断发展,越来越多的企业都意识到了数据存在的价值,将数据作为自身宝贵的资产进行管理,利用大数据和机器学习能力去挖掘 ...

  10. 浅谈数据仓库的基本架构

    数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support).其实数据仓库本身并不"生产"任何数据,同时自身也不需要"消费&quo ...

最新文章

  1. GitLab首席执行官Sid Sijbrandij畅谈当前开发实践
  2. C语言-求字符串长度-strlen()与sizeof()
  3. Java 中关于this、static、final 关键字的使用
  4. WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能...
  5. 百度地图API的第一次接触——标注和信息窗的使用
  6. 【图解】透彻Java线程状态转换
  7. 通过PPA升级你的LibreOffice
  8. laravel整合workerman做聊天室
  9. Unity自定义Editor简明教程
  10. 2ask信号调制与解调 matlab,2ASK2ASK调制与解调系统的MATLAB实现及性能分析
  11. 新网站收录及备忘录网址
  12. 5-7 六度空间 (30分)
  13. LTE学习笔记 ——SRB、DRB
  14. 闭关之 Vulkan 应用开发指南笔记(四):绘制、几何体片段处理、同步和回读数据
  15. java软连接_硬链接和软连接
  16. POJ 1625 Censored!(AC自动机-指针版+DP+大数)题解
  17. 项目实战-图像识别项目-通过QT制作图形界面并调用百度AI进行图像识别(一)
  18. MySQL通过分组计算百分比
  19. hyu 1698 Just a Hook
  20. 物联网中的存储资源盘活

热门文章

  1. Python-Pandas学习之HDFStore存储数据警告(your performance may suffer as PyTables will pickle....)
  2. 【基于蜂鸟地图二次开发工具,方便开发者快速开发业务】
  3. 【阿里云镜像】配置阿里巴巴开源镜像站镜像——PyPI 镜像
  4. 原链落地应用之仓单金融
  5. ug专属界面如何定制,ug软件如何定制角色
  6. 字母的各种字体及latex表示方法
  7. Java 实现grpc实例--json转protobuf
  8. 红石电路吧计算机教程,《我的世界》老MC必学的四种红石电路 10分钟带你告别石器时代!...
  9. Word如何设置第一页不显示页码 Word从第二页开始显示页码方法
  10. 行政文员个人简历模板