我们在一番挣扎后

时间:2021-08-07 05:53:11

虽然已经红了很久,但是“微处事架构”正变得越来越重要,也将继续火下去。各个公司与技术人员都在分享微处事架构的相关常识与实践经验,但我们发明,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高真个专业术语来讲述何为微处事架构。就是没有一个做到成熟地将技术流传出来,同时完美地赐顾帮衬“初入微处事范围人员”,从 0 开始,给与通俗易懂的语言去讲解微处事架构的系列。所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微处事架构专题“Re:从 0 开始的微处事架构”,为还没有入门该范围的技术人员开路,也辅佐微处事架构老手温故知新。

这是专题的第三篇文章,聊聊内网环境中的 API 开发与治理。

 

前面的文章中有说到微处事的通信方法,Martin Folwer 先生在他对微处事的界说中也提到“每个处事运行在其独立的进程中,处事与处事间给与 轻量级的通信机制 互相协作(凡是是基于 HTTP 协议的 RESTful API)”。

那么,在各个微处事之间具体怎么进行轻量级的通信呢?这篇文章就来聊聊微处事 API 开发及治理的几个方面。

首先需要解释一下,标题中的“内网环境中 的 API”指的是供给给内网里的其它微处事挪用的 API。与其相对应的是“开放给互联网 用户挪用的 API”,它们的开发要领梗概不异,但治理要领却不太一样。

相关厂商内容

落地微处事架构必备锦囊

从C#看开放对编程语言成长的影响 Netflix的工程文化:是什么在激励着我们? 百度贴吧之父:产品经理的发明和生长 Apache Kafka的过去,此刻,和未来

 

相关赞助商

 

 

例如开放给互联网用户挪用的 API 需要在 API 网关上加上授权、鉴权、限流、限并发、统计、计费等等成果。

本篇文章分享的是内网环境中的 API 开发及治理。

API 开发

API 开发,首先考虑的就是该用什么样的协议,是 HTTP API 还是 RPC?

我们先来介绍一下这两种 API 类型:

HTTP API

HTTP API 指的是简单的基于 HTTP 协议的 API,具体的例子就是 Spring MVC 的 Controller,例如 

“”。

RPC

RPC 就是 Remote Procedure Call,中文名长途过程挪用,在 API 挪用的场景下,大多指的是基于 Socket 通信要领的长途挪用(固然,我们也可以使用 HTTP 协议来实现 RPC 挪用,例如 gRPC)。Json-RPC 和 Xml-RPC 指的是使用 Json 或 Xml 作为文本格局的方法传输命令和数据。

那么回到适才阿谁问题,到底要使用 HTTP API 还是 RPC 呢?我们之所要比拟 HTTP API 和 RPC,主要是因为大家都知道 HTTP 简单,而基于 Socket 的 RPC 性能更好。

这个问题我们纠结了很久,直到后来,想大白了下面两件事,最终决定在绝大部分场景中使用 HTTP API。

HTTP API 的性能足以支撑大大都项目

凡是来讲(按照资料),算上序列化的时间,RPC 协议的吞吐量是 HTTP 性能 两倍(没有亲测),例如 Protobuf、Thrift、Kyro、Dubbo 等等。

这里面,又以 Thrift 的性能最高。具体的性能测试呈报可以参考《RPC 框架性能根基对照测试》。

(点击放大图像)

我们团队在结合自身技术栈、本钱、不变性、易用性、可维护性、业务场景等等因素综合考虑后,感受我们面临的大大都场景中,HTTP 和 RPC 的性能分歧并不是主要问题。

再加上下图所示的 HTTP 性能测试功效作为佐证,我们完全可以给与 HTTP API 的方法来进行微处事 API 开发。

再者,当业务成长到必然的水平,如果某些业务成果的性能压力变大时,我们还是可以使用 RPC 小范畴地进行改革。这也是切合敏捷思想的一个决定。

下图是对 helloworld 页面进行 10000 次持续请求的测试功效,总耗时 1.504 秒,平均每个请求耗时 0.15 毫秒。

测试环境:原生 Tomcat7(没有任何优化)运行在本地虚拟机上

(点击放大图像)

下面是对 helloworld 页面以 100 并发数进行 10 万次请求的测试功效,平均每个请求耗时 11.9 毫秒。

测试环境:原生 Tomcat7(没有任何优化)运行在本地虚拟机上

(点击放大图像)