Serverless时代下,企业微服务的降本思考与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2.
3. Serverless时代下,企业微服务
的降本思考与实践
于善游
腾讯云高级研发工程师
4. • Serverless场景带来的新机遇
• 如何让Serverless平台成为微服务架构的最佳底座
• 腾讯云TEM针对企业应用降本增效的优化
• 腾讯云TSE针对大规模微服务的落地实践
5. • Serverless场景带来的新机遇
• • Serverless 发展进程
从 Serverful 到 Serverless
• Serverless 和 FaaS 的差异
6. Serverless场景带来的新机遇 – 前云原生时代
•
IDC 基础设施时代
•
•
•
峰谷压力相差巨大(1~2个数量级)
用户体验和成本之间很难平衡
云计算与虚拟化技术时代
•
• 重复造轮子
• 质量得不到保障
• 不可移植
7. Serverless场景带来的新机遇 – 云原生时代
•
云原生时代的门槛依然很高
•
• Kubernetes易学难精
• 生态庞杂、难以取舍
• 传统应用改造迁移成本巨大
•
https://landscape.cncf.io/
8. Serverless场景带来的新机遇 – Serverless的发展历程
•
•
•
•
2008年,Google推出
Google App Engine
•
区别于AWS EC2,GAE提
供直接部署代码,按实例付
费的模式,为Serverless早
期探索阶段
2008
2014
•
•
•
2016年,Google Cloud
Function,Azure
Function,IBM OpenWhisk
相继发布
•
•
•
•
FaaS 形态的Serverless产品
开始百花齐放
2016
2014年,AWS Lambda发
布,提出 FaaS 的概念,
Serverless进入元年
同年,Kubernetes诞生
2017
•
•
•
•
2019年,基于 Kubernetes
的 Knative 诞生
•
以应用为中心的Serverless
产品进入了新的形态
2019
2017年,腾讯云发布SCF,
阿里云发布FC
国内云厂商接连发力 FaaS
类产品
2020
•
•
•
Serverless 类产品
百花齐放
2021
2020年,腾讯云发布
TEM/TSE
9. •
Serverless场景带来的新机遇 – 从 Serverful 到 Serverless
Serverful
Serverless
从 Serverful 到 Serverless
让应用开发更专注于业务本身
是云原生时代的演化趋势
•
https://blogs.vmware.com/vov/2018/08/07/how-technology-powers-our-cloud-native-development-
environment/
10. •
Serverless场景带来的新机遇 – Serverless = FaaS ?
Serverless屏蔽底层资源,进行更高层次的抽象
这对用户意味着
•
•
•
不必关心系统管理和基础计算/存储/网络等资源,运维负担能力更小
不必关心应用的容量和自动化伸缩,弹性伸缩能力更强
不必关心代码的部署,流水线更自动化
但同时,我们也需要思考以下问题
•
•
•
我们真的能做到函数级别的业务开发么?
微服务体系下的业务,可以完整的迁移到函数平台上么?改造成本如何?
资源的封装是否意味着灵活性的下降?
Serverless != FaaS
面向应用的Serverless,能使微服务体系在Serverless平台价值最大化
11. • Serverless平台如何成为微服务架构的最佳底座
• • 企业架构演进
企业微服务新形态
• 微服务 + Serverless 释放能效
12. •
Serverless平台如何成为微服务架构的最佳底座 - 企业架构演进
单体架构
微服务架构
SOA架构
应用层
•
•
应用孤立,按烟囱式排列,唯一的共通
点在于都与底层的数据库相连;
架构中的应用数量较少,应用与应用 之
间的交互关系简单
PaaS层
资源层
•
•
服务调用者与服务提供者通过企业
服务总 线相连接;
ESB成为瓶颈: 无论在性能上还是成
本消 耗上,ESB都会导致瓶颈出现;
•
•
业务系统的扩展没有瓶颈,只需按
照业务发 展需要进行扩展;
敏捷,迭代速度快速; DevOps 部
署全自动化
发布管理、应用生命周期管理、可观测性等
第一阶段
IDC 基础设施
第三阶段
容器部署和弹性伸缩
第二阶段
云计算与虚拟化技术
第四阶段
Serverless解放运维
13. •
Serverless平台如何成为微服务架构的最佳底座 – 企业架构演进
需求爆炸式增长,快速迭代,弹性扩缩的业务场景,对IT架构提出新的挑战
微服务架构
1、微服务架构,代码层演化
日日可发布
微服务
应用层
实时可扩缩
微服务
微服务
2、devops 流水线
故障可回滚
• DevOps: CI, CD, 全自动化
• 可扩展性:自动弹性伸缩
• 高可用:升级、扩容不中断业务
平滑过渡
3、容器Serverless,资源层演化
资源层
第一阶段
IDC 基础设施
第三阶段
容器部署和弹性伸缩
第二阶段
云计算与虚拟化技术
第四阶段
Serverless解放运维
资源浪费
资源冗余
资源利用率低
资源不足
资源运维成本高
容量预估、资源购买流程繁琐
故障发现、故障处理、自愈难
云原生学习曲线陡峭
资源成本浪费
服务质量下降
运维成本高
14. •
Serverless平台如何成为微服务架构的最佳底座 – 企业微服务新形态
第一代微服务技术: 侵入式微服务框架
• 优点 :
• 去中心化,引入注册中心,服务间的
通讯及容错机制模块化,非功能性能
力下沉
• 缺点 :
• 框架适用范围、语言有限,对业务存
在侵入性,框架的维护成本高、升级
困难,框架提供的治理能力有限
15. •
Serverless平台如何成为微服务架构的最佳底座 – 企业微服务新形态
第二代微服务技术: Sidecar Proxy 模式的服务网格
• 优点 :
• 屏蔽分布式系统通信的复杂性(负载均
衡、服务发现、认证授权、监控追
踪、流量控制等等),服务只用关注业
务逻辑; 异构语言,统一服务治理体
系,标准化; 对应用透明,Service
Mesh组件可以单独升级;
• 缺点 :
• 一定程度上的性能损耗,引入Service
Mesh服务实例的运维和管理问题
16. •
Serverless平台如何成为微服务架构的最佳底座 – 企业微服务新形态
第三代微服务技术: 内核态的服务网格
• 优点 :
• 不需要Sidecar,直接在套接字和网络
接口处拦截数据包,请求路径缩短,
性能更优
• 缺点 :
• 实现复杂,技术较新,未经过大规模
生产验证
17. •
Serverless平台如何成为微服务架构的最佳底座 – 微服务 + Serverless
• 存量应用和新应用,多种服务类型
混合部署
• Serverless PaaS平台接管各种类型
的应用
• 平台按指标进行极致弹性,Pay as
you go
• 多地域、多可用区部署,提供高可
用
• 平台提供自动化的全栈可观测性接
入,实时监控和告警
• 服务注册中心云端托管,服务治理
规则自动下发,服务就近接入
• 提供云端边缘网关服务,与用户更
贴近
• Infra层全托管,零运维
18. • 腾讯云TEM针对企业应用降本增效的优化
• • DevOps
镜像构建加速与应用启动加速
• 发布管理
• 极致弹性
可观测性
•
19. •
腾讯云TEM针对企业应用降本增效的优化 - DevOps
• DevOps是一种循环往复的软件开发
方法,通过:计划-编码-构建-测试
-部署-监控-反馈-计划 的方式,形
成闭环
• 持续集成(CI)/持续部署(CD)的
流水线使开发部署的流程标准化
• 自动化的 GitOps 模式解放了人力成
本
• 云上集成部署的方式也节省了机器成
本
• 多环境部署与环境自动流转解决了部
署中的权责分离问题,更安全
20. •
腾讯云TEM针对企业应用降本增效的优化 - DevOps
• TEM提供简单易用的Coding插
件,提供部署能力和发布控制能
力,结合Coding流水线实现
DevOps的价值
• TEM也提供Intellij IDEA插件直接
部署,帮助开发者节省部署和调
试的成本
21. •
腾讯云TEM针对企业应用降本增效的优化 – 构建加速
传统的Docker build有哪些问题?
• 只改变Dockerfile中的一行,就会使之后的所有行的缓存失效
• 多阶段并行构建效率不佳
•
•
无法提供编译历史缓存
镜像push和pull的过程中存在压缩和解压的固有耗时
22. 腾讯云TEM针对企业应用降本增效的优化 – 构建加速
•
•
•
•
•
•
•
构建 :
稳定性
基于 Dockerfile(兼容性)
Build效率
Push效率
可维护性
•
•
•
•
•
•
TEM构建
Buildkit
Cache Effective
Daemonless & rootless
UnCompressed
*eStargz
23. 腾讯云TEM针对企业应用降本增效的优化 – 应用加速
•
•
•
•
•
•
Java应用冷启动加速 Appcds
使用`-XX:DumpLoadedClassList`参数来获取我们希望在应用程序实例之间共享的类
使用`-Xshare:dump`参数将类存储到适合内存映射的存档(.jsa文件)中
使用`-Xshare:on`参数在启动时将存档附加到每个应用程序实例
Spring boot应用需要使用maven shade plugin改造
24. •
•
•
•
•
腾讯云TEM针对企业应用降本增效的优化 – 应用加速
使用TEM可以直接加速,无需任何改造
TEM会自动解析jar包,对Springboot嵌套jar包结构进行解析和改造
自动将AppCds的归档文件构建成一个Image layer
使用AppClassloader加载 归档文件,实现加速
25. •
腾讯云TEM针对企业应用降本增效的优化 – 发布管理
一趟安全发布应该具备哪些关键能力?
灰度验证
发布管理
一键回滚
•
•
•
TEM分批次部署
基于OpenKruise CloneSet
•
• 更加确定可控的部署能力
• 支持指定删除
• 支持灰度发布
•
为何要加一层Operator?
• CloneSet不支持多个批次
• CloneSet不支持自定义删除策略(pod-deletion-cost)
• CloneSet原地升级是先缩后扩的语义
• 需要支持多种批次确认策略
26. 腾讯云TEM针对企业应用降本增效的优化 – 发布管理
•
•
第一版有什么问题?
•
•
每个用户集群都需要运行 UpgradeStrategy
operator 组件,提高了用户的计算资源成本
如何即提供分批部署能力,又不增加用户的费
用成本?
27. •
腾讯云TEM针对企业应用降本增效的优化 – 发布管理
28. •
腾讯云TEM针对企业应用降本增效的优化 – 极致弹性
• 弹性策略
• • 弹性触发:定时弹性,基于资源的弹性,基于业务指标的弹性,基于事件的弹性。
弹性作用维度:HPA (Horizontal Pod Autoscale,水平弹性伸缩),VPA (Vertical Pod Autoscale,垂直
弹性伸缩)
• 弹性实现
• 原生HPA
CRON 定时弹性
KEDA
•
•
KEDA 将 K8s Core Metrics
Pipeline 和 Monitoring Pipeline 处
理流程统一化,并内置多种
scaler ,提供开箱即用的弹性策略
支持
29. •
•
腾讯云TEM针对企业应用降本增效的优化 – 极致弹性
TEM弹性
30. •
•
腾讯云TEM针对企业应用降本增效的优化 – 可观测性
Logging、Tracing、Metrics
日志能够携带完整的上下文信息,能提供最为完备的原始信息,方便后续进行信息的二次加工,但是缺点是数据的传输
以及存储开销巨大。
• 请求轨迹信息能够从单个请求的角度描述系统的拓扑,如果对每个请求都进行记录,开销依然非常大。
• 指标数据能够提供更加抽象的统计信息,开销相对固定,方便监控以及告警。
•
• TEM可观测性
• TEM能够联接云上各个产品,提供应用维度的可观测性能力,真正做到博取各家所长。
31. • 腾讯云TSE针对大规模微服务的落地实践
• • 云原生时代的微服务治理挑战
TSE的落地实践
• 真实客户案例
32. •
腾讯云TSE针对大规模微服务的落地实践 – 云原生时代的微服务治理挑战
•
•
•
微服务框架多样化
微服务语言多样化
云原生场景的挑战
33. •
•
•
腾讯云TSE针对大规模微服务的落地实践
北极星( PolarisMesh )
覆盖腾讯90%以上的业务
34. •
•
腾讯云TSE针对大规模微服务的落地实践
北极星解决了分布式和微服务架构中的服务发现和治理问题,提供了服务注册、健康检查、服务发现、服
务路由、负载均衡、服务降级、服务熔断、服务限流等功能
35. •
腾讯云TSE针对大规模微服务的落地实践
• 北极星支持多语言SDK、Mesh、HTTP和DNS接入
• 多语言SDK: 提供Java、Go、C++、Lua、Nodejs、Python语言的客户端SDK,实现相同语义的服务发现和治理功能
Spring Cloud: 提供spring-cloud-starters-polaris集成北极星Java客户端SDK,帮助Spring Cloud用户无缝接入
tRPC/gRPC: 提供grpc-语言-polaris集成北极星对应语言的客户端SDK,帮助gRPC用户无缝接入
Mesh: 北极星服务端支持xds协议,支持将服务和治理规则数据转换为xds格式,支持envoy接入,和SDK、框架互通
HTTP: 北极星服务端支持HTTP协议,用户可以直接调用HTTP接口进行服务注册发现
DNS: 提供dns agent,支持通过DNS的方式访问注册到北极星的服务
•
•
•
•
•
36. •
腾讯云TSE针对大规模微服务的落地实践
• 流量调度: 微信支付实现跨地域的就近访问和容灾切换
• 北极星的服务实例具有位置属性,支持应用实现就近访问和容灾切换,如下图所示
• 客户端的服务发现模块:从控制面获取目标服务的全量实例(包含位置属性)
• 客户端的服务路由模块:根据路由规则和服务实例的位置属性实现就近访问和容灾切换
• 默认路由规则:先在同城市访问,如果同城市没有可用的服务实例,再依次扩大到同地域和全部范围
37. •
腾讯云TSE针对大规模微服务的落地实践
• 央视频: 实现跨K8s集群、跨云的服务发现和治理
• 央视频是中央广播电视总台基于5G+4K/8K+AI等新技术推出的综合性视听新媒体旗舰平台。腾讯云和腾讯视频是央视频
项 目的重要合作方,提供了覆盖客户端、前台、中台和底座的数十个应用系统。央视频于2019年11月20日上线,作为主
流媒 体与广大用户的连接者、主流价值的传播者,更好地推动主流价值实现创造性转化和创新性发展。
• 用户场景:
•
对内路由,公有云/专有云内部直通访
问
•
对外路由,外网访问公有云,公有云与
专有云互访
• 问题:
•
k8s service不支持跨集群直通
•
存量非容器化应用没法创建k8s service
• 解决:
•
全局服务注册中心,解决服务发现问题
•
多种路由策略,解决集群隔离以及互访
的问题
•
兼容多种接入模式,解决新增与存量互
访问题
38.
39.
40.