谈一下我对如何设计微服务接口的理解和思考

微服务是一个独立运行、自带数据存储管理,对外提供接口的自治系统。微服务设计很关键的一点是微服务接口的设计。不同微服务经常是分配给不同的团队开发的,接口是各团队编程的契约。

下面只讨论微服务间接口的设计,至于微服务内部子模块间接口的设计比较灵活,内部接口修改也不会有太大的影响,不在这里讨论。

从我的理解来看,微服务接口设计要考虑以下几个方面:1、接口协议选型。2、定义接口内容。4、明确接口性能。5、做好接口管理。

二、 接口协议选型
考虑接口使用什么通信协议来传递数据,是使用TCP、UDP,还是HTTP? 亦或是采用文件下载,数据库共享,Redis缓存共享的方式?同一个微服务的不同接口都可能采用不同的方式:

现在微服务流行采用的http协议restful接口(语言无关)。
RMI远程接口调用(Java语言支持)。
大数据传递采用文件离线下载的方式(FTP)。
状态数据(如果进度条)放在Redis中共享缓存。
数据库共享。一般来说微服务的数据库是隔离的,不同微服务不允许直接访问彼此的数据库。如涉及大数据有性能问题时可特殊考虑。
如果涉及机密数据的传输, 特别是在interenet上发布的接口为防止数据被人抓包分析,需要有加解密处理。

做了接口协议选型后就可以考虑采用哪些第方件,常用的cxf、spring boot是restful服务发布组件;RMI是Java原生支持的;C++可以采用SOAP。FTP存在安全性问题,可以采用SFTP。

三、 定义接口内容
接口内容包含接口名称(url)、输入参数、返回值、错误码。一个典型的restful接口内容定义如下: 

 

补充说明:返回的错误码,1表示成功,0表示失败。参数类型按http协议的定义一般有query参数、body参数、Header参数这几种。
四、 明确接口性能
接口性能定义了接口单次响应时间、单次查询返回记录条数,每秒支持调用次数等。

数据量比较大的查询接口一把都会设计成分页查询,需要定义好单次查询返回的最大记录条数。

微服务接口的支撑能力是有限的,必须定义好单位时间内允许的最大请求次数(超过请求次数就不响应或者返回错误码),否则海量的请求一下涌过来,服务就挂了。对于发布在interenet上的服务,一般还会根据会员级别设定一天的请求次数上限等。

五、 做好接口管理
接口管理涵盖接口版本管理、接口权限管理、接口管控。

同一个接口在不同时期可能有不同的诉求,当有新需求来时我们就需要做版本升级。一般来说新增接口,旧的接口不会立即下线(因为还有很多其它的微服务在使用),这时候就通过加一个版本号来解决。在URL中带上不同的版本号,需要使用新特性的可以调用新版本的接口;不使用新特性的可以仍然沿用旧版本接口。

对外发布的接口需要做权限控制,未授权的微服务不允许访问。可以采用在接口的header参数中加上加密的token作为权限认证。

当整个系统很庞大以后,各微服务发布的接口需要做可视化管理,包含服务的注册、发布、调用、下线都需要在统一的运维平台上操作。

前面提到的接口版本管理对接口不同版本的兼容处理是不可能不限支持下去的。发布旧版本接口的下线公告到期后,如果在监控平台上发现旧版本接口已无人调用就可以下线了,如果还有人调用则通知他限期整改。
参考:https://blog.csdn.net/ylforever/article/details/79334416

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

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

相关文章

【C++深度剖析教程7】C++之类中的函数重载

函数重载的回顾(接上一篇文章): 函数重载的本质为相互独立的不同的函数C中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中 类中的成员函数可以进行重载 构造函数的重载普通成…

Linux 服务器远程控制三剑客Telnet、SSH 和 VNC 之 VNC

使用VNC服务实现远程控制Telnet和SSH服务只能实现基于字符界面的远程控制,如果要基于图形界面进行远程控制,可以借助免费的VNC来完成。VNC是VirtualNetworkComput-ing英文的缩写,它是一款优秀远程控制软件,类似Windows的终端服务。…

嵌入式Linux操作系统移植IMX6开发板之实现USB 自动挂载

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 本篇文章讲述如何实现USB自动挂载,U盘即插即用,不用手动挂载的方法,以及给出U盘自动挂载的原理。 目前做的IMX6开发…

C# 繁体,简体 互转

