分布式系统的那些事儿(六) - SOA架构体系
有十来天没发文了,实在抱歉!最近忙着录视频,同时也做了个开源的后台管理系统LeeCX,目前比较简单,但是后续会把各类技术完善。具体可以点击“原文链接”。
那么今天继续说分布式系统的那些事。
我们现在动不动就讲分布式吧?那么SOA是不是必须得聊一聊呢?
面向服务的架构,简称SOA,他是基于服务组件的,把原来那种一个大型应用程序的不同的功能拆分为一些接口,通过这些接口串联起来。
这么做的好处是:
1、重用性大大提高
2、明确了接口的服务定义规则
3、定义了自家公司的api标准
4、降低系统耦合性
5、无状态HTTP
SOA不是技术也不是什么标准,他是一个架构,每个公司对SOA的架构体系都不同,有简单的也有复杂的,更有超越荣耀王者那边的微服务存在。
曾经的SOA,我也参与过,那些接口设计十分复杂,用的是SOAP,数据传输通过xml来封装的,虽然那个时候我还是个新手,但是我坚信这样的不人性化的玩意迟早要被替代,如今restful风格的架构已经完全替代之。
现如今不论是SOA还是微服务。我们都会利用restful风格来做,甚至我们还会定义自己的一套标准规范,强制开发人员定义的所有api接口必须走这样的规范,这么做的好处是可以让前后端分离,开发人员可以只专注自己的接口或者对接工作即可。
跟过时的SOAP相比,restful简直就是简介明了的实现方案。所有的服务都是松耦合,可以为第三方提供各式各样的接口。传播行为也十分轻量级。
restful的设计规范:
1、使用URL来同一表示我们的资源路径,这个URL应该一目了然,让人知道调用这个接口地址就能够做什么事
2、接口的同一定义:
对于增删改查CRUD就有了十分明确的定义,request的请求方式有4种,
POST用于定义create操作;
GET用于定义查询操作;
PUT用于定义修改操作;
DELETE用于定义删除操作;
此外执行的那个业务方法名(action或者controller),必须定义为名字意义(对于这个我个人觉得没必要,各自根据自己公司的业务定义即可,官方的规范很难以执行,而且命名会很纠结)
3、无状态性:
普通的web应用我们都是用的session来管理用户会话,但是restful的SOA中,我们必须得使用无状态会话,sessionless,比如利用redis来实现,或者spring-session
4、返回客户端的状态:
我们得定义浏览器的状态,就像404或者500那样,出错了得有一个状态值,最常用的就是200状态,然后就是501、502、503……这样定义下去,而这个状态需要封装在你的一个json实体中让对方获取后进行解析,不论是ajax或者restful,都可以获得这样的json字符串再转换为想要的pojo
最新文章
- CentOS 6.3 中安装VirtualBOX增强工具失败:Building the main Guest Additions module[FAILED]
- OpenCV2+入门系列(三):遍历图像的几种方法
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
- SharePoint中的ASHX
- 黑马程序员_Java基础:反射机制(Reflection)总结
- Hibernate的配置
- 上次的AJAX定时刷新多ID不正确,这次请教了高手之后补全
- 检查Linux Bash安全漏洞以及各环境修复解决方法
- 4、File类之获取方法
- Swift の 函数式编程
- CVE-2016-10191 FFmpeg RTMP Heap Buffer Overflow 漏洞分析及利用
- SDN期末作业
- linux使用mail发送外部smtp邮件
- 小程序之带参数跳转到tab页
- FPGA中带优先级的if else if与不带优先级的case的探讨
- 影响MapReduce性能的几个因素
- How to use CAR FANS C800 Diagnostic Scan Tool to do diagnosis operation
- html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?
- 上传文件限制导致413-Request Entity Too Large
- Project Euler Problem5
热门文章
- Oracle Data Integrator 12c----包(Package)
- INT函数和ROUND
- 通过ribbon 根据服务名获取所有服务实例的IP和端口列表
- 主成分分析PCA
- Win一键查看用户密码
- ASP.NET之通过JS向服务端(后台)发出请求(__doPostBack is undefined)
- ios中tableview侧栏的折叠
- apache的mod_proxy 反向代理
- SpringBoot配置属性之MQ
- 【C#】C#项目如何获得项目的根目录