腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每天应对万亿次调用的服务托管与治理。

TSF PaaS平台的前身是CAE(Cloud App Engine),其核心架构是参考Cloud Foundry设计研发的。为了给开发者提供更加便捷的服务,TSF和公司很多基础服务打通,例如腾讯网关TGW、名字服务L5、内部鉴权服务、以及消息队列等,使得用户可以在TSF平台完成一站式开发、上线、托管服务;除此之外还支持对托管在平台上的应用进行健康检查、进程监控、日志汇聚展示等服务。让开发者只需关心自己应用代码,而其它一切事情,都由平台为其提供,极大地提高了开发者的效率,降低了运维成本。下图简要描述了PaaS平台和不同角色用户之间的关系。

整体架构示意图

核心能力介绍:目前腾讯内部有上万个应用托管在TSF PaaS平台,这些应用每天的请求量超过万亿次。下面对TSF PaaS平台的所解决的问题及核心能力分别展开介绍。

弹性扩展能力,真正实现无人值守

在公司众多的互联网业务中,往往有这样的一些业务场景,海量用户突然同时去访问一组服务,如限时抢购、秒杀活动,或者游戏整点开服,tips弹窗都会触发用户的此类行为。服务器经常会面临在短时间涌入大量请求,快速的吃掉CPU和内存,造成服务器瘫痪,前端用户进一步重试,导致雪崩现象加剧。因此在一些非常重要的业务搞活动的时候,需要运维事先准备好大量的机器(预估值要远远大于可能实际值),部署好程序,等待活动的到来。如果有一套自动伸缩机制,活动时可以自动扩容,不需要时可以很方便的下线,整个运营将简单很多,弹性伸缩能力是PaaS平台的基础能力之一,TSF 根据公司内部不同业务需求场景提供多种方式的弹性规则:

  • 规则一:可以对应用所在节点在一定时间内的物理负载情况、请求量、延时、返回错误码等多维度进行配置规则,一旦触发弹性条件,平台将自动进行相应扩缩容操作。

  • 规则二:对于请求量有周期性波峰波谷规律的应用,可以配置定时弹性伸缩,入下图所示。

图:定时扩缩容规则

无论是动态伸缩还是定时伸缩,其后台实现原理是类似的,整体调度架构如下,

图:弹性伸缩模块示意图

配置系统: 用户在控制台根据业务情况,设置弹性伸缩触发规则,规则包括以下几个维度:

采样间隔:1~60s,可任意配置,平台具备秒级别采集数据的能力。配置规则中需要制定连续高负载次数,服务自动扩容首要条件就是服务分组下至少存在一个实例连续上报几次上报高负载数据。同时还要配置冷却时间,在冷却时间平台会忽略实例高负载信息,这样可避免在扩容还没完成期间,再次触发扩容。配置规则中的性能指标,包括CPU、内存、磁盘、网卡流量、TCP连接数、请求量、错误比例、延时大小等的维度。

通知中心: 负责对外推送的模块高负载信息及扩容决策信息。

流程系统: 通知中心收到信息后,触发自动扩容流程,包括资源部署,程序包安装,配置下发等。

弹性伸缩能力在微信红包诞生的那个春节发挥到了极致,2014年春节微信红包出乎所有人的意料一夜之前红遍大江南北,每一秒钟都有大量用户涌入,TSF 根据事先配置的规则,自动弹性扩展,成功支撑了突入起来的海量请求。为微信红包初期的发展赢得了宝贵的时间,下图为自动扩容任务列表,可以看到同一个服务在短时间内自动触发了很多次扩容操作,大大减轻了运维压力,真正达到了无人值守。

图:弹性伸缩任务查询列表

精确流量控制能力,业务指标可视化展示

