微服务最经典的三种服务发现机制
下面是图示:
客户端访问后端需要知道IP地址和端口号,以前每一个服务都被固定的部署到某一台机器上,默认端口号和IP地址都是可以通过客户端配置文件读取到的,微服务体系中,服务实例对应的网络地址是在动态变化的.
独立LB:
负载均衡器采用硬件f5或软件nginx负载均衡器
当服务的提供方上线以后,会向运维申请一个域名,运维配置负载均衡器,域名指向后台的服务。
服务消费方要去访问后台服务,要去通过DNS进行域名解析,解析到LB,LB根据域名解析到后台服务.
缺点:
- 集中式LB可能是单点会影响到整个服务无法访问
- 消费方访问后台服务的时候会穿透LB,有一定的性能开销
进程内LB:
普遍的做法
服务提供方定期向服务注册中心发送心跳包,LB定期同步服务注册表中的服务信息,消费方通过LB调用服务.
优点:
- LB在消费方的应用进程当中,性能较好
缺点:
- 多语言环境中需要为每个消费者开发客户端,升级成本高
主机独立进程LB:
LB的功能以独立进程的方式部署在独立主机上
优点:
无单点问题,无性能问题,运维成本较高,因为在服务消费方主机上都要部署LB
Service mesh:
SideCar:
Service mesh
首先服务网格是一个基础设施层,功能在于处理服务间通信,职责是负责实现请求的可靠传递。在实践中,服务网格通常实现为轻量级网络代理,通常与应用程序部署在一起,但是对应用程序透明。