别再管你的API叫微服务了

你有没有听过这句名言:“计算机科学领域只有两个难题,缓存失效和命名”?据说这句话是Phil Karlton在1996年或1997年左右说的。围绕这句格言确实出现了很多带有喜剧色彩的说法,它们也提到了其他的一些问题,但最近我对API世界的观察似乎证明了“命名”确实是个大难题:人们对“API”和“微服务”这两个术语存在混淆,有些人似乎已经把它们混为一谈了。

计算世界在不断发生变化。开发人员使用各种概念和技术,并以不同的方式将它们连接在一起。因此,我们使用不一致的术语,用多个术语来描述大致相同的概念,或者用同一个术语表示不同的事物,这些情况并不罕见。

关于API和微服务:是的,它们是相关的概念,它们之间存在相互作用,但它们并不是同一种东西。所以,我想直截了当地说出我的看法!

什么是API?

API是应用程序编程接口(Application Programming Interface)的缩写。维基百科指出,“总的来说,它是各种组件之间的一组明确定义的通信方法”。它可以是软件框架或库的接口,也可以是操作系统为原生系统软件(如POSIX)开发人员公开的底层接口。

这也是API能够如此令人感到兴奋的一个方面,因为各种开发人员可以利用其他人构建和公开的基础设施来增强其应用程序的附加功能。

现如今,当人们谈论API时,他们通常指的是通过HTTP端点公开的远程接口。为了区分这些远程API和上面提到的本地系统API,我将用术语“Web API”指代远程API。(虽然有些人将这个术语用来指代浏览器的本地API——有点令人困惑,对吧?)

我们通过底层设计范式(如查询、RPC或RESTful)或协议(如SOAP、gRPC或GraphQL)进一步对远程API(或Web API)进行分类。除此之外,我们还通过目标受众来区分API,将它们分为公共、合作伙伴或私有/内部API。

API的两面性

严格来说,API仅用来描述接口,也就是客户端和服务器、API消费者和API提供者之间用于交换信息的语言。对于API消费者来说,API只不过是对接口和端点URL或URL集的描述。URL是Web的基本构建块之一,客户端可以在不知道服务器性质或位置的情况下访问信息或服务。只要客户能够收到响应,它根本不管URL是指向隐藏在某个地下室的Raspberry Pi还是位于某个大陆数据中心的全球交付网络。这也是API能够如此令人感到兴奋的一个方面,因为各种开发人员可以利用其他人构建和公开的基础设施来增强其应用程序的附加功能。

但是,API提供者不仅要设计、实现和文档化API,还要考虑它背后的基础设施。在云计算时代,可能不需要购买硬件和租用数据中心。相反,API提供者可以选择各种“XX即服务”产品——从虚拟机或容器的托管集群到完全无服务器的代码托管环境。无论选择了什么样的基础设施,他们都需要部署API。

我这里说的部署API是指部署暴露API所必需的代码和基础设施。从提供者的角度来看,API并不是一个神奇的大门,而是需要在某个地方运行的有形资产。而且,随着公司转向微服务架构,这种资产就会变成微服务或一组微服务。

什么是微服务?

微服务是系统或应用程序中的自包含独立组件。每个微服务都应该有明确的作用域和责任,理想情况下,一个微服务只做一件事。它应该是无状态的或有状态的,如果它是有状态的,它应该带有自己的持久层(即数据库),不与其他服务共享。软件开发团队基于微服务架构以更分散的方式开发可重用的独立组件。他们可以为每个微服务使用自定义框架、依赖关系集,甚至是完全不同的编程语言。微服务也有助于实现可扩展性,因为它们本质上是分布式的,并且每个微服务都可以独立增长或复制。

容器和微服务

容器是在操作系统中建立隔离上下文的一种方法。实际上,这意味着它们中的每一个都有一个单独的包含了一组已安装的软件和相关配置的虚拟文件系统。由于它们是相互隔离的,因此任何容器都不能直接访问或影响其他容器或底层宿主操作系统。

