云南微网站建设的公司有哪些百度广告投放平台
云南微网站建设的公司有哪些,百度广告投放平台,软件开发模型螺旋模型,洛阳网站建设价格低背景
前一阵#xff0c;线上某个服务升级#xff0c;典型的spring boot应用#xff0c;引入了spring cloud#xff0c;主要是为了使用nacos来统一管理配置。
典型的bootstrap.yml配置如下#xff0c;包含了用户名密码#xff1a;服务启动时#xff0c;就会去nacos读取配…背景前一阵线上某个服务升级典型的spring boot应用引入了spring cloud主要是为了使用nacos来统一管理配置。典型的bootstrap.yml配置如下包含了用户名密码服务启动时就会去nacos读取配置读取配置当然要先登录这里配置的用户名密码就是登录用的。我们遇到的问题是线上那个服务不是第一次上线一直跑得好好的本次更新主要是更新了fat jar改了点业务逻辑像bootstrap.yml这些没任何改动。结果运维同事替换了jar包后一重启说启动不了说你这个包是不是有问题啊。定位过程抓包过去运维那边看了下发现报错是说什么数据库连不上ip一看是开发环境的数据库ip我就感觉是不是没取到nacos里的配置所以用了默认的开发环境配置了fat jar中有默认的开发环境配置文件。我就说这得抓个包看看nacos的监听端口是8848主要用于登录获取token还有9849用于服务注册、配置拉取等。/* by yours.tools - online tools website : yours.tools/zh/shupai.html */ tcpdump -i any tcp port 8848 or tcp port 9848 -w nacos.pcap把包抓下来一看发现确实没拉取到配置但是原因是登录就失败了。报文如下网页端登录难道是密码错了吗然后同样的用户密码在nacos管理系统那里登录发现是正常的。这个确实是很奇怪F12看了下看了接口也是上面那个接口。唯一不同的也就是参数携带方式有一点差异这个网页端是用户名、密码都在form表单的http body里。而api那边是username在url里密码在body里。拉人然后我们就确认是nacos 服务端感觉有点问题。另外我们也找了其他类似的服务A把那个服务A用的nacos用户名、密码拿过来配置到本服务里重启发现竟然也报同样的错误。然后就感觉是nacos服务端出了问题找到对应负责的同事一起来看。我们还测了下把服务A自己重启了下发现重启也启动不起来了同样是提示403用户找不到。接下来继续测试当时是怀疑是不是密码有特殊字符导致的然后nacos负责人把我们的用户的密码重置了下然后我们重试发现可以了。最终的解决就是靠把用户的密码重置一下也就是改一下密码就好了但不是特殊字符的问题我们试着改成了有特殊字符的密码发现还是可以成功启动的。这个事当时也就了了没管了。继续探索登录接口今天空了后感觉这个事情还是有点古怪为什么密码重置后就好了当时我就怀疑nacos服务端内部估计有缓存可能是缓存出问题了然后重置密码这个动作就导致缓存变得正常了。网上没找到特别匹配我这个案例的翻了半天看到有nacos源码解析的于是我就想着代码拉下来看一下算了。线上的nacos版本不确定但应该是2.2.2因为我看了下开发环境就是这个版本。找了对应的源码https://github.com/alibaba/nacos/tree/2.2.2https://github.com/alibaba/nacos/releases/tag/2.2.0直接下了个zip包idea里打开。全局搜索login发现如下代码com.alibaba.nacos.plugin.auth.impl.controller.UserController#login然后这里有个根据用户名查找用户详细信息的下面这里先是去一个缓存map里查询如果没开启一个cacheEnabled的开关则会继续去查数据库以数据库的为准/* by yours.tools - online tools website : yours.tools/zh/shupai.html */ private MapString, User userMap new ConcurrentHashMap();我看了下我们本地开发环境的开关反正是默认打开的我估计线上也是这样也就是说是允许缓存的这都年末了运维放假了不打扰了。具体的缓存开关是这个public static final String NACOS_CORE_AUTH_CACHING_ENABLED nacos.core.auth.caching.enabled;配置文件中是开启的[rootCOMPASS-NACOS-1 nacos]# cat conf/application.properties |grep caching ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. nacos.core.auth.caching.enabledtrue那就是了应该就是缓存里的用户数据有问题。那为啥重置密码就好了呢修改密码接口修改密码这个我们当时还测试了自己改密码还不行必须是nacos负责人那个管理账号改了才生效的。另外我看了下上面那个登录接口里查用户的sql如下public User findUserByUsername(String username) { String sql SELECT username,password FROM users WHERE username? ; return databaseOperate.queryOne(sql, new Object[] {username}, USER_ROW_MAPPER); }那修改密码全局搜一下update userscom.alibaba.nacos.plugin.auth.impl.controller.UserController#updateUser我们发现改密码的接口朴实无华就是改下数据库没涉及到清下缓存啥的那就从那个缓存的map着手看了下com.alibaba.nacos.plugin.auth.impl.users.NacosUserDetailsServiceImpl#reload结果发现了一个定时任务这里每隔15s执行一次从数据库加载user数据到缓存那就理解了改密码是只操作数据库然后定时任务去数据库查询最新数据放到缓存里这样呢缓存数据就和数据库数据一致了。另一个猜测缓存每15秒从数据库同步缓存数据有问题是不是说明有问题的可能是数据库呢也就是说数据库里的用户数据出了问题通过修改密码的方式才正常然后15秒后缓存里数据变得正常。至于数据库数据为啥出了问题这个就不好找了本篇就不探究了。