起因
小程序上线之后发现一个奇怪的现象,页面向下滑动,点击事件会延迟几秒。滑动的越多,延迟就越久,点击会出现几秒才会能打开新的页面。前端同学没有排查出原因,更换了几种跳转方式问题依旧。
排查
review了一下代码,发现如下代码。能看出问题吗?
1 | onPageScroll(e) { |
页面滚动事件中会不断的执行 setData事件,导致事件阻塞。
更改成如下代码解决:
1 | onPageScroll(e) { |
Happy Coding,Happy Life
小程序上线之后发现一个奇怪的现象,页面向下滑动,点击事件会延迟几秒。滑动的越多,延迟就越久,点击会出现几秒才会能打开新的页面。前端同学没有排查出原因,更换了几种跳转方式问题依旧。
review了一下代码,发现如下代码。能看出问题吗?
1 | onPageScroll(e) { |
页面滚动事件中会不断的执行 setData事件,导致事件阻塞。
更改成如下代码解决:
1 | onPageScroll(e) { |
阿里云所有的特惠活动都是针对新用户,一台1W+的服务器,新用户可以拿到3千多3年,老用户则只有一点点优惠。无奈为了省钱只能拿新手机,新身份证,新公司资质申请账号进行购买,所以导致现在手上的阿里云账号有十来个了。所以务必要解决这十几个账号里的ECS资源能够内网互通。
云企业网(Cloud Enterprise Network)是承载在阿里云提供的高性能、低延迟的私有全球网络上的一张高可用网络。
云企业网可帮助您在不同地域VPC间,VPC与本地数据中心间搭建私网通信通道,通过自动路由分发及学习,提高网络的快速收敛和跨网络通信的质量和安全性,实现全网资源的互通,帮助您打造一张具有企业级规模和通信能力的互联网络。
首先拿一个主账号创建云企网实例
其他需要加入云企网的账号,进入专有网络VPC控制台,云企网跨账号授权给刚刚创建的主账号。
再回到主账号上的云企网,进入详情,点击加载网络实例,填写其他账号的信息。

这样就完成了同地域跨账号的内网互通。如碰到内网还是不通,可能是内网IP段冲突,更改VPC交换机IP段。不知道怎么操作提交宫工单给阿里云。
这个就要花钱了。购买跨地域宽带包,然后按照上述步骤加载网络实例。
某天,晴,准时下班与朋友小聚,酒足饭饱后正商量着第二场活动,这时手机短信响起,随手拿起一看。卧槽,提示服务器蠕虫病毒。遂与友人say sorry。回家打开电脑开始杀毒并排查原因。
首先打开阿里云看下日志。这里还是要点赞一下阿里云的云盾,服务器防护与预警属实做的很牛逼。日志提示服务器被植入挖矿程序,并且告知所在进程
查看到是在容器内植入,好在没有植入我的宿主机。当前主机挂载了好几个容器服务。并且宿主机有做端口限制,应该是跑不出去。
执行top可看到挖矿程序疯狂占用CPU。
ps查看进程运行目录,发现tmp中不存在这个文件,猜想可能是docker容器中的进程。
执行 docker stats
查看容器运行情况。能够发现cpu占用高的容器。
执行 docker top 容器id
查看容器进程详细信息
网上说的redis漏洞。
该镜像没有集成redis。PASS
镜像本身是否存在病毒?
很多镜像可能会集成第三方的插件,或者jar包。那么排查镜像源问题,可使用命令 docker inspect <镜像id>
查看镜像元数据进行排查。我镜像都是自己打包上传,并且本地重新下载镜像并未发现任何异常。大概率PASS
远程执行漏洞?
那就很有可能是存在这个问题了。该docker容器开放了9999(用于xxl-job分布式事务),8085用于spring-boot服务(大概率可以排除)。那就应该是XXL-JOB的锅了。搜索得知,XXL-JOB远程执行漏洞导致kdevtmpfsi挖矿病毒:
1、9999端口加上IP限制,只允许xxljob-admin源服务器ip地址调用。
2、xxl-job增加授权验证,配置 xxl.job.accessToken 防止未授权访问漏洞。
如何不使用Nexus搭建属于自己团队的一个maven或者Gradle私有仓。这里推荐使用阿里云新出的产品:云效。云效有个产品叫做制品库,我们可以利用制品库快速搭建自己的maven私有仓库。
注册阿里云云效平台账号:https://devops.aliyun.com/。进入制品库,发现已经拥有发布以及快照两个仓。点击进去会有文档告知如何配置maven环境,推荐方式1直接覆盖settings文件即可
Idea设置使用自定义settings文件
首先弄懂maven的snapshot快照仓库和release发布仓库,所以打包也分为release包跟snapshot快照包。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。
定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:
1 | <groupId>com.rednet</groupId> |
如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。但是release不改版本号情况会出现如下错误
Failed to transfer file https://packages.aliyun.com/maven/repository/2019159-release-3dosVm/com/rednet/framework/spring-boot-starter-sms/1.0.2/spring-boot-starter-sms-1.0.2.jar with status code 409
IDEA无法更新最新的snapshot快照包,如何解决?IDEA->设置-》maven-》勾选aways update snapshots。
在模块中直接运行以下代码即可推送jar包到自己的阿里云私有仓
`
$ mvn clean deploy -DskipTests
`
也可以在IDEA中点击maven-》Lifecycle-》deploy进行发布。
1 | Caused by: java.lang.NullPointerException: null |
Openjdk1.8字体缺失导致
只需要在项目的dockerFile部署文件里面添加下面这一条即可:
RUN apk add –update ttf-dejavu fontconfig
但是加了之后项目构建会变得很慢。这之后需要切换使用国内镜像,具体写法如下:
1 | # Install cURL |
看另外一篇文章 : frp搭建内网穿透服务
1 | [common] |
在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案。自年初阿里开源了Fescar(四月初更名为Seata)后,该项目受到了极大的关注,目前已接近 8000 Star。Seata 以高性能和零侵入的特性为目标解决微服务领域的分布式事务难题,目前正处于快速迭代中,近期小目标是生产可用的 Mysql 版本。
基于 spring cloud + spring jpa + spring cloud alibaba fescar + mysql + seata 的结构,搭建一个分布式系统的 demo,通过 seata 的 debug 日志和源代码,从 client 端(RM、TM)的角度分析其工作流程及原理。(示例项目:https://github.com/fescar-group/fescar-samples/tree/master/springcloud-jpa-seata)
为了更好地理解,我们来熟悉一下相关概念:
日志框架用的log4j,接入阿里云Alibaba Cloud Log Log4j Appender做日志采集,以及错误预警。某天发现线上无法正常采集日志数据,怀疑是dubbo日志包冲突影响导致。报错信息:
1 | main DEBUG Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@1153ee42 |
IDEA有个功能,可以查看maven项目依赖总览图。如图所示功能:
这样很方便就可以找到是哪个jar包包含的依赖有冲突。
去除了dubbo的log4j依赖,问题依然重现。再判断是否nacos导致的。查看nacos源码发现以下代码:
1 | public Log4J2NacosLogging() { |
nacos注册中心会查找nacos的日志配置文件,如果找不到怎么办呢,再下面代码:
1 | private String[] getCurrentlySupportedConfigLocations() { |
nacos会引用它默认的配置信息,导致之前项目的log4j配置失效。如何禁用nacos的默认配置,在它配置工厂类有写:
private boolean isDefaultConfigEnabled() {
String property = System.getProperty("nacos.logging.default.config.enabled");
return property == null || BooleanUtils.toBoolean(property);
}
我们只需要在系统变量中设置nacos.logging.default.config.enabled=false,然后把nacos的日志配置信息放到我们项目中的log4j文件中即可,在nacos-client源码中我们可以找到log4j以及logback的写法。
项目进行服务化改造之后,dubbo服务加上其他应用服务有上十个微服务需要构建,面临一个服务发布以及运维工作量剧增。业内比较常用的自动构建工具是Jenkins。看一下它的流程以及工具集:
可以看到,非常强大,同时也非常复杂。网上收集整理出来的几大问题。
最终选型落在阿里云的codepipeline,目前免费中,估计后期肯定会收费,阿里云一贯的作风,先免费后收费。
阿里云CodePipeline是兼容Jenkins标准的、提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务架构,提供稳定和安全的代码/Docker编译构建,测试,扫描和部署的工具服务,并提供Pipeline As Code的编码级配置模式,满足应用程序和基础设施快速可靠的交付和更新。
服务器:阿里云ECS
网络环境:专有网络
FTP服务:vsftpd
连接异常:
1 | 状态: 已登录<br> |
1 | pasv_enable=YES # 启用pasv模式 |