创建容器的能力已经成为Linux操作系统的一部分,这种能力已经存在了很长一段时间,但直到2013年Docker的推出,容器才成为一种流行的技术。

当我们在谈论定义时,需要注意的是微服务和容器其实是不一样的东西,但这两个概念经常被放在一起谈论,就像API和微服务一样。如果没有容器,要么把服务器配置成可以运行多个微服务,让这些微服务不可避免地相互产生负面干扰,要么每个微服务都需要一个单独的服务器或自己的虚拟机,导致不必要的开销。因此,微服务通常被部署在一组由容器集群软件(如Kubernetes)管理的一组容器中。可以肯定地说,容器和微服务的崛起其实是相互影响、相互促进的结果。

微服务之间的通信

基于微服务架构构建的应用程序或API不仅要把自己完全暴露出来,还需要在内部组件(微服务)之间建立连接。由于每个微服务都可以使用不同的编程语言实现,我们需要依赖标准协议(如HTTP)来建立微服务之间的连接。这个时候我们就回到了API上。

最基本的形式是每个微服务都公开一个API,让其他服务可以向这个API发出请求并获取数据。也可以使用其他不同的方法,比如消息队列。微服务API是私有API,仅限用在单个应用程序中。它通常不提供公共URL,而是使用组织内部专用网络的私有IP或主机名,甚至是单个服务器集群内的IP或主机名。不过,这些API可以遵循类似公共API那样的设计范式或协议。而且,尽管它们的消费者数量有限,也应该遵循开发者体验的基本规则。也就是说,它们应该拥有相关的、一致的、可演化的API设计和文档,让其他团队(甚至是你自己)知道如何使用这些微服务。因此,你可以而且应该使用类似的工具来创建你的微服务API。

当然,与更面向外部的API相比,在设计微服务API时有不同的侧重点。

\"\"

微服务和API是不同的东西,就像微服务和容器也不是同一种东西一样。不过,这两个概念以两种不同的方式协同工作:首先,微服务可以作为部署内部、合作伙伴或公共API后端的一种方法。其次,微服务通常依赖API作为与语言无关的通信手段,以便在内部网络中相互通信。开发团队可以使用相似的方法和工具来创建公开API和微服务API。

英文原文:https://blog.stoplight.io/stop-calling-your-apis-microservices-e165a80eba9d

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

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

相关文章

第一篇JavaScript基础

1.什么是JavaScript 2.核心语法,变量 先声明,再赋值 var i;i0; 同时声明并赋值变量 var x,y,z0; 不声明直接赋值u2(变量可以不经过声明直接赋值,但是容易出错,这种方法不建议采纳)3. 3.核心语法&#xff0…

透过迷雾不再迷茫 浅析海康威视透雾技术

频监控的需求主要分为两类,白天的需求和夜间的需求。夜间效果主要的提升之道以低照度和补光居多,也就造成了现在市面上白光补光、红外补光、激光补光等各式各样的摄像机盛行;非补光类的,当属星光级超级照度是为当下热门。而关于白天效果的提升…

抓包工具

前言: Charles是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 一、主界面介绍 二、网页抓包 启动 Charles 后,需要将 Charles 设置成系统代理…

详解Session分布式共享(.NET CORE版)

一、前言&回顾 在上篇文章Session分布式共享 Session Redis Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的Session方案与微软Session方案相比,有什么优势呢?Co…

浅析透雾监控镜头的四大透雾技术

透雾摄像机在雾天中的作用毋容置疑,YAMAKO透雾镜头早已获得用户的认可,如今,高清透雾摄像机的问世,很大程度上得益于透雾高清电动镜头,但摄像机本身的透雾原理也在近端时间获得极大的进步。 透雾技术主要分为四种&…

外网访问原理分析

