API-网关从入门到放弃

19次阅读

共计 569 个字符,预计需要花费 2 分钟才能阅读完成。

API 网关从入门到放弃 **

假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等

网关由于对接很多种不同的协议,因此可能需要实现很多种调用方式,比如 HTTP、Dubbo 等,基于性能原因,最好都采用异步的方式,而 Http、Dubbo 都是支持异步的,比如 apache 就提供了基于 NIO 实现的异步 HTTP 客户端。因为网关会涉及到很多异步调用,比如拦截器、HTTP 客户端、dubbo、redis 等,因此需要考虑下异步调用的方式,如果基于回调或者 future 的话,代码嵌套会很深,可读性很差,可以参考 zuul 和 spring cloud gateway 的方案,基于响应式进行改

而异步化的方式则完全不同,通常情况下一个 CPU 核启动一个线程即可处理所有的请求、响应。一个请求的生命周期不再固定于一个线程,而是会分成不同的阶段交由不同的线程池处理,系统的资源能够得到更充分的利用。而且因为线程不再被某一个连接独占,一个连接所占用的系统资源也会低得多,只是一个文件描述符加上几个监听器等,而在阻塞模型中,每条连接都会独占一个线程,而线程是一个非常重的资源。对于上游服务的延迟情况,也能够得到很大的缓解,因为在阻塞模型中,慢请求会独占一个线程资源,而异步化之后,因为单条连接所占用的资源变的非常低,系统可以同时处理大量的请求。

**

正文完
 0