云原生落地,乐高拼搭还是外科移植?
如果无法正常显示,请先停止浏览器的去广告插件。
1. 云原生落地,
乐高拼搭还是外科移植?
张晓辉
Flomesh 高级架构师
2. 张晓辉
13 年软件开发经验,专注于基础架构,DevOps 践行者,Cloud Native 拥护者,坚守开发
一线打磨匠艺的架构师。
曾在汇丰软件、唯品会、数人云、小鹏汽车等公司任职。有多年的微服务和基础架构实践
经验,曾主导小鹏汽车云原生技术中台从 0 到 1 的建设和演进。主要工作涉及微服务、容
器、Kubernetes、DevOps 等。
开源、云原生爱好者,云原生社区管委会成员。
目前在 Flomesh 担任高级云原生架构师、布道师。
3. • 初识云原生
• 云原生实践
• 平台的演进
• 未来的方向
4. What
• 软件系统是现实世界的抽象结果
• 微服务是一种架构风格、设计理念
• 云原生是一种方法论
5. How
6. So Easy?
7. • 初识云原生
• 云原生实践
• 平台的演进
• 未来的方向
8. 缺乏基础平台设施
出现问题,定位手段有限
痛点
以解决问题为出发点
缺乏统一技术规范
可用性支撑手段有限
生产缺乏弹性
运维手动
9. 概览
PaaS 平台
微服务化
基于 Spring Cloud 的微服务架构
容器化 & 服务编排
使用 Kubernetes 对容器进行编排和管理
微服务中台 微服务监控 研发中台
注册中心 调用链 服务注册、服务治理、监控 Google Dapper
分布式服务跟踪 CICD 平台
API 网关
协议控制、限流、熔断
授权、安全 服务管理
配置中心 告警管理
统一配置、实时更新
版本管理、灰度、回滚
微服务框架
DevOps
收敛公共逻辑、技术规范落地
生产级功能
JVM 监控
文档中心
自动化自动化、集中式管理
项目生成器
自动化告警收敛、对接 IM 降低技术门槛、标准化接入
Metrics 代码质量
弹性
弹性扩展、按需扩容
节省资源
存储
自动化存储管理
网络
虚拟网络、网络隔离
集群调度
Google BorgMon、自动化告警 持续自动化代码质量报告 动态调度、资源限制
监控大盘 自服务平台 应用抽象
自动化日志收集、实时查看
通过 CICD 实现高质量的应用快速交付
敏捷开发部署、自动化 DevOps
云平台
日志中心
自动化日志收集、实时查看
项目接入自动化
工作负载与能力特性分离
10. 赋能业务
微服务使用最佳实践:框架、配置调优、profile标准化、线程池和连接池调优
最佳实践
技术兜底
配置中心:提供不停机、动态调整应用配置能力
丰富问题定位手段:日志中心、注册中心、微服务全方位监控
(JVM/Trace/Metrics/告警)
系统级无埋点监控、业务Metrics提供扩展机制
无缝落地
代码生成器:提高新项目的研发效率,不需要一行代码即可接入中台
自动化CICD:镜像生成、Git自动tag处理、代码质量、自动化测试
自动化
网关自动接入:提供限流、熔断、访问控制、安全
自服务平台:流程实现自动接入平台
11. • 初识云原生
• 云原生实践
• 平台的演进
• 未来的方向
12. 多维度演进
可用性提升
GPU 支持
多语言
应用层抽象
效率提升
演进
提升可用性
精益标准化
提高易用性
降本提效
13. 可用性保障
业务系统无损升级
服务治理功能
异地双活
自动扩缩容
反亲和性
混沌工程
14. 业务系统无损升级
调整滚动升级策略
Tomcat 的优雅退出
升级过程中客户端发现服务
端超过一个实例不可用
请求未处理完实例退出
解决服务实例状态不
一致问题
Eureka AP 模型通过定时同步来
实现状态在多点的一致
15. GPU 支持
Code
使用 nvidia-device-plugin
CUDA Image
为了充分利用资源 没有使用 nvidia.com/gpu: x
Python Image
Dockerfile
提供对 GPU 资源的监控
开发环境的双卡 GPU 出现双卡不均衡
资源使用粒度粗,超卖严重
Base Image
16. Sidecar 多语言支持
• spring-cloud-sidecar 实现
• 支持 Python(cpu/gpu)、NodeJS、Web
• 复用中台的能力
Service
SDK
进程隔离 服务发现
• SDK 功能下沉、降低版本碎片化 负载均衡
• ServiceMesh 的雏形 弹性路由
• 异构系统的统一治理
Sidecar
服务发现
熔断
微服务治理与业务逻辑的解耦
业务逻辑
业务逻辑
• •
Service
动态配置
spring-cloud-sidecar 性能低 占用资源高
进程拆分
负载均衡
弹性路由
熔断
动态配置
17. 应用层抽象
应用
Kubernetes
CRD
系统能力
业务逻辑
网络
存储
弹性
资源管理
调度
特性
Deployment
Service
PVC
HPA
Resource
PriorityClass
2019 年 10 月 17 日阿里云联合微软全球发布开放应用模型(OAM)
较 OAM 扩展性差
18. 容器化部署平台
• 多集群部署
• 跨机房的日志聚合
• 历史修订版
• 云原生告警
• 封装应用层抽象
19. CICD
Jenkins
Global Pipeline Library
• 目标:标准化、自动化
• 将
GitFlow 固化到流程中
Job
Job
Job
Git
Folder Pipeline Library
DB
Project Metadata
• 与云平台、监控中心、质量平台、自动化
Pipeline Script
测试对接
Seed Job
• 基于工程元数据自动生成作业
•
DSL Script
Jenkins Shared Library 对流程进行抽象
Harbor
弹性差、资源使用率低
Kubernetes
SonarQube
Nexus
自动化测试
20. 自动化++
项目管理
数据同步
项目元数据、CMDB 对接
各环境数据同步
配置中心
名空间初始化
部署平台
作业初始化,权限同步 工单系统对接
SERVICE
RBAC
C <> DE
CICD
权限、角色初始化
授权管理
监控告警平台
Dashboard、告警规则初始化
21. • 初识云原生
• 云原生实践
• 平台的演进
• 未来的方向
22. 演进的痛点
治理功能不够强大
• SDK 复杂度爆炸
• 版本碎片化严重
• 升级、维护困难
• 新语言
• 服务数量爆炸
• 功能“下沉”
•
用户的期待
降本提效是个永
恒的话题
23. 服务网格-下一代微服务的核心
业务
原理
原协议转发
定位
负
载
均
衡
服务间通讯的基础设施层、语
言无关
路
由
熔
断
流
控
超
时
灰
度
服
务
发
现
可
观
测
性
Service
Mesh
虚拟机
部署
Sidecar 模式,独立的辅助进
程、无侵入性、无感知升级
•
•
•
容器
与现有架构集成
Istio 的复杂性与学习曲线
特权容器
IoT
.
.
24. 云原生 CICD
Tekton CRDs
K8s Native Resource
•
Pipeline Core •
Task Pod •
Step
.
.
Controller
Manager
Container
•
容器化:可复制、可重用
动态编排:提高可靠性
Serverless:降低成本
兼容性 API:可移植性
.
.
Step Container
.
. .
.
Task Pod
•
•
•
同样在演进中
持久化:依赖 etcd
默认支持并发低
25. GPU 共享调度
整合 gpushare-scheduler-extender 和 gpushare-device-plugin 实现 GPU 资源的软隔离。
Python
Daemonset
API Server
Python
Scheduler
(gpushare-device-plugin)
kubelet
Kubernetes Node
gpushare scheduler
extender
26. 总结
取舍
•
• 正视限制条件和目标价值,内省外观
• 以解决问题实现价值为出发点,不为炫技
• 从最小闭环开始,持续演进
进化
•
• 好的架构不是设计出来的,而是演进出来的
• 未来的事情,未来再说
27. “ 道阻且长,行则将至! ”
28.