文章目录
  1. 1. 写在文章前
    1. 1.1. 工作中遇到的问题
    2. 1.2. spring cloud使用中遇到的问题
    3. 1.3. 后记

写在文章前

因为最近工作比较忙基本是996的状态还有自己的私事要处理,所以好久没有整理过自己的博客。趁着空闲时间记录下之前工作和平时遇到的问题,便于后面查阅。

这段时间工作之余将之前的风控系统用flink流式框架进行了重写,并计划用Spring cloud与vue admin做一个可视化框架,使这套框架能成为通用的规则处理引擎,后面会专门写文章进行介绍,先放上github地址吧。

flink流式规则处理

spring cloud后台

vue admin前端

工作中遇到的问题

  1. 工作中之前使用cat组件进行apm性能监控,使用开源版本下来有各种各样的问题,自己增加了些功能,也解决了写bug但是没来及提交问题,后面有时间也下记录吧。在新的项目重构中已经弃用了cat方案,选用了skywalking。

  2. 另一方面在对公司项目重构的过程中使用了spring cloud框架,注册中心使用nacos,遇到偶尔情况下应用会疯狂刷日志的情况,这个问题是由于nacos client与nacos server对同一个配置文本进行md5时两端的md5值不一致导致的,服务端的md5值首位0会丢失,解决了这个bug但是也没来得及提交…

    这个bug官方在1.3版本中已经解决了,但是将md5加密的方法都进行了重写,没有在老方法基础上进行更改。

spring cloud使用中遇到的问题

最近比较忙是要将公司的项目进行重构并选用了spring cloud框架,网关使用spring cloud gateway,注册中心使用nacos等,使用feign进行协议传输项目基本完成到一定阶段后进行了压测并遇到了一些问题这里记录下遇到的问题。

  1. Spring cloud gateway的调优,spring cloud gateway使用webflux方案底层使用netty框架。在压测过程中网关性能始终上不来,处理能力还不如直接访问应用本身来的快,查阅资料后进行了一些参数调整,调整后的启动参数如下

    1
    2
    -Dreactor.netty.pool.maxConnections=1000
    -Dreactor.netty.ioWorkerCount=32

    起主要作用的是对ioWorkerCount值的设置,work是netty处理请求的thread,该值默认等于处理器数量最小值为4。具体的介绍可以看有关netty框架的介绍。

  2. 压测过程中还碰到大量并发访问系统过程中,作为fegin server的一端会产生大量的tcp time_wait的连接,这其实是由于tcp client已经断开但是tcp server端还会有一段时间等待断连。这个知识涉及到tcp协议的三次握手与四次挥手,之前只在面试中被问到过,现在总算遇到了场景(逃…)

    解决办法是调整系统参数可以解决,调整这些参数也只是为了应对系统大并发,系统并发不是很大的话可以不调整的,在Linux系统/etc/sysctl.conf文件中加入如下值,具体意义可以百度到

    1
    2
    3
    4
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 30
  3. 还遇到的一个情况是fegin碰到数据发送超时会进行重试,但是有些业务场景尤其是金融相关的情况,即便是网络超时也不进行重试(有可能对方已经收到了数据,但是响应超时,尤其是对接第三方接口的情况下),所以我们关闭了feign的超时重试机制。

  4. 一个小改动方面是在使用nacos的过程中,应用的配置信息在启动或者刷新配置的时候会将配置信息打印到日志中,配置信息有可能包含一些敏感信息不符合PCI安全规范,所以也在启动过程中进行屏蔽,启动参数中加入如下

    1
    2
    -Dlogging.level.com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder=ERROR
    -Dlogging.level.com.alibaba.nacos.client.config.impl.ClientWorker=ERROR

    加入远程nacos并不能生效,加入到bootstrap.properties会生效,但是要所有应用都要改动,所以添加到了启动参数中。另外其实远程生效也是可以实现的这个跟alibaba spring cloud nacos的代码有关,在上面的参数类中都没有加入@refreshscope注解所以不会生效。

后记

随着工作强度加大和年纪增大家庭琐事也会越来越多,也只能靠工作和平时碎片时间进行学习和记录一点东西,下次想写一些自己阅读的一些开源代码和解决的一些开源bug,希望以后自己能多有一些时间多读读书,多动动笔……

文章目录
  1. 1. 写在文章前
    1. 1.1. 工作中遇到的问题
    2. 1.2. spring cloud使用中遇到的问题
    3. 1.3. 后记