对于SOA,感觉这个概念性的东西没那么容易理解,看了各位大神的解释感觉很多都说的很抽象,所以想尝试用自己的语言解释下,仅做参考。

SOA粗暴理解:把系统按照实际业务,拆分成刚刚好大小的、合适的、独立部署的模块,每个模块之间相互独立。

比如现我有一个数据库,一个JavaWeb(或者PHP等)的网站客户端,一个安卓app客户端,一个IOS客户端。

现在我要从这个数据库中获取注册用户列表,如果不用SOA的设计思想,那么就会这样:JavaWeb里面写一个查询方法从数据库里面查数据然后在网页显示,安卓app里面写一个查询方法查询后在app上显示,IOS同样如此。这里就会出现查询方法重叠了,这样的坏处很明显了,三个地方都有相同的业务代码,要改三个地方都要改,而且要改的一模一样。当然问题不止这一个。

于是乎出现了这样的设计思想,比如用Java(或者是其他语言皆可)单独创建一个工程部署在一台服务器上,并且写一个方法(或称函数)执行上述查询操作,然后使其他人可以通过某种途径(可以是http链接,或者是基于socket的RPC调用)访问这个方法得到返回数据,返回的数据类型是通用的json或者xml数据,就是说把这个操作封装到一个工程中去,然后暴露访问的方式,形成“服务”。比如这里就是注册用户服务,而关于注册用户的所有相关增删改查操作这个服务都会提供方法。

这样一来,JavaWeb这边可以访问这个服务然后得到数据使用,安卓和IOS这里也可以通过这个服务得到数据。而且最重要的是,要修改关于注册用户的业务方法只要改这个服务就好了,很好的解耦。同理,其他业务比如商品、广告等业务都可以单独形成服务部署在单独服务器上。

还有就是一旦哪天突然有一堆人要注册,假设这堆人仅仅只是注册而不做其他事情,其他业务比如商品、广告服务等都不忙,唯独注册这个功能压力很大,而原有的一台部署了注册服务的服务器已经承受不了这么高的并发,这时候就可以单独集群部署这个注册服务,提供多几台服务器提供注册服务,而其他服务还不忙,那就维持原样。

当然,还有很多其他好处。

以上我所描述的都还不能完全称为SOA,还不够完整,因为它少了服务治理这一环节。

什么是服务治理,就是当服务越来越多,调用方也越来越多的时候,它们之间的关系就变得非常混乱,需要对这些关系进行管理。举例,还是上面的例子,假如我有一个用户服务,一开始有调用方1和调用方2来使用这个服务,后来越来越多,将近上百个调用方,这个时候作为服务方,它只知道提供服务,却不知道具体为谁提供了服务。而对于开发者来说,知道这N多调用方和N多服务方之间的关系是非常重要的。

所以这个时候就需要能进行服务治理的框架,比如dubbo+zookeeper,比如SpringCloud,有了服务治理功能,我们就能清晰地看到服务被谁谁谁调用,谁谁谁调用了哪些服务,哪些服务是热点服务需要配置服务器集群,而对这个服务集群的负载均衡也是服务治理可以完成的重要功能之一。

这个时候就是更加完善一点的SOA了。

当然,还可以更进一步,加上服务监控跟踪等等等等之类的。

实际上SOA只是一种架构设计模式,而SOAP、REST、RPC就是根据这种设计模式构建出来的规范,其中SOAP通俗理解就是http+xml的形式,REST就是http+json的形式,RPC是基于socket的形式。上文提到的CXF就是典型的SOAP/REST框架,dubbo就是典型的RPC框架,而SpringCloud就是遵守REST规范的生态系统。

以上就是我的个人理解,有错漏请指正、

java soa是什么_如何通俗易懂地解释什么是SOA?相关推荐

  1. 如何通俗易懂地解释什么是SOA?什么是服务治理

    缘起 笔者一直没法理解SOA是什么,百度百科一搜也是看的一脸懵逼,直到有一天看到了知乎上的一篇文章 本文是对这篇文章的一个补充和完善,以便后期查阅. 关于百度百科的解释 我相信很多人跟我一样看的一脸懵 ...

  2. 协方差的计算公式例子_如何通俗易懂地解释「协方差」与「相关系数」的概念?...

    最喜欢通俗易懂地解释一个事情. 一.协方差: 可以通俗的理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何? 你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正 ...

  3. 一张图解释什么是遗传算法_如何通俗易懂地解释遗传算法?有什么例子?

    本次回答将引用腾讯高级工程师tracyyma在腾讯内部发表的一篇原创文章. 内容索引 · Chapter 1 算法简介 · Chapter 2 算法应用 · Chapter 3 算法原理 · Chap ...

  4. 黑马程序员Java零基础视频教程_下部(P135-P200)

    黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...

  5. Java Review - 并发编程_ 回环屏障CyclicBarrier原理源码剖析

    文章目录 Pre 小Demo 类图结构 CyclicBarrier核心方法源码解读 int await() int await(long timeout, TimeUnit unit) int dow ...

  6. Java Review - 并发编程_读写锁ReentrantReadWriteLock的原理源码剖析

    文章目录 ReentrantLock VS ReentrantReadWriteLock 类图结构 非公平的读写锁实现 写锁的获取与释放 void lock() void lockInterrupti ...

  7. Java Review - 并发编程_原子操作类LongAdder LongAccumulator剖析

    文章目录 概述 小Demo 源码分析 重要的方法 long sum() reset sumThenReset longValue() add(long x) longAccumulate(long x ...

  8. Java web小项目_个人主页(2)—— 边缘加速原理与实现

    摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...

  9. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

最新文章

  1. (转)jQuery插件:Image lazy loader图片延迟加载
  2. 一站式解决使用枚举的各种痛点
  3. shell模拟php多进程从redis获取数据(一个库多个key值)
  4. excel自动生成舒尔特表_EXCEL自动生成的PPT
  5. 如何在Instagram上过滤冒犯性评论
  6. 计算机绘画作品 星空,关于近期绘画作品《星空系列》的自述:
  7. CodeForces - 888C K-Dominant Character 思维
  8. java 随机化快速排序,JS实现随机化快速排序的实例代码
  9. bootstrap table 服务器端分页例子
  10. JavaEE JavaSE JavaME的区别
  11. 关于SQL求同比、环比
  12. 桌面文件不见了怎么恢复,用它不慌张!
  13. 虚拟化:十大虚拟化最佳实践
  14. 修复0xc0000034的经历
  15. 写给大忙人的模电复习资料(001)
  16. 鲁棒与最优控制(一)
  17. 用Go实现UTXO,UTXO实现
  18. 海盗云商php,海盗云商(2.2.1.160429)前台无限制注入(无需登录,无视GPC)
  19. 【sdx62】QCMAP_CLI手动拨号操作说明
  20. linux远程root拒绝,ubuntu拒绝root用户ssh远程登录解决办法

热门文章

  1. Matlab绘图——填充相交区域
  2. 哈夫曼编码算法 c语言,《哈夫曼编码的算法》
  3. Linux 硬件响应性能检测工具 硬盘IO测试工具 iozone ioping fio dd
  4. 常用IT系统架构及DevOps介绍
  5. catia V5R21 32位打开大型装配体非常卡,亲测可用解决方案
  6. Docker--harbor
  7. qsnctf nisc_easyweb wp
  8. ExtJs6 store发送数据添加参数
  9. Oracle使用max()函数遇到的坑
  10. java-net-php-python-ssm二级学院学生会人事管理信息系统计算机毕业设计程序