摘要:本文由宜信-技术研发中心-高级架构师-梁鑫
投稿分享。投稿请加微信Software_King
,之前分享了一下我在公司项目中搭建Spring Cloud框架的经验,在此基础之上,为了更好的满足业务功能需求和便捷运维的需要,我们开发了几个基于springcloud的微服务组件,在此做个总结跟大家共同探讨一下。
基于SpringCloud的几个自研微服务组件
一.应用管理中心
采用微服务架构以后,把原先单一的节点拆解成了多个微服务节点。公司虽然有一键发布平台,但是是针对每一个节点采取单独的发布,启动,停止操作,没有全局化统一管理功能。上线运维的工作量就变的非常庞大,因此我们开发了基于springcloud的应用管理中心来方便我们的工作。
1.1 实现机制
- 每个微服务启动时,将自身的进程ID,当前路径,JDK路径,jar名称,系统用户,IP地址,端口号注册到zookeeper;
- 应用管理中心从zookeeper中查询到所有的微服务进程信息;
- 获取信息后构造启动命令,停止命令;
- 在数据库保存系统的用户名和密码;
- 在部署时指定git地址,分支,IP等调用jenkins,编译生成最新jar包拷贝到目标服务器指定位置;
- 通过远程jsch远程执行shell命令对微服务进程进行操作。
1.2 功能原理
1.3 效果图
二.微服务健康检测中心
基于actuator我们可以很好的针对每个微服务节点进行监控,当出现问题时及时报警。
2.1 实现机制
- 保证所有的微服务节点都加载了actuator;
- 从eureka中获取所有的微服务注册信息;
- 定时任务轮询请求每个微服务的health信息;
- Health返回status树壮结构信息;
- 如果status状态为down发送报警并包含health完整信息。
2.2 功能原理
2.3 效果图
我们在健康检测中心中同时加载了spring boot admin,可以随时查看微服务节点的所有运行信息。
2.4 部分源码
|
|
三.定时任务管理中心
我们需要建立定时任务全局视图,并希望对每一个定时任务具备启停的能力。我们采用了通过继承统一的AbstractScheduledTask,暴露定时任务的启动,停止接口。让每一个定时任务自动具备的启停功能。
3.1 实现机制
- 通过BeanPostProcessor在bean初始完成后拦截所有的@Scheduled注解,获取ip,port,applicationName,className,beanName,scheduled等信息注册到zookeeper;
- 定时任务实现继承AbstractScheduledTaskInter接口,暴露startScheduledTask和stopScheduledTask,可以针对定时任务进行启动停止;
- 实现基准TaskScheduledController类,通过beanName获取定时任务类,调用该类的启动停止方法;
- 定时任务管理中心查询zookeeper展示全局注册的定时任务,提供启动停止操作对定时任务进行控制;
- 定时任务分为全局唯一定时任务和非唯一定时任务。
3.2 功能原理
3.3 效果图
3.4 部分源码
- 获取定时任务
|
|
- AbstractScheduledTask
|
|
- 具备启停能力
|
|
四.全局热备锁
无论定时任务还是普通跑批任务,我们需要对这些任务实现热备,以便在单点故障时任务依然可以顺利的执行。
4.1 实现机制
- 全局热备锁包括普通任务(例如监听rabbitmq消息)和定时任务;
- 任务以applicationName和className标识唯一,任务启动时把相关信息注册到zookeeper;
- 其他节点的任务启动时发现已经有任务运行,则监听zookeeper;
- 运行任务停止后,其它节点根据监听状态启动自身任务;
- 定时任务和普通任务不同,定时任务需要注册非运行节点,并对子节点数目变化和子节点数据变化都做监听。
4.2 功能原理
4.3 效果图
4.4 部分源码
|
|
作者:宜信-技术研发中心-高级架构师-梁鑫
如果您觉得文章不错,可以打赏我喝一杯咖啡!