Eureka是服务注册中心,将服务都到一个注册表内,让其他服务进行访问此注册中心。
有几个需要记住:
Eureka属于AP,不保证数据一致性。
1、服务注册在第一次发送心跳的时候提交。
2、每个client需要每30秒发送一次心跳来续租,90s没有响应,那么会剔除掉。
3、自我保护机制,默认85%。防止到了90s后没有响应,但是由于网络抖动造成服务不可用情况。
4、传播到其他eureka集群可能需要2分钟。
5、Server端将定期将没有心跳的服务剔除,这个是用timer。一般开启自我保护则不开启此配置。
6、可以向注册中心发送delete请求,主动删除。
7、控制服务的上线,将自己的健康状态传给server。Health是UP或者DOWM传给server。
Ribbon是客户端负载均衡技术。
1、客户端负载均衡是地址列表在客户端里,而服务端负载均衡则是在服务端中。
2、Ribbon有多种负载均衡策略,默认区域权衡策略,其他策略比如轮询、随机等策略。可以针对不同服务定不同策略。
3、Feign默认支持Ribbon;Ribbon的重试机制和Feign的重试机制有冲突,所以源码中默认关闭Feign的重试机制,使用Ribbon的重试机制。
4、设置超时的时候,需要分两部分设置,一个为建立连接是否超时,一个是业务线程耗时。并且重试是每隔6s进行重试。
都是服务调用的方法。
1、RestTemplate用getForObject方式获取,通常请求端需要编写一个映射路径,让服务端进行准备资源。
2、网页先给请求,请求打到consumer方的controller,然后转给consumerapi,consumerapi里也有请求资源路径,这个资源路径是对着provider方的资源路径。consumer继承给定的api,provider实现api。这样provider有啥,那么consumer就能用啥了。
服务调用的容错机制,协调两个服务。主要做了服务降级、熔断、限流。
1、熔断:尝试向其他服务器发送请求前,请求失败的阈值达到一定阈值时(5秒内20次调用失败),立即切断对当前服务的所有请求。直接抛异常。这里有个半请求概念,达到阈值后,可以随机发送一次请求。
2、降级:这里的降级就是在请求一个服务器后,没请求到,请求其他服务器,还是不行,那么返回一种比较友好的界面,比如服务器正忙,一般用兜底数据处理。
3、代码中,run相当于try,getfallback相当于catch。
4、限流:consumer不给一个用户无限开线程。可以用隔离方案,一旦一个线程池满了,请求立即被拒绝,为了快速失败。
5、默认情况下hystrix使用线程池控制请求隔离,线程池隔离技术,是用 Hystrix 自己的线程去执行调用;而信号量隔离技术,是直接让 tomcat 线程去调用依赖服务。信号量隔离,只是一道关卡,信号量有多少,就允许多少个 tomcat 线程通过它,然后去执行。
6、Hystrix针对具体的服务,线程池里给他分配线程数。(线程隔离)不至于给consumer拖死。一个服务的线程池挂了,不会影响其他服务的线程池。
7、信号量隔离利用了tomcat里的worker线程池,是一种阻塞式的,不需要内部线程池。线程隔离是自己需要设置一些线程池,优点是有失败策略,可以将异常线程池隔离,并且异步请求。默认是线程池隔离。
所有的外部请求都会先经过微服务网关。
如果能跟踪每个请求,中间请求经过哪些微服务,请求耗时,网络延迟,业务逻辑耗时等。我们就能更好地分析系统瓶颈、解决系统问题。因此链路跟踪很重要。zipkin与sleuth
所有需要监控的server都需要加入admin客户端,可以发送qq邮箱通知或者钉钉通知。
配置写在配置文件中,没有什么大问题。如果要切换环境 可以切换不同的profile(2种方式),但在微服务中,配置文件过多。
手动配置热更新,用actuator/reflush,发送post请求。