金融云平台架构

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 高可用即可。

posted @ 2020-11-09 09:38  Casaa  阅读(342)  评论(0编辑  收藏  举报