分布式和微服务的区别
从概念上讲: 分布式主要强调我们系统的稳定性 可靠性 主要能够保证我们实时在线
微服务主要根据我们业务来划分应用 尽量将应用的粒度划分的很小、划分成一系列小型、独立的服务、降低耦合度
粒度上讲:分布式对粒度可大可小
微服务倾向于更为细粒度的划分
目标上讲:分布式主要通过负载均衡提高系统的稳定性
微服务主要从软件工程方面简化开发流程提高开发效率 一般是为了适应业务的需求快速迭代
Nacos配置中心动态刷新原理
Nacos使用长轮询机制实现实时配置更新
1.客户端发起请求:客户端通过后台线程发起一个 HTTP 请求到 Nacos 服务端,用于监听配置变化。
2.服务器挂起链接:Nacos 服务端接收到请求后,会挂起(hold)这个 HTTP 连接一段时间(例如 30 秒),在此期间服务端监控配置文件的变化。
3.无变化情况:若在这段时间内没有检测到配置文件有任何变更,服务端将释放连接并向客户端返回一个指示,表明配置没有更新。
4.配置变更情况:如果在挂起期间检测到配置文件发生变化,服务端会立即释放连接并将最新的配置推送给客户端。
5.循环轮询:无论哪种情况,客户端在接收完响应后,会在短暂延迟(如 10 毫秒)之后重新发起一个新的 HTTP 请求,从而形成循环轮询机制以持续监听配置更新。
这种方式使得客户端能够及时获取到最新的配置信息,同时减少了不必要的频繁请求。
均衡器
服务端负载均衡器(Nginx 和OpenResty是在Nginx的基础上支持lua脚本)
客户端负载均衡器 (Ribbon)
如果使用的RestTemplate进行服务调用,那么创建RestTemplate的方法上面加@LoadBalanced注解就会开启Ribbon的负载均衡,Ribbon负载均衡有以下7中规则,默认轮询。
轮询(平均分配)
随机(随机选择一个服务实例来处理请求,在某些场合下可以减少特定实例被连续击中的可能性)
权重(根据每个服务实例的历史响应时长动态调整其权重,响应时间越快的服务实例被选中的概率越高)
最佳可用规则(选择一个并发请求数最少得服务实例,侧重选择当前负载较低的服务)
根据ipHash的好处 基于jwt的tokenSession共享的 永远打到一台服务器上的
feign和Openfeign的区别
Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求,开发者无需关注与远程的交互细节,更无需关注分布式环境开发
1.支持spring mvc 注解
2.整合了更多的扩展 (请求重试策略、超时控制、请求拦截器)
流量网关和服务网关的区别
流量网关:(如Nignx,OpenResty,Kong)是指提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书认证、Web防火墙、全局流量监控,黑白名单等。
服务网关:(如Spring Cloud Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、token认证,负载均衡等。
自己写的三大案例
最大的贡献是什么
我跟我们老大把我们的项目介入了EFK,我们在进行多服务调用的时候traceId是没有一路传递过去的,我们在openfeign中做了一个拦截器,将traceId带过去 同时也将token带过去。