前言
当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问,网关是对客户端的入口与出口,在生产运行中极为重要,哪怕是简单的重启也会导致部分请求的丢失。
网关的路由配置这个时候就是一个大问题,是代码里面编写还是配置文件配置?他们都有一个致命的缺点,当有新的程序需要接入到网关进行路由或者有服务需要下线时候需要修改代码或者配置,然后重启整个网关程序,导致其他正常的服务路由受到了影响。
所以在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启网关,所以实现动态路由是非常有必要的;
本文主要介绍Spring Cloud Gateway 实现的思路,并且把路由信息存放在外部源中,这粒以Nacos为数据源来讲解。
技术面(一、二、三面)
- Java 有什么锁类型?
- 有了解Spark吗?Spark为什么比Hadoop要快?
- 谈谈poll和epoll,epoll是同步还是异步
- JMM、老年代在什么情况下会触发GC、对老年代的GC会不会导致程序卡顿?(最优吞吐量和最短停顿时间)
- TCP怎么断开连接
- 讲一讲红黑树
- 红黑树插入一个结点的时间复杂度
- 你所知道的算法的时间复杂度有哪些?快排的复杂度是多少?为什么?
- HashMap的实现,为什么结点插在链表的头部容易导致死锁?
- HashMap扩容
- 手撕代码:字符串a和b,假设只由26种小写字母组成,且a比b长,判断b中字符是否在a中都有出现
- JDK11的ZGC
- Java类加载过程
- 手撕代码:双向有序链表,去除有重复值的所有结点
- 说你熟悉的几种设计模式,手写单例设计模式
- ConcurrentHashMap的实现有了解吗
- 画B+树的底层框图,B+树的叶子结点是什么结构
- 给已经存有0-99的索引的B+树,查询3-30的索引对应的记录
- 如何保证缓存与数据库的双写一致性?
- Redis 和 Memcached 有什么区别?
- Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多
- 分库分表之后,id 主键如何处理?
- 如何自己设计一个类似 Dubbo 的 rpc 框架?
HR面
- 哪个项目收获最大,项目中遇到问题是怎么解决的?
- 说一个你的缺点
- 你更希望做平稳的业务,还是去做新业务?
- 你觉得从0到1和从1到100哪个更难?
- 你未来职位的规划