分布式系统的那些事儿(六) - 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

 

转载于:https://www.cnblogs.com/leechenxiang/p/7512753.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rest_framework07:权限/频率/过滤组件/排序/异常处理封装Response对象

权限 写一个类,继承BasePermission,如果通过返回True,否则False 这里需要配合认证使用,否则没有user_type属性。 from rest_framework.permissions import BasePermissionclass UserPermission(BasePermission):def has_permis…

在阿里,我们如何管理测试环境

为什么80%的码农都做不了架构师?>>> 作者:林帆(花名金戟),阿里巴巴研发效能部技术专家 相关阅读:在阿里,我们如何管理代码分支 前言 阿里的许多实践看似简单,背后却蕴涵…

数据库_7_SQL基本操作——表操作

SQL基本操作——表操作 建表的过程就是声明列的过程。 表与字段是密不可分的。 一、新增数据表 create table [if not exists] 表名( 字段名字 数据类型, 字段名字 数据类型 -- 最后一行不需要逗号 )[表选项];if not exists:如果表名不存在,那么就创建,…

EXT.NET 更改lable和Text的颜色

2019独角兽企业重金招聘Python工程师标准>>> &#xfeff;&#xfeff; <ext:TextField ID"TextField1" " runat"server" FieldLabel"编号" LabelWidth"60" LabelAlign"Left" LabelStyle"color:red…

rest_framework08:分页器/根据ip进行频率限制

分页器 # 查询所有&#xff0c;才需要分页 from rest_framework.generics import ListAPIView# 内置三种分页方式 from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPaginationPageNumberPaginationclass MyPageNumberPagination(Pag…

NYOJ746 整数划分

该题是一道区间DP的题目&#xff0c;做了几道区间DP&#xff0c;说起来高大上&#xff0c;也就是DP在区间内的形式而已&#xff0c;核心思想还是要想到转移->规划。 题意是在n位数中间加m个称号&#xff0c;使得最终乘积最大。 状态转移方程如下&#xff1a; dp[ i ][ j ]ma…

Spring MVC实现文件下载

方法一&#xff1a; RequestMapping("/testHttpMessageDown")public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {File file new File(request.getSession().getServletContext().getClassLoader().getResource("…

[MobX State Tree数据组件化开发][3]:选择正确的types.xxx

?系列文章目录? 定义Model时&#xff0c;需要正确地定义props中各字段的类型。本文将对MST提供的各种类型以及类型的工厂方法进行简单的介绍&#xff0c;方便同学们在定义props时挑选正确的类型。 前提 定义props之前&#xff0c;有一个前提是&#xff0c;你已经明确地知道这…

ubuntu系统备份和还原_如何使用Aptik在Ubuntu中备份和还原您的应用程序和PPA

ubuntu系统备份和还原If you need to reinstall Ubuntu or if you just want to install a new version from scratch, wouldn’t it be useful to have an easy way to reinstall all your apps and settings? You can easily accomplish this using a free tool called Apti…

rest_framework09:自动生成接口文档(简略)

coreapi 参考 python/Django-rest-framework框架/8-drf-自动生成接口文档 | Justin-刘清政的博客 Swagger 很多语言都支持&#xff0c;看起来用的人多。 参考fastapi的界面

AppDomainManager后门的实现思路

本文讲的是AppDomainManager后门的实现思路&#xff0c;0x00 前言从Casey SmithsubTee学到的一个技巧&#xff1a;针对.Net程序&#xff0c;通过修改AppDomainManager能够劫持.Net程序的启动过程。 如果劫持了系统常见.Net程序如powershell.exe的启动过程&#xff0c;向其添加…

所有内耗,都有解药。

你是否常常会有这种感觉&#xff1a;刚开始接手一件事情&#xff0c;脑海中已经幻想出无数个会发生的问题&#xff0c;心里也已笃定自己做不好&#xff1b;即使别人不经意的一句话&#xff0c;也会浮想一番&#xff0c;最终陷入自我怀疑&#xff1b;随便看到点什么&#xff0c;…

ABAP 通过sumbit调用另外一个程序使用job形式执行-简单例子

涉及到两个程序&#xff1a; ZTEST_ZUMA02 (主程序)ZTEST_ZUMA(被调用的程序&#xff0c;需要以后台job执行)"ztest_zuma 的代码DATA col TYPE i VALUE 0.DO 8 TIMES.MESSAGE JOB HERE TYPE S.ENDDO.程序ZTEST_ZUMA是在程序ZTEST_ZUMA02中以job的形式调用的&#xff0c;先…

那些影响深远的弯路

静儿最近反思很多事情&#xff0c;不仅是当时做错了。错误定式形成的思维习惯对自己的影响比事情本身要大的多。经常看到周围的同事&#xff0c;非常的羡慕。他们都很聪明、有自己的方法。就算有些同事工作经验相对少一些&#xff0c;但是就像在废墟上创建一个辉煌的城市要比在…

如何使用APTonCD备份和还原已安装的Ubuntu软件包

APTonCD is an easy way to back up your installed packages to a disc or ISO image. You can quickly restore the packages on another Ubuntu system without downloading anything. APTonCD是将安装的软件包备份到光盘或ISO映像的简便方法。 您可以在不下载任何东西的情况…

rest_framework10:base64补充/修改头像

base64补充 # base64 变长&#xff0c;可反解 # md5 固定长度&#xff0c;不可反解# base64 编码和解码 import base64 import json dic{name:test,age:18} dic_strjson.dumps(dic)retbase64.b64encode(dic_str.encode(utf-8)) print(ret)# 解码 ret2base64.b64decode(ret) pri…

next_permutation(全排列算法)

next_permutation(全排列算法) STL提供了两个用来计算排列组合关系的算法&#xff0c;分别是next_permutation和prev_permutation。 首先解释下全排列&#xff0c;顾名思义&#xff0c;即一组数的全部排列的情况。 next_permutation 即列出一组数的全部排列情况&#xff0c;不过…

C#自定义字符串压缩和解压缩源码库

如下的内容是关于C#自定义字符串压缩和解压缩库的内容。class ZipLib{public static string Zip(string value){byte[] byteArray new byte[value.Length];int indexBA 0;foreach (char item in value.ToCharArray()){byteArray[indexBA] (byte)item;}System.IO.MemoryStrea…

使用 Visual Studio 2022 调试Dapr 应用程序

使用Dapr 编写的是一个多进程的程序, 两个进程之间依赖于启动顺序来组成父子进程&#xff0c;使用Visual Studio 调试起来可能会比较困难&#xff0c;因为 Visual Studio 默认只会把你当前设置的启动项目的启动调试。好在有Visual Studio 扩展&#xff08;Microsoft Child Proc…

卸载 cube ui_如何还原Windows 8附带的已卸载现代UI应用程序

卸载 cube uiWindows 8 ships with built-in apps available on the Modern UI screen (formerly the Metro or Start screen), such as Mail, Calendar, Photos, Music, Maps, and Weather. Installing additional Modern UI apps is easy using the Windows Store, and unins…