金融云平台架构
1 场景
管控项目全生命周期,包含构建、测试、部署、运维、监控等能力。该项目已完成推广,成为集团 DevOps 产品事实标准,目前为 1500+ 生产服务提供构建 7万+,部署 14万+,监控告警 3.5万+。
2 逻辑
构建模块、部署模块、监控模块、运维模块。
3 过程
分别在开发、测试、UAT、生产环境部署,一共四套,每套环境之间的 jar、容器镜像需要通过流转完成。
4 开发
JVM、Kubernetes、Dubbo、SpringCloud、ZooKeeper、ElacticSearch
5 物理
部署了4个实例,铜牛2个、马驹桥2个,可以容忍单边机房失效。
使用了 Nginx 做负载均衡,策略是 Random。
6 思考
保留现场
保留 hprof 文件,jmap 内存镜像。目前是没有实现的,可能要修改源码。
如何实现优雅停机
外部流量,提前请求注册中心驱逐服务,比如 Dubbo黑名单、Eureka驱逐命令。
本地任务,比如定时任务、线程池,可以提供一个注解 @Kill,实现 Java 原生的关闭钩子。
Runtime.getRuntime().addShutdownHook(() -> {/* 从 ApplicationContext @Kill 注解的定时任务、线程池,限时5秒内关闭 */})
关闭线程池,ThreadPoolExecutor#shutdown 不再接受新的任务,不再执行 BlockingQueue 的任务,但是会等待 coreSize 任务执行完再关闭。
为什么选择 kubernetes,而不是 mesos、swarm
Kubernetes 如何部署才能保证高可用
只需要保证 etcd 高可用即可。