2024年,全球API调用量突破42万亿次。其中78%仍在使用REST协议——这个数字背后,是无数应用在用户指尖下的卡顿与等待。
开发者不是没感觉。只是REST太顺手了,顺手到让人忘了追问:为什么我的"微服务"一点也不微?
REST的隐藏账单:每个请求都在交过路费
REST(表述性状态传递)的设计哲学很简单:用HTTP动词操作资源,返回JSON(JavaScript对象表示法)文本。这套1990年代诞生的架构,让前后端通信变得像点菜一样直观。
但简单是有代价的。
每个REST请求都要携带完整的HTTP头、URL、方法描述,响应则是臃肿的JSON字符串。一个查询用户信息的请求,有效数据可能只占响应体的15%,其余85%是括号、引号和字段名。
更麻烦的是连接开销。REST基于TCP(传输控制协议),每次请求都要经历三次握手建立连接。高频场景下,你的服务器不是在处理业务,而是在反复说"你好""你好""请讲"。
某头部电商平台曾披露:其购物车服务日均处理12亿次REST调用,仅协议层开销就占用了35%的CPU时间。这不是业务复杂,是协议在吸血。
二进制协议的降维打击:把文本换成电报码
gRPC、Apache Thrift、MessagePack这些名字近年频繁出现。它们的共同点是抛弃文本,改用二进制编码。
类比一下:REST像用中文写快递单,每个字都认识,但信息密度低;二进制协议像电报码,外人看不懂,但收发双方秒懂。
实测数据很直白。Google公开的基准测试显示:同等硬件下,gRPC(一种远程过程调用框架)的延迟中位数是REST的1/50,吞吐量高出8倍。Netflix迁移到gRPC后,其边缘节点CPU使用率下降40%,延迟P99(99分位延迟)从800ms压到15ms。
省下的不是算力,是用户耐心。
二进制协议的优势来自三个设计取舍:
一是HTTP/2多路复用。单个TCP连接上并行传输多个请求,告别"三次握手"的排队噩梦。
二是Protocol Buffers(协议缓冲区)编码。字段用数字标签而非字符串标识,"user_name"变成"字段#1",体积直接砍掉60%-80%。
三是强类型契约。REST的JSON是"希望对方按约定传参",二进制协议是"编译器先检查对错",运行时少了一堆容错代码。
为什么迁移比想象中难
既然二进制协议这么香,为什么REST仍是主流?
生态惯性是座大山。浏览器原生支持HTTP/REST,调试工具(如cURL、Postman)开箱即用。gRPC需要专用客户端,浏览器端还要转一层gRPC-Web。
团队学习成本也不低。REST的"资源+动词"模型符合人类直觉,二进制协议的IDL(接口定义语言)文件、代码生成、版本兼容,对前端工程师是额外负担。
更现实的考量是场景错配。内部服务间通信、移动端API、IoT(物联网)设备上报——这些场景二进制协议优势明显。但对外开放的第三方API,REST的通用性仍是护城河。
Stripe、Twilio等API平台至今以REST为主力,不是技术保守,是客户不想为多一种协议付集成费。
折中路线:不是非此即彼
聪明团队的做法是分层治理。
对内:服务网格(Service Mesh)层统一用gRPC,享受性能红利。Kubernetes生态的Istio、Linkerd原生支持, Sidecar(边车)模式让业务代码无感知切换。
对外:REST网关做协议转换,保留兼容性。用户看到的仍是熟悉的HTTP端点,内部早已走二进制通道。
GraphQL(一种查询语言)是另一种中间态。Facebook开源的这套方案,用单一端点+灵活查询,既减少往返次数,又保留文本可读性。GitHub的API v4全面转向GraphQL后,复杂查询的往返次数从平均4.3次降到1.1次。
但GraphQL也有自己的坑:N+1查询问题、缓存复杂度、文件上传别扭。没有银弹,只有权衡。
某金融科技公司的架构师告诉我:他们花了18个月从REST迁到gRPC,中间踩过版本兼容的雷、调试工具缺失的坑、以及前端团队的集体抗议。最终 latency(延迟)降了90%,但"如果重来一次,会先从小流量服务试点,而非全量硬切"。
你的技术栈里,REST占比多少?最近一次为API性能头疼,是什么时候?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.