市面网关很难满足定制化需求,各大厂都在纷纷自研网关,学会自研网关,成为高潜开发工程师,从容应对多种生产级疑难问题
我们为什么要自研网关?
市面网关的组件以及附加功能太多、技术栈不符合团队、性能参差不齐,定制化比较困难,需要自研网关
有效管理业务系统暴露的上万API
根据自己公司的业务,定制化相关监控指标,为后台可能出现的异常进行提前告警
统一做用户鉴权、流量控制以及灰度发布
降低运维成本,不需要专门配置相应的运维人员
保护后端核心服务,尽量减少核心服务受攻击的概率
全链路追踪,知道服务从哪里来,到哪里去,便于问题定位
从简单到复杂,从0到1手把手带你构建完整的企业级网关
吃透网关底层原理,提升自主研发能力,解决实践中各种疑难问题
掌握企业级网
关开发全流程
从网关需求分析,到网关架构设
计,以及网关核心功能的详细设计
和实现,最后优化网关性能及拓展
拔高。
掌握自研网关整体
实践方法论
API网关如何做到高性能/高扩展/高
可用,API网关如何做微服务治理,
以及设计模式如何应用到项目开发中
等。
攻克实践中
各种疑难问题
从分析到解决统一用户鉴权,监控可
观测性,灰度发布,流量控制,超
时,重试等过程中的各种疑难问题。
在微服务体系架构中,网关起到了门户的作用。一方面,网关能接受从客户端发来的请求,并把这些请求转发到具体的业务模块上,另一方面,在网关层面还可以配置限流和熔断等安全防护措施,以达到保护业务模块的效果。
在基于spring cloud Alibaba 的微服务体系中,可以引入Gateway组件构建应用系统的网关。
网关组件是一种将多个网络节点组合在一起的系统,它可以连接两个或多个网络,是将不同的网络节点和其他设备连接起来的组件,包括服务器,终端和管理服务器。它们的目的在于产生一个更完善的网络,可以添加一些新的设备,允许传输数据,访问网络,加快传输数据的速度等等。
网关本质上是一种计算机网络的主要组件,它主要负责将网络数据传输,管理,存储和必要时重新传输。它还可以控制网络连接,控制所有连接到它的网络上数据传输的类型。此外,它还可以控制网络上设备或终端所使用的协议,并发出各种命令或请求,以确保网络状态的最大可用性和有效性。
gateway与zuul的区别
zuul1.x采用Servlet进行通信,底层是同步IO,新来一个请求就会新增一个线程,并且不会进行回收。所以资源占用较高,也就意味着支持的并发量不高。虽然在zuul2.x将通信调整为了Netty+Servlet来实现,并且支持异步,但是性能上差别不是很大
gateway底层是Netty,支持的请求数在1W~1.5W左右,性能要比Zuul高很多。因此我们更推荐使用gateway。
自定义负载均衡策略
若要自定义负载均衡,只需要继承AbstractLoadBalancerRule类。实现choose和initWithNiwsConfig方法即可
public class MyRule extends AbstractLoadBalancerRule{
@Override
public Server choose(Object v){
// list是服务列表,可返回的是调用的服务
List<Server> list = this.getLoadBalancer().getReachableServers();
// TODO 自定义逻辑
return list.get(0);
}
@Override
public void initWithNiwsConfig(IClientConfig clientConfig){
//
}
}