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

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

从我的理解来看,微服务接口设计要考虑以下几个方面: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

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

  1. 微服务接口限流的设计与思考(附GitHub框架源码)

    http://www.infoq.com/cn/articles/microservice-interface-rate-limit?useSponsorshipSuggestions=true&am ...

  2. 微服务架构 接口交互问题_架构师的故事:设计微服务架构

    架构师在软件项目中的作用是提供待解决问题的工作模型.架构师的工作是提供脚手架,开发人员将根据这些脚手架构建他们的代码,使应用程序所有部件都组合在一起. 在构建微服务架构时,项目的架构师主要关注以下3个 ...

  3. 为什么DDD是设计微服务的最佳实践

    在本人的前一篇文章<不要把微服务做成小单体>中,现在很多的微服务开发团队在设计和实现微服务的时候觉得只要把原来的单体拆小,就是微服务了.但是这不一定是正确的微服务,可能只是一个拆小的小单体 ...

  4. 腾讯技术分享:微服务接口设计原则

    来源|腾讯技术工程(ID:Tencent_TEG) 本文结合自身后台开发经验,从高可用.高性能.易维护和低风险(安全)角度出发,尝试总结业界常见微服务接口设计原则,帮助大家设计出优秀的微服务. 1.前 ...

  5. 13 | 代码模型(上):如何使用DDD设计微服务代码模型

    13 | 代码模型(上):如何使用DDD设计微服务代码模型 Reference DDD实战课

  6. 微服务平台建设之微服务2.0技术选型思考

    前言 前事不忘后事之师,本篇博客是在拜读和学习了杨波的<微服务架构技术栈选型手册>后结合自己的整理和思考. https://www.infoq.cn/article/micro-servi ...

  7. 【微服务】重新理解微服务之终究绕不过这4个坎?

    大家曾经有没有遇过日常技术交流的时候,会讨论某某技术之间的关系是什么,某些技术是否应该用到微服务.我相信热爱技术交流的您,就算不是在微服务这里领域,或多或少都会跟其他同行会做一些争议话题的探讨,而且我 ...

  8. 微服务启动顺序_基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  9. 基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

最新文章

  1. vue element的若干问题
  2. IOS 控件 - Swift 集成 IOS 自带 API 扫描二维码
  3. python各种数据类型的常用方法_python的基本数据类型:列表的方法
  4. 关于 SAP Spartacus SSR 模式和 CSR 模式下重复发送 HTTP 请求调用 OCC API 的问题
  5. ffmpeg 分辨率 压缩_用GPU加速FFmpeg中的超分辨率功能
  6. 用javascript实现动态增加DataGrid行
  7. java设计模式—单例模式
  8. 为什么微软要把数据中心设在水下?
  9. 萤火虫小程序_线上服务不断档 萤火虫水洞·地下大峡谷推出“云旅游”新体验...
  10. GB2312汉字区位码、交换码和机内码转换方法(转)
  11. TI单芯片毫米波雷达代码走读(十八)—— 多普勒维CA-CFAR检测之C代码实现
  12. 联想Thinkpad sl400 7HC入手感觉
  13. Qt--QTablewidgets 表格插入图片,且可以自动调整图片的大小
  14. 简单几步实现RTMP直播
  15. 《程序员面试》---你所不了解的offer话术
  16. C++ Primer Plus读书笔记
  17. 你好,你是谁,可不可以向我出示源代码让我确认身份
  18. 如何选择适合你的兴趣爱好(四十二),风筝
  19. oracle10g数据库复制,Oracle10g中Duplicate复制数据库
  20. 排毒一年,长寿十年,排出毒素,一身轻松 要美容 先排毒

热门文章

  1. 第五十九期:如何在Windows 10中执行Windows Defender离线扫描?
  2. Linux du查看磁盘文件夹占用容量
  3. linux命令修改内容怎么回退,linux命令(修改).doc
  4. mysql整理类型_MYSQL数据类型分析整理
  5. 统计通话次数和时间的软件_通话时间统计app下载|通话时间统计安卓版下载 v1.0.3 - 跑跑车安卓网...
  6. python 图片 变清晰_python实现图片变亮或者变暗的方法
  7. HttpClient系列~StringContent与FormUrlEncodedContent
  8. eclipse启动项目
  9. Maven parent.relativePath
  10. 设置WordPress文章关键词自动获取,文章所属分类名称,描述自动获取文章内容,给文章的图片自动加上AlT标签...