本节我们会将上节创建的 ext_net 连接到 router,并验证内外网的连通性。 更重要的,我们会分析隐藏在表象之下的原理。 将外网连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网。 点击菜单 Project -> Network -> Routers 进入 …

URAL1519 Formula 1 —— 插头DP

题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 secondMemory limit: 64 MBBackground Regardless of the fact, that Vologda could not get rights to hold the Winter Olympic games of 20**, it is well-known, that the city…

2018年中国视频监控行业发展空间巨大 AI技术赋能发展乃是未来必然趋势

https://bg.qianzhan.com/report/detail/459/190131-c2610ca0.html2019-2024年中国视频监控设备行业市场需求预测与投资战略规划分析报告2019-2024年中国安防行业市场前瞻与投资战略规划分析报告2019-2024年中国智能安防行业市场前瞻与投资战略规划分析报告2019-2024年中国智能…

FTP下载文件

今天公司有需求,需要从远程FTP服务器上下载文件到本地代码。然后看了一下,顺便做个记录 什么是FTP呢? 详细百度百科 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用…

2018年中国视频监控行业现状及行业发展趋势分析预测【图】

一、中国视频监控行业现状 中国 2013-2018 年模拟标清视频监控摄像机和模拟高清视频监控摄像机的复合增长率分别为-15.2%、 29.6%。 模拟标清视频监控摄像机需求量不断下降, 预计 2018 年同比下降 13%, 将下降到 0.38 亿台。 模拟高清视频监控摄像机需求…

C#中控制线程池的执行顺序

在使用线程池时,当用线程池执行多个任务时,由于执行的任务时间过长,会导制两个任务互相执行,如果两个任务具有一定的操作顺序,可能会导制不同的操作结果,这时,就要将线程池按顺序操作。下面先给…

MySQL触发器 trigger学习

触发器:一类特殊的事物。可监视某种数据操作,并触发相关操作(insert/update/delete)。表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求。 作用:变化自己主动完毕某些语句查询,加…

js调试笔记

js调试方法很多,今天总结一下最实用的的断点方法: debugger断点 这个很常见,但许多人不知道其实可以添加条件判断 if(something){debugger;} source断点 这个最为常见,不做过多解释,具体说一下几个重要图标: 恢复脚本执行至下一个…

全球视频监控设备市场规模分析

权威电子行业研究机构IHS Research发布《中国CCTV与视频监控设备市场研究报告》显示,2014年全球视频监控设备市场143亿美元,同比增长14.2%。欧洲、美洲、亚洲都增长低于预期;中国增长高于预期,市场总量达57.1亿美元;美国市场虽然出货量在增加…

201521145048《Java程序设计》第11周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什…

修改chrome记住密码后自动填充表单的背景

2019独角兽企业重金招聘Python工程师标准>>> input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {background-color: rgb(250, 255, 189); /* #FAFFBD; */background-image: none;color: rgb(0, 0, 0); } 转载于:https://my.oschina.net…

2018年我国视频监控市场趋势:智能视频分析进入规模化

在安防领域中,视频监控无疑是不可缺少的一环。我国是全球视频安防行业增速最快的国家之一,近年来我国的视频监控市场经历了持续强劲的发展。我国视频监控市场的高速增长反映了对个人安全及财产保护的担忧增加。为解决该担忧,公司及个人机构大…

第一篇:SpringCloud 构建微服务系统之服务注册和发现(consul)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/85260629 今天我们要学习的是consul在soringcloud中的使用。首先学习consul之前,我们应该看看consul的官网,对它有一个初…

2018 年视频监控企业竞争力分析 海康威视连续七年蝉联全球第一

视频监控是安防行业的核心 近年来,随着我国政府对平安城市、" 雪亮工程 " 以及金融和交通运输等领域的重视,对于安防产品的需求不断提升,安防市场规模也在随之不断扩大。视频监控是整个安防系统最重要的物理基础,视频监…