- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 Saturn项目打包配置文件外置化
很久没有写博客了,最近电脑硬盘坏了,导致很多还没有来得及备份的数据丢失了,之前有一个笔记记录关于如何做到 saturn 项目打包后,把配置文件外置化,结果也丢了。今天又碰到有同学需要这个玩法,所以记录一篇博客,一方面可以供参考,另一方面也算是自己的一个学习笔记。还是假设我们的项目是SpringBoot项目,打包成jar,丢到 Saturn-Executor 指定的目录下面,这样,被 Executor 调度后初始化我们的项目。我们想要把 SpringBoot 项目的配置文件 application.yma
2020-08-28 18:57:59 469
原创 跟ClassLoader有关的NoSuchMethodError
1.场景描述我在项目中引入 curator 来操作zookeeper,然后运行的时候,竟然报错了,说是找不到一个方法。补充说明:我们的项目启动方式比较特别,开发环境先是启动一个maven插件,跟Saturn的控制中心进行通信,然后通过控制中心的作业启动来触发我们项目的Spring容器初始化。我们的项目相当于嵌套到了一个Saturn的执行器里面了,Saturn的执行器启动,有一个ClassLoa...
2019-10-11 13:01:09 482
原创 mapper.xml文件中查询Oracle报参数个数错误
1.场景描述我的 mapper.xml文件中查询Oracle数据的写法如下: <select id="selectCountBetweenTime" parameterType="java.util.Map" resultType="int"> select count(*) from CHAIN_ORDER where SELLER_NAME LIKE CONC...
2019-10-11 12:55:10 2437
原创 for循环嵌套带来的超长耗时
1.场景描述我们在做增量库存同步的时候,有这样的逻辑:(1).从库存系统拿到指定时间到当前时间期间库存变动的货品编码;(2).从本系统的数据库和redis中拿到本店铺的货品编码[涉及到重复铺货];(3).取出两者的交集,就是本店铺中这段时间有库存变动的货品编码集合;(4).用这个交集做入参查询对应的库存;(5).将这个变动的库存送到淘宝平台;2.故障现象如果我们设定的时间距离当前...
2019-10-11 12:52:31 5656 1
原创 log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
1.场景描述项目在本地跑的好好的,更新到服务器上就直接跑不起来了,上服务器查原因,有下面的日志。2.故障现象3.问题分析异常原因倒是挺明显的,两个jar包共存,导致了堆栈溢出。详细分析参考:https://blog.csdn.net/kxcfzyk/article/details/38613861本地为什么可以跑?查看本地的 Maven Dependencies 可以找到 l...
2019-10-11 12:45:18 357
原创 使用JVM默认参数出现的内存溢出
1.场景描述2019年7月8日 17:17分左右开始,控制中心服务器CPU飙升告警,查看日志,出现大量异常。2.故障现象Saturn-Console机器出现大量的如下图的故障ZK不断的尝试重连后来尝试通过浏览器登录到管理界面,登录不上,8080端口还在,但是http服务已经没有响应了。后台去请求数据库数据,此时已经请求不成功了。最后就开始报堆栈溢出,直到重启。...
2019-10-11 12:42:50 234
原创 Dubbo的hessian协议坑死我
1.故障描述我在SpringBoot项目中整合了Dubbo,用的是全注解方式使用。然后,在项目启动的时候运行的时候,有时候会报下面的异常2019-05-28 14:05:08.134 [ERROR] [Saturn-DownOUTLETSBSTOrderJob-40-thread-1] com.alibaba.dubbo.registry.integration.RegistryDirector...
2019-10-11 10:55:17 2893
原创 JUC包下的原子操作类
1.在 J.U.C 中提供了 12 个原子操作的类。这 12 个类可以分为四大类:(1).原子更新基本类型AtomicBoolean、AtomicInteger、AtomicLong(2).原子更新数组AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray(3).原子更新引用AtomicReference、AtomicRefere...
2019-10-10 16:40:24 243
原创 并发工具之Semaphore
参考: https://blog.csdn.net/javazejian/article/details/761673571.semaphore 也就是我们常说的信号灯,用来控制并发时线程的数量,实现了序列化接口。通过 acquire 获取一个许可,如果没有就等待;通过 release 释放一个许可。有点类似限流的作用。Semaphore 只有3个操作:(1).初始化;Semaphore...
2019-10-10 16:38:40 304
原创 并发工具之CyclicBarrier
1.使用场景现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如:吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的...
2019-10-10 16:34:13 122
原创 并发工具之CountDownLatch
1.对于 CountDownLatch,我们仅仅需要关心两个方法,一个是 countDown() 方法,另一个是 await() 方法。CountDownLatch 构造函数会接收一个 int 类型的参数作为计数器的初始值,当调用 CountDownLatch 的 countDown 方法时,这个计数器就会减一。countDown() 方法每次调用都会将 state 减 1,直到 state ...
2019-10-10 16:31:51 224
原创 并发工具之Condition
参考: https://blog.csdn.net/javazejian/article/details/750434221.Condition (AQS独占锁)Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒.condition 中两个最重要的方法,一个是 await,一个是 signal 方法。aw...
2019-10-10 16:26:02 240
原创 ArrayBlockingQueue原理分析
参考: https://www.jianshu.com/p/cc308d82cc711.构造方法一共提供了三个构造方法,最核心的是第二个构造方法(如下);第三个构造方法多了数据初始化/** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and the specified access...
2019-10-10 16:16:07 166
原创 AQS深入分析
1.什么是AQS在 Lock 中,用到了一个同步队列 AQS,全称:AbstractQueuedSynchronizer。它能够实现线程的阻塞以及唤醒,但它并不具备业务功能。它是一个同步工具也是 Lock 用来实现线程同步的核心组件。2.AQS 的两种功能从使用层面来说,AQS 的功能分为两种:独占和共享。独占锁:每次只能有一个线程持有锁,ReentrantLock 就是以独占方式...
2019-10-10 16:06:12 300 1
原创 JMM:Java内存模型
1.什么是 JMMJMM 全称是 Java Memory Model.导致可见性问题的根本原因是缓存以及重排序。JMM 实际上就是提供了合理的禁用缓存以及禁止重排序的方法。所以它最核心的价值在于解决可见性和有序性。JMM 属于语言级别的抽象内存模型,可以简单理解为对硬件模型的抽象,它定义了共享内存中多线程程序读写操作的行为规范:在虚拟机中把共享变量存储到内存以及从内存中取出共享变量的底...
2019-10-10 14:55:35 219
原创 Java中的各种锁
1.公平锁和非公平锁 公平锁:多个线程按照申请锁的顺序来获取锁;(类似排队打饭,先来后到)非公平锁:多个线程并非按照申请锁的顺序,有可能后申请的线程先得到锁。(在高并发场景下,有可能会造成优先级反转或饥饿现象)实现原理:多线程场景下,如果去检查锁维护的等待队列,如果队列为空或当前线程是队列中的队首元素则获取锁,否则就会加入等待队列,按照FIFO的规则等到排队到自己再获取锁。非公平锁上来就...
2019-10-10 14:52:58 107
原创 多线程原理分析
1.多线程的目的(1).在多个CPU核心下,多线程的好处是显而易见的,不然多个CPU核心只跑一个线程其他的核心就都浪费了;(2).即便不考虑多核心,在单核下,多线程也是有意义的,因为在一些操作,比如IO操作阻塞的时候,是不需要CPU参与的,这时候CPU就可以另开一个线程去做别的事情,等待IO操作完成再回到之前的线程继续执行即可.2.多线程对于共享变量访问带来的安全性问题一个对象是否是线程安...
2019-10-10 11:34:56 164
原创 异常作业检测的设计说明
1.需求描述一个作业跑了很久都没有跑完,或者非常快就跑完了,我们认为这种作业可能存在异常那个,需要把这种作业监控出来,及时查看情况进行相应的处理。2.实现方式每个作业被创建出来后,都会在 ZK 上创建节点保存相关信息,作业的启用、运行、结束、停止都会引起 ZK 节点上数据的变化。只要搞清楚 每个作业在ZK上的数据结构,然后直接读取ZK 数据,就可以结合业务逻辑做监控了。一个作业的节点信...
2019-10-09 10:20:24 213
原创 执行器在线作业却不能被执行
1.场景描述我们遇到这样的情况,发版后,发现执行器都起来了,但是作业都没执行,点立即执行并没用。查看服务器日志会发现,我们的项目并没初始化成功,为什么会初始化失败呢?2.故障现象执行器都是启动成功的作业立即执行无效,查看日志有如下报错 :saturn-executor-log.logsaturn-executor-error.log再看看 saturn-nohu...
2019-10-09 10:20:11 457
原创 执行器没有被分配任何作业
1.场景描述我们遇到了这样的场景,当发版后,本身5分钟一个调度就该到达了,该被执行了,观察日志发现并没有被执行,再去检查执行器的任务分配情况,发现几台执行器上都没有分配到作业。2.问题追踪这个问题的排查相对费时间,因为中途我做了测试环境的集群搭建,动了其中的一些点位,git仓库的代码也进行过回滚,这里简单回顾下我的追踪过程。(1).我之前做集群的时候,动了环境变量,增加过一个 集群标...
2019-10-09 10:19:59 476
原创 导入作业Excel失败的情况分析
1.背景描述当我们配置了大量的作业,想要在另一个环境中也配置这样的作业,我们无需再重新挨个配置,只需要把作业从一个环境导出来,再导入到另一个环境。2.异常情况3.问题分析从上面红色方框的报错信息可以看出,是由于要上传的文件路径不合法。/tmp/tomcat.4451591421718163769.8080/work/Tomcat/localhost/ROOT这个路径究竟是个...
2019-10-09 10:19:46 951
原创 发版失败之服务器时间差超过60s
1.发版失败如下2.问题排查上服务器,切换到app用户,执行重启命令(发版是通过页面执行的这个命令)sh /data/app/bin/restart.sh得到如下信息:根据提示查看:less /data/app/logs/other/saturn-nohup.out根据这个信息,我们发现,是由于执行器和控制中心之间的时间差超过了60秒。3.解决方案把控制中心和执...
2019-10-09 10:19:31 351
原创 作业"立即执行"按钮消失的情况
一般情况下,我们添加完作业后,在页面右上角有一个“立即执行”按钮,我们点击这个按钮,方便测试和调试,而有形场景下,这个按钮不见了。作业要能“立即执行”,前提是执行器在线。如果我们执行器在线,仍然没“立即执行”钮,基本可以判断,这个添加的作业问题,绝大多数情况下,是我们作业配置的 “实现类” 这一项的值配的有问题。典型的情况下面的几种(本质上就是一种情况,全类名配置误):1.全类名完全不对...
2019-10-09 10:18:00 358
原创 执行器扩展节点及注意事项
当我们的节点需要扩展时,我们可以直接在新的机器上按照之前的方式部署,也可以采用下面介绍的远程拷贝的方式来做。例如,我们申请到了两个新的节点机器 target-ip-one 和 target-ip-two,下面介绍把执行器从 source-ip 远程拷贝到 target-ip-one的详细步骤及注意事项.之所没把整个/data/app目录下的内容全部拷贝,是因为内容特别多,并且很多内容...
2019-10-09 10:17:26 318
原创 发版注意事项及特殊情况解决方案
1.项目结构说明整个saturn分布式任务调度涉及到三大块:(1).控制中心;(发版跟这个没有关系,一次配置好了启动了,后面就不用管了)(2).执行器;(发版会执行restart.sh 脚本文件,就是一个执行器重启的过程)(3).应用系统;(也就是我们的jobApplication,即SpringBoot工程)说明:执行器与应用系统之间的关系是,执行器启动后会扫描到我们的应用系统那个...
2019-10-08 11:43:49 811
原创 发版说明及流程演示
1.自动发布系统的配置我们标准化要求用Assembly插件打包 SpringBoot项目,以达到配置文件外置化的目的。而我们的这个分布式任务调度项目,运行方式相对特殊:要Executor启动后再新创建一个ClassLoader再来加载我们的项目。鉴于此,我们采用了另一种方式:还是用Saturn的打包方式,打包出一个 zip包,然后通过在 自动发布系统中配置Linux相关命令,做到将zip包解...
2019-10-08 11:40:15 984
原创 添加域配置和添加作业配置
1.到调度中心进行任务的调度配置注册中心--->域管理:添加域择一个ZK集群,我们之前已经配置了test,再填写域名,上面的 一步启动executor里面 -n 参数后面就是域名,也是名称空,即www.xyz.com根据自己的实际情况取名吧。2.鼠标放在这个域名上面,在浏览器左下角会显示 一个链接,我们点击域名进入作业总揽,进行该域名下的所有作业管理...
2019-10-08 11:34:18 458
原创 Saturn Java作业SpringBoot方式开发打包
1.创建maven工程,添加依赖SpringBoot项目,首先就要把spring-boot-starter-parent 添加到pom文件,我用的是1.5.6.RELEASE 版本,这里主要是一个Demo,关于数据库连接等,其他的依赖我暂时不添加了。 <parent> <groupId>org.springframework.boot</groupId...
2019-10-08 11:30:37 1807 1
原创 Saturn Executor部署过程
1.配置环境变量VIP_SATURN_CONSOLE_URI内容如下:进行了上述的配置后,记得刷新配置文件,使配置立即生效。source /etc/profile2.准备 executor从https://github.com/vipshop/Saturn/releases中点击链接获取最新版本的'Executor Zip File', 将得到一个saturn-exec...
2019-10-08 11:25:32 1748
原创 Saturn Console部署踩坑总结
照官网的关于 3.1.0 的文档介绍,一步步做,会遇到一些坑,下面做一下总结1.修改默认的日志输出路径官网上给的参数是:SATURN_CONSOLE_LOG,其实这个参数是无效的,官网文档应该是没有更新吧,应该用:saturn.console.log官网的启动参数描述如下:我的启动命令如下:2.浏览器不兼容问题(登录用户名显示不正常)我们首次访问的时候,右上角看到的登...
2019-10-08 11:16:09 1354 3
原创 Saturn Console集群搭建
思路:搭建两台或者 多台Console出来 ,然后利用nginx做反向代理提醒:官网上的集群搭建方式一笔带过,并且存在误导,我开始就是按照官网那个搭建始终不成功,费了不少时间。下面分享搭建过程、中途遇到的问题、解决方案、注意事项等。1.搭建多台Console我是用比较偷懒的方式,直接在一台机器上搭建了2台。先搭建单机版的一台,再复制一份,改下日志路径、启动端口、jmx端口就OK了。...
2019-10-08 11:03:10 867
原创 Saturn Console部署图文示例
参考:https://vipshop.github.io/Saturn/#/zh-cn/3.0/saturn-console-deployment1.确保JDK已经安装好,zookeeper和mysql环境都已经准好;2. 创建数据库和表。执行官网提供的 sql 脚本即可。向 sys_config 表中初始化两条数据,如果不手动插入这两条数据,后面登录到系统管理界面,添加不进去,这是...
2019-10-08 10:48:41 1344
原创 Saturn的系统架构
一、总体设计说明Saturn的基本原理是将作业在逻辑上划分为若干个作业分片,通过作业分片调度器将作业分片指派给特定的执行结点。 执行结点通过quartz触发执行作业的具体实现(以shell为例,则为shell脚本),在执行的时候,会将分片序号和参数作为参数传入(见图1)。 作业的实现逻辑需分析分片序号和分片参数,并以此为依据来调用具体的实现(比如一个批量处理数据库的作业,可以划分0号分片处理1-...
2019-10-08 10:32:28 1779
原创 Saturn简介及重要特性
一、简介Saturn (任务调度系统)是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。Saturn是在当当开源的Elastic Job基础上,结合各方需求和唯品会的实践见解改良而成。二、重要特性支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ru...
2019-10-08 10:28:42 2044
原创 我与Saturn有个约会
一、前言 仍不住要罗嗦两句,感恩能与Saturn接触,感谢Saturn团队及社区热心朋友的帮助,在写本篇文章的时候,其实与Saturn相识有3个月了。在Saturn团队的鼓励下,写下这篇博客。其实,已经很久没有写博客了,之前的账号密码都没有维护,这算是我这个账号的第一篇博客,后期,也会好好维护这个账号,一方面是记录成长的点滴,一方面是经验的总结与交流。二、与Saturn结缘 ...
2019-01-09 21:57:18 1175 7
原创 谷歌图片验证码的使用图文详解附源码
谷歌kaptcha图片验证码的使用一、演示素材的准备 二、详细演示1. 打开Eclipse,新建一个动态web工程,我的基本上都是默认设置,没有改; 2. 将kaptcha-2.3.2.jar拷贝到刚刚创建的web工程下的lib目录下; 3. web.xml配置文件中去配置生成验证码的Servlet访问地址; 4. 谷歌kaptcha有一些...
2019-01-07 22:16:30 4973
谷歌kaptcha图片验证码的使用(图文详解附源码)
2017-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人