TSF平台可以完成对应用整个生命周期的管理,从代码开发到CI/CD再到版本的升级与回退。在新功能上线过程中通常需要一个灰度过程来控制能访问到新版本的流量比重,如果发现了异常问题需要及时回滚到稳定版本。另外,灰度发布并不是短暂的过程,可能会持续很久。例如某个重大的框架或者系统更新可能会持续很久,有可能整个服务在几个月内都是新旧并存,甚至有可能需要两个版本分别各自迭代。而从产品的角度来看可能就会更灵活,很有可能线上有五六个方案都在收集数据,每天有了一些新想法都要上一些小版本看效果,每个版本上线后可能都要再各自做优化调整观察效果。这种情况可能线上就永远不会有一个统一的版本灰度反而是个常态来应对不断变化的需求和挑战。

TSF 灰度发布系统包括以下两个方面:

精确的流量分发控制:从运维风险控制的角度,需要把受影响的流量控制在一个精确的范围内,在上线前就知道哪部分用户会有问题,而不是真出问题谁受到影响都不知道。一个常见场景是新版本只让公司内部的员工能访问到,再一个市、一个省的一点点推上去。TSF 灰度发布系统可以对应用实例进行分组操作,新版本按照分组来灰度发布,将一部分流量导入灰度分组,观察是否符合预期,具体导入那部分流量可以是公司内部员工,也可以按照其他维度来切分。

监控系统的支撑:流量精确分配只是第一步,接下来更重要的是获得多个版本的关键指标。对运维来说可能是看错误率、吞吐量、延迟、CPU内存消耗这些系统层面指标。对于产品来说可能是要看点击率、pv、uv 等业务指标的变化。这些都可以在PaaS控制台以图表的方式展现出来,方便对下一步灰度做出决策。

完备的日志与监控系统,助力企业智能运维

完善的统计监控与日志系统是一个PaaS平台最基础的能力,没有之一。TSF的监控与日志系统底层采用EFK(ES+ Filebeat+Kinana)方案搭建而成,监控数据维度主要分为以下几类:

  • a.访问量:请求数、成功数、失败数、成功百分比、同比环比波动百分比

  • b.响应包大小、响应延时

  • c.机器负载:CPU、内存、读写磁盘、TCP连接数、出入流量、出入包量

  • d.进程监控

其中前两类采集频率是分钟级别的,机器负载和进程类的监控是秒级的,各个业务可以根据实际需要进行个性化配置。

上述以“监”,在“控”方面,支持字符串类型的微信、短信、邮件告警,另一方面支持如下图所示的曲线告警,用户可以根据需要来配置触发告警条件。

同时TSF 后台也会根据历史上报数据和告警策略进行大数据分析对比,进行智能运维。

图:统计监控示意图

不断整合创新,打造TSF强大分布式作业能力

TSF PaaS平台的分布式作业系统是基于Quartz开发而来的,充分继承了Quartz强大的调度功能和丰富多样的调度方法,以及其分布式集群能力。

通过TSF 分布式作业管控平台不仅可以完成所有的运维操作,还可以自动选取负载较低节点来下发计算任务,充分利用设备资源。除此之外所有作业的执行详细情况都可以在控制台进行查询,从下图可以看出目前分布式作业平台一天大约执行几十万个任务。

图:分布式作业示意图

总结:

本文针对腾讯内部接入TSF平台的业务在日常运营过程中重点关注的几个核心功能点来介绍了TSF平台服务生命周期管理部分的核心能力,如想进一步了解实习技术细节欢迎进一步交流。

