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

java soa是什么_如何通俗易懂地解释什么是SOA?对于SOA,感觉这个概念性的东西没那么容易理解,看了各位大神的解释感觉很多都说的很抽象,所以想尝试用自己的语言解释下,仅做参考。SOA粗暴理解:把系统按照实际业务,拆分成刚刚好大小的、合适的、独立部署的模块,每个模块之间相互独立。比如现我有一个数据库,一个JavaWeb(或者PHP等)的网站客户端,一个安卓app客户端,一个IOS客户端。现在我要从这个数据库中获取注册用户列表,如果不用SOA的设计…

大家好,又见面了,我是你们的朋友全栈君。

对于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规范的生态系统。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148340.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS它DOM

    JS它DOM

    2022年1月6日
    50
  • 社区打造智慧小区_idc智能化解决方案

    社区打造智慧小区_idc智能化解决方案智慧社区建设方案丨智慧小区智能化解决方案随着物联网技术和我国新一代互联网技术的发展,未来社区网络将会实现全覆盖,通过社区网络和物联网络,将会实现社区机电设备和住宅的自动化,智能化,实现远程监控和网络数字化。智慧社区是社区综合服务管理的一种创新,利用前沿的智能化基础设施建设,增强社区治理和小区管理智能化,推动便民措施服务项目智能化,使社区居民的衣食住行更为舒服、高效率。智慧社区概念介绍:智慧社区是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,涉及到智能楼…

    2022年10月18日
    6
  • Java 学生成绩管理系统「建议收藏」

    Java 学生成绩管理系统「建议收藏」教学管理系统很适合初学者对于所学语言的练习。本文是javaSE中用文件流写的,这个也可以用数据库写。分析这个项目有1.学生2.老师3.教务人员4.管理员四个角色分别担任不同的任务。1.学生有属性id,密码,性别,年龄,和一个存放成绩的集合(因为一个学生可能会有多个科目,所以用集合来存放学生的所学科目)。2.老师有属性id,密码,性别,年龄,和一成绩类的对象(考虑到老师只

    2022年7月13日
    15
  • 怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法

    怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法卸载SEP(symantecendpointprotection),需要密码怎么办2011年12月08日下午1:50默认密码是symantec,或者Symantec1.点击“开始”->运行(或直接:Window徽标键+R)2.输入smc-stop终止SEP。如果跳出输入密码提示,则打开注册表(Window徽标键+R;输入regedit;敲回车),然后找到HKEY_LOCAL_MAC…

    2022年5月9日
    103
  • Java深入理解深拷贝和浅拷贝区别[通俗易懂]

    Java深入理解深拷贝和浅拷贝区别[通俗易懂]一、拷贝的引入(1)、引用拷贝创建一个指向对象的引用变量的拷贝。Teacherteacher=newTeacher("Taylor",26);Teacherotherteacher=teacher;System.out.println(teacher);System.out.println(otherteacher);输出结果:blog.Teacher@355da2…

    2022年10月1日
    4
  • 学生学籍管理系统_学生学籍管理系统的开发

    学生学籍管理系统_学生学籍管理系统的开发二需求分析2.1系统功能要求设计此系统实现如下系统功能:我们小组所设计的学生学籍管理数据库系统主要分为两大模块层面,一是:学生登录层面,二是:教师登录层面。不同层面根据不同用户的需求所实现的功能不同,这样能够更人性化地贴合个体的使用,最大程度地提升系统的使用及运行效率。所以系统设有两种不同的登录选择,用户根据实际情况自行登录,修改、查询、管理信息。学生层面:(1)

    2022年10月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号