Spring cloud 提供了服务注册和发现功能,如果需要自己实现,可以考虑用 Zookeeper 作为注册表,客户端用 Curator。
5. 局部失败
在实现 API 网关时,还有一个问题需要处理,就是局部失败的问题 。该问题在所有的分布式系统中都会出现,无论什么时候,当一个服务调用另一个响应慢或不可用的服务,就会出现这个问题 。API 网关永远不能因为无限期地等待下游服务而阻塞 。不过,如何处理失败取决于特定的场景以及哪个服务失败 。如果缓存数据可用,那么 API 网关还可以返回缓存数据 。数据可以由API网关自己缓存,也可以存储在像 redis 或 Memcached 那样的外部缓存中 。通过返回默认数据或者缓存数据,API 网关可以确保系统故障不影响用户的体验 。
在编写代码调用远程服务方面,Netflix Hystrix 是一个异常有用的库 。Hystrix 会将超出设定阀值的调用超时 。它实现了一个“断路器(circuit breaker)”模式,可以防止客户端对无响应的服务进行不必要的等待 。如果服务的错误率超出了设定的阀值,那么 Hystrix 会切断断路器,在一个指定的时间范围内,所有请求都会立即失败 。Hystrix 允许用户定义一个请求失败后的后援操作,比如从缓存读取数据,或者返回一个默认值 。如果你正在使用 JVM,那么你绝对应该考虑使用 Hystrix。而如果你正在使用一个非 JVM 环境,那么你应该使用一个等效的库 。
6.参考实现方案
以上列出在 diy 这个 API 网关时需要考虑的点,以及参考的技术实现 。下面是几种目前比较流行的 API 网关搭建的技术方案供参考,后续文章将给出这些方案搭建的例子
1)Nginx + Lua实现负载均衡、限流、服务发现等功能
2)使用 spring cloud 技术栈,其中 zuul 就是用作 API 网关的
3)Mashape 的开源 API 网关 Kong
7.网关控制台
提供 domain 管理、应用管理、服务授权、服务监控、统计和度量数据展示、查看服务全局视图等功能 。服务消费者和服务提供者都要在网关控制台进行应用注册,控制台为每个应用分配应用id(AppId唯一)和应用密钥(appSecret) 。注册时需要提供的信息:应用名称、应用描述、应用负责人相关信息 。
推荐阅读
- Java中equals和==的区别,你知道吗?
- 适合前端初学者的JavaScript函数代码
- Java反汇编指令全集
- Java虚拟机原理
- Javascript:Promise对象基础
- JavaScript Proxy基本知识梳理
- Java线程中断的正确姿势
- Java常量、变量、数据类型详解
- 抖音,未来唯一有可能挑战阿里地位的选手:3个子行业、11精选股
- 中国民间茶联精选