深度揭秘腾讯云TSF日调用量超万亿次背后技术架构的更多相关文章

  1. 深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念

    腾讯云PostgreSQL-XZ(PGXZ)经过公司内部多年业务的打磨,在2017年改名为TBase后,正式对外推出,目前已在政务.医疗.公安.消防.电信.金融等行业等行业的解决方案中大量应用.TBa ...

  2. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  3. 腾讯云 CIF 工程效能峰会,10 月 19 - 20 日震撼来袭!

    近年来,依托于云计算的飞速发展,腾讯云云产品更新迅猛,云原生生态构建初具规模,越来越多的企业也开始寻求与深入数字化转型之路.但在摸索与实践中,企业往往会进入"伪上云"的误区.除了单 ...

  4. 腾讯云AI平台张文杰:构建一站式机器学习服务平台

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...

  5. [转帖]阿里云VS腾讯云 谁才是中国未来的云计算之王?

    阿里云VS腾讯云 谁才是中国未来的云计算之王? https://www.qianzhan.com/analyst/detail/220/191008-f05009f6.html 吴小燕• 2019-1 ...

  6. 免费报名 | 腾讯云自研数据库CynosDB交流会

    本文由云+社区发表 作者:技术沙龙 All in 云+时代,数据库的高可用性.按需付费.按需扩展等属性解放了大批开发者.腾讯发布的自研数据库CynosDB作为国内首款同时兼容MySQL和PG的云原生数 ...

  7. 阿里云VS腾讯云 谁才是中国未来的云计算之王?

    阿里云早在 2009 年就已经开始布局云计算领域,具有先发优势.据统计,40% 的中国 500 强企业.近一半中国上市公司.80% 中国科技类公司是阿里云的客户.而腾讯云基于腾讯自身在游戏.视频.社交 ...

  8. 一文了解腾讯云数据库SaaS服务

    本文由云+社区发表 作者:邵宗文,2009年加入腾讯,现为腾讯云数据库专家产品经理.之前曾负责为OMG事业群构建数据库平台,部署,规划及运维支持,为腾讯网,新闻客户端,快报,视频,财经,体育等提供了稳 ...

  9. 磊哥评测之数据库:腾讯云MongoDB vs自建

    本文由云+社区发表 作者:磊哥 上期文章我们聊到了redis.这期我们来说说另一个网红nosql数据库:MongoDB.有这么一个介绍MongoDB的说法是:MongoDB是非关系数据库当中功能最丰富 ...

随机推荐

  1. Nexus3将本地jar包添加到仓库

    新建一个文件夹,将要上传的jar包放进去,然后创建一个pom文件,例如xx.jar,pom.xml 首先创建一个目录 方便执行上传的时候url参数 也可以不创建, 上传XML curl -v -u a ...

  2. 修改maven项目jdk版本,并解决Dynamic Web Module 3.1 requires Java 1.7 or newer错误

    使用maven的时候,默认会使用1.5版本的JDK,并且创建项目时也会是1.5版本. 但是我想用JDK1.7版本,所以我手动将maven项目JDK改为1.7版本. 手动修改JDK版本为1.7以后,项目 ...

  3. 第二十章 Django数据库实战

    第二十章 Django数据库实战 第一课 获取单表单数据的三种方式: urls.py中的路由代码: path('busniess',views.busniess), views.py中代码: def ...

  4. 如何使用 VS生成动态库?

    如何使用 VS生成动态库? //.cpp 文件默认定义了 __cplusplus 宏 #ifdef __cplusplus extern "C"{ #endif xxx #ifde ...

  5. Web/app端自动化测试对比

    Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...

  6. Redis笔记2-发布订阅

    发布/订阅"(publish/subscribe)模式可以实现进程间通信,订阅者可以订阅一个或多个频道(channel),而发布者可以向指定的频道发送消息,所有订阅次频道的订阅者都会收到次消 ...

  7. jstree树形菜单

    final 用于声明属性.方法和类,分别表示属性不可变,方法不可重写,类不可继承.其实可以参考用easyui的tree 和 ztree参考: https://www.jstree.com/demo/ ...

  8. Linux基础三

    cat:查看全部(缺点:内容较多时不方便查看) 格式:cat [选项] 文件名 常用命令选项 -n:在每一行前加上行号 [root@localhost 桌面]# cat -n /etc/passwd ...

  9. Linux SendMail发送邮件失败诊断案例(四)

    最近又碰到一起Linux下SendMail发送邮件失败的案例,邮件发送后,邮箱收不到具体邮件, 查看日志/var/log/maillog 发现有"DSN: User unknown" ...

  10. DirectDraw读书笔记

    DirectDraw对象 DirectDraw对象是DirectDraw应用程序的核心.它是你在建立DirectDraw应用程序时所要创建的第一个对象,再用它来创建所有其它相关的对象.通过调用Dire ...