usingMicrosoft.VisualBasic; publicstaticstringTraditional2Simplified(stringstr) { //繁体转简体 return(Microsoft.VisualBasic.Strings.StrConv(str, Microsoft.VisualBasic.VbStrConv.SimplifiedChinese, 0)); } publicstaticstringSimplified…

【C++深度剖析教程8】C++的操作符重载的概念

之前学习了类的函数重载的概念,今天学习操作符重载的概念。在这之前我们先看一个例子: 上面是一个复数的加法,a为复数的实部,b为复数的虚部,在main函数里我想实现复数c1与c2的加法。很显然,正常的号操作符…

大数据开发者应该知道的分布式系统 CAP 理论

无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的。本文就来介绍一下到底什么是CAP理论,如何证明CAP理论,以及CAP的权衡问题。 CAP理论概述 CAP理论&a…

【C++深度剖析教程11】C++学习之编写代码实现复数类

今天,我来学习将复数的加减乘除以及比较运算,编写一个复数类,方便计算复数之间的运算。具体用的方法就是之前写过的操作符重载的概念来实现(操作符重载的概念学习)。 那么为了显得清晰,今天写的程序运用模块…

IT餐馆—第二十五回 结对

周五开会时,有人提出在团队中采用结对开发的Agile实践。 当然团队里有人说,如果让新手与水平高的人结对,基本上就是知识的单向传递了,对于新手来说的确是个不错的学习机会,但对于水平高的开发者,就未必不乐…

Spring Cloud各组件总结归纳

前面介绍了很多Spring Cloud的组件,本篇按照自己的角度来做一次归纳。 Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均…

移植Linux系统到iMX6开发板之LVDS显示屏驱动程序的框架分析与移植

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 今天记录一下项目中的关于LVDS显示屏的驱动程序的分析与移植。因为驱动源码厂家已经提供好,我们需要做的就是读懂驱动程序的代码&#xff…

Java api 1.8 中文 帮助文档

java 1.6 帮助文档 中文 链接:http://download.csdn.net/detail/qw599186875/9608735 英文 Java1.8 帮助文档 英文 中文 – 谷歌版 在线版: https://blog.fondme.cn/apidoc/jdk-1.8-google/下载链接:http://download.csdn.net/detail/qw599186875/980219…

设计模式记--Observer Pattern观察者模式

观察者模式——定义了对象之间的一对多依赖,这样一来,当一个对像改变状态时,它的所有依赖者都会收到通知并自动更新. 从定义可以看出,OBSERVER(观察者)模式逻辑上需要两组对象来实现.首先它必需要有发布者(Publish),也可称为被观察的目标 (…

前端学习(64):css继承属性小结

今天来总结一点关于css中哪些属性可以被继承,哪些不可以被继承。不是很全,仅供大家参考,也方便于自己以后复习。 一、不能被继承的属性 1、display:规定元素应该生成的框的类型 2、文本属性: vertical-align、 text…

iMX6开发板移植Linux系统之LVDS显示屏驱动程序分析之LVDS参数的匹配过程分析

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇分析LVDS驱动程序移植过程的文章(文章链接为:移植Linux系统到iMX6开发板之LVDS显示屏驱动程序的框架分析与移植&#xf…

日常spoken英语学习

今天遇到一个老外,说:can you speak engilsh dou you know coffee in here 我是想了半天,第一有点蒙,第二确实忘了,咖啡馆在哪了,回了一句:Iam think 感觉不知道如何组织语言了,口…

【C++深度剖析教程9】初探C++标准库

在这之前&#xff0c;我写的C程序不能叫做标准的C程序&#xff0c;因为里面写的大多数还带有C语言的影子。今天我们来学习C标准库。 首先看一下例子&#xff1a;操作符<<的原生意义是按位左移。那么我们重载这个操作符&#xff0c;将变量或者常量&#xff0c;左移到一个…

Quartus II常见问题集锦

1、 【问题】Pin Planner 的使用问题&#xff1a;在QuartusII 7.2 &#xff0c;时序仿真都通过&#xff0c;但是&#xff0c;一旦使用Pin Planner设定引脚后&#xff0c;时序仿真就发生变化&#xff0c;与功能仿真结果不一致&#xff0c;不是理想的结果。使用Pin Planner时要注…

员工考核UI网页界面(PS大屏文件资料)

现分享人员管理可视化数据统计网页UI、员工考核数据可视化UI网页界面模版的UI源文件&#xff0c;供UI设计师们快速获取PSD源文件完成工作。 若需更多 大屏组件&#xff0c;请移步小7的另一篇文章&#xff1a;数据可视化大屏组件&#xff0c;大屏PSD设计源文件(大屏UI设计规范)…

【C++深度剖析教程10】C++中的字符串类

首先我们看看C语言&#xff1a; C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作语言不支持自定义类型&#xff0c;一次无法获得字符串类型 从C到C中的进化过程中引入了自定义类型 在C中&#xff0c;可以通过类完成字符串类型的定义 C标准库提供了st…

docker 使用中遇到的问题

1.执行docker run hello 命令建立镜像过程中报错 开始以为是加速器的问题&#xff0c;将/etc/docker/daemon.json 文件删除还是不行 后来执行了这两条命令&#xff1a;就不报错了如下图&#xff1a; systemctl daemon-reloadsystemctl restart docker.service 参考&#xff1…