去年我们把公司审批系统从本地机房迁到云端,前后折腾了三次才稳定下来。这篇文章把从IaaS到Serverless的架构演进过程整理出来,给做系统上云的同行参考。
最开始的做法很简单,把本地机房里的审批服务器原样搬上云。用腾讯云CVM虚拟机,4核8G,数据库用云数据库MySQL,文件存COS。
上线后第一个问题就暴露了:资源利用率太低。审批请求是脉冲式的,早上九点十点高峰期QPS冲到200,下午两点到六点几乎零请求。但服务器一直开着,4核8G的资源,高峰期用40%,低谷期用不到5%。
第二个问题是扩容麻烦。月初月初报销申请集中,QPS峰值冲到500,服务器CPU打到80%。手动扩容加一台CVM要10分钟,那10分钟里审批请求排队,用户体验差。
第三个问题是维护成本高。补丁升级、数据库备份、日志收集,都要自己配置。本来想上云是为了减负,结果反而多了云资源管理的活。
我们决定上Kubernetes做容器化,审批服务打包成Docker镜像,用腾讯云TKE托管。期望是按需自动扩缩容,高峰期多开几个Pod,低谷期缩容到1个。
但实际落地有两个坑:
第一个坑,Pod启动慢。审批服务依赖数据库、Redis、消息队列,启动时要做健康检查、数据预热,一个Pod从启动到能接请求要40秒。高峰期流量突增时,扩容的Pod还在启动,流量已经打到旧的Pod上了,响应延迟飙升。
第二个坑,资源碎片化。K8s集群里还有其他微服务,审批服务的Pod分散在不同节点上,共享节点资源。某次其他服务跑了个大数据任务,节点资源被吃光,审批服务的Pod没资源扩容,直接被OOM kill掉。
最后我们试了腾讯云SCF云函数,审批服务改造成函数计算,触发器用API网关。这次终于对了。
函数计算是按量计费,没请求时不计费,每百万次调用收多少钱。审批请求高峰期,函数自动扩容到并发50,低谷期自动缩容到0。上云前每个月服务器成本3000块,上云后降到600块。
审批请求的处理延迟从200毫秒降到50毫秒,因为函数计算冷启动优化做得好,Pod启动那40秒的延迟没了。
维护成本也降了90%。不需要自己管理服务器、扩缩容、负载均衡,腾讯云全包了。我们只需要关注业务逻辑。
这三次架构演进,我总结了几个经验:
第一,脉冲型业务不要用固定资源。审批、报销、请假这类请求,高峰期和低谷期差异10倍以上,用Serverless按量计费最划算。
第二,启动延迟敏感的业务要考虑冷启动。如果用户等不了40秒,那Pod启动时间就是致命问题。函数计算的冷启动在100毫秒以内,能接受。
第三,多服务共享集群要考虑资源隔离。K8s集群里混跑不同业务,资源竞争不可避免。用Serverless或者独占集群能避免这个问题。
我们用的搭贝低代码平台支持直接对接函数计算,审批流配置好后自动生成函数代码,部署到SCF。但架构选型还是我们自己做的,工具只是加速了开发,替代不了技术判断。
上云不是万能的,关键是选对架构模式。从IaaS到K8s再到Serverless,每一步都是踩坑换来的教训。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。