扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
dubbo和feign
创新互联建站是一家集网站建设,江宁企业网站建设,江宁品牌网站建设,网站定制,江宁网站建设报价,网络营销,网络优化,江宁网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。客户端调用服务端时,@Autowire注解在客户端service中注入了一个代理类(通过扫描@EnableFeignClients和@EnableFeignClient利用JDK动态代理生成的,并注册到了IOC容器),我们在service中调用服务端的eat()方法,其实是代理类在调用,在执行方法eat的时候其实在触发代理类中的invoke方法,invoke方法中就要新建一个Socket连接,服务端也要开一个Socket连接,请求头协议可以为http或者dubbo,请求体中包含了实现类名称、方法名称、方法参数,服务端接收到请求头+请求体之后,dubbo是通过反射,调用本地类的方法,拿到返回值通过Socket返回,而feign直接调用本地服务接口通过Socket返回了。对于feign,服务端会将对外提供的接口打成jar包,提供给客户端,j注册中心地址和端口++ar包中包含方法名和Url,如@ReqeastMapping(/service/eat),所以feign底层通过RestTemplater.getForObject方法就可以在invoke调用了。
总结:
1、使用JDK动态代理为接口创建代理对象
2、执行接口的方法时,调用代理对象的invoker方法
3、读取FeignClient的注解得到要调用的远程服务的接口
4、通过Ribbon负载均衡得到一个要调用的服务提供者
5、使用HttpURLConnection发起请求,得到响应
3.Skywalking在天上跑,不侵入原有代码,任何服务都不需要该,任何依赖都不需要加。是通过agent这种模式,如在启动java项目的时候java -jar -agent 后面可以加个agent探针,
Skywalking启动之后,相当于从代理层Agent监听到class的运行,所有的请求都会走这个agent代理器,如Idea中Jrebel热部署,就是通过agent监听到代码的变化,然后重新启动的。
主要作用就是看哪个服务发生异常,请求时间较慢。
就较为轻量级,用于收集多少人请求,和请求时间。
简单带过即可,不是很重要
普罗米修斯是硬件监控。
日志格式:servername(服务名)+traceId(全局的)+spanId(服务的)
日志收集比率,开发时为1,上线时为0.1,因为链路追踪无需完整日志10%即可,完整日志已经保存在了logback文件。
4.SpringCloudConfig1.Nacos是CP还是AP?
首先Nacos分为注册中心和配置中心,CP和AP是针对于注册中心的,配置中心底层是用的mysql进行存储的。
Nacos注册中心可以为CP也可以为AP,如果注册的节点为临时节点(zookeeper分布式锁),那么为CP,如果注册的是非临时节点,那么即为AP。我认为应该为AP,因为随着服务的增加,可能会面临频繁的上下线,而如果是CP的话,要等集群的注册中心数据达到一致后才会注册和移除,比较耗时,会影响到服务发现的效率和服务调用。如果是AP的话,不管集群中的节点数据是否一致,正常注册和下线服务,注册中心压力就会小一点,保证最终一致性即可。Zk保证的就是CP,但是如果大多数节点挂了的话,ZK也是不能提供服务的。
2.Nacos动态更新配置的原理
首先Nacos采用的是长轮询的方式,就是Nacos的Client端会向服务端发起查询配置更新的请求。
长轮询就是client创建连接,发起一次轮询请求,查询服务端是否有配置更新,这个连接会一直打开,直到服务端有配置更新和超时返回。
nacos客户端要获取服务端的配置更新,就要将本地缓存与服务器配置文件进行比较,一旦发现有更新,就会去更新本地缓存CacheData。在比较的过程中,由于配置项较多,为了减少网络通信数据量,将对比项进行了分片,每个分片大小为3000项,客户端将每个分片的key和对应Value的MD5值拼接为一个字符串发给服务端,服务端将存在更新的key返回给客户端,客户端拿到这些key就会调用服务端获取Value值,然后去更新本地缓存。
这个优化的核心目的,就是减少网络通信数据包的大小,把一次大数据包拆成多个小数据包的通信,虽然会增加次数,但是会提高性能。
加上长连接的方式,减少了轮询次数,实现了动态更新的功能。
3.Nacos心跳机制
首先启动Nacos服务, 当微服务1启动时,
第一步:会先向nacos建立连接,并发送一个心跳请求(5S一次),为了证明我们的网络和服务是OK的,nacos会将我们发送的心跳时间记录下来,
第二步:微服务1向Nacos服务注册,
如果微服务1挂了,微服务2要想从nacos上发现微服务1的信息,怎么办呢?
nacos客户有个定时线程池,
不断的轮询,判断当前系统时间减去最新一次心跳时间,如果大于15S,nacos任务微服务1不健康,如果线程感知到时间大于30S的话,就认为服务下线了,会将微服务1下线干掉。
5.SentinelHystrix是通过线程池中的方式来协调各种降级策略的,中断、创建新线程等,都比较重,越用越重,是通过计数器的算法,来计算还有多少线程可用。
sentinel是通过rateLimiter令牌桶的形式,来发放令牌,是个算法。
是以秒为单位的总数固定。
限流:
比如限制1S内只可以获取100个令牌桶,但是有个问题,第一秒请求时,所有的请求都是在900ms时候打进的,第二秒是是在100毫秒的时候打进的,那就相当于在200ms之内打入了200个请求,显然是不行的,会导致服务崩溃,内存溢出等。
处理方式为,滑动窗口,网卡发送数据包也是用了滑动窗口。
滑动窗口:将1s钟分为5段,每段为200毫秒,当请求打进的时候,计算前四个时间段和本身时间段内的请求是否超过了阈值100,如果超过了,则在当前时间段内不请求,下一个时间段再请求。
6.响应式Web你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流