12月15日,由腾讯云主办的首届“腾讯腾讯云开发者社区开发者大会”在北京举行。本届大会以“新趋势•新技术•新应用”为主题,汇聚了超40位技术专家,共同探索人工智能、大数据、物联网、小程序、运维开发等热门技术的最新发展成果,吸引超过1000名开发者的参与。以下是DevOps分会场的演讲内容,稍作整理,分享给大家。
关于Serverless,是随着云的发展而产生的一个新的概念。本篇将会把内容分为Serverless,Faas产品,腾讯云Faas产品,面向开发者的能力建设和面向Devaps的能力建设。
首先,Serverless在与我们的业务的关系中,其实是指向的是无服务器的概念。Serverless并不是说我们的业务就真的不用跑在服务器上,我们的业务在运行的时候还是会落到某个服务器上,但在部署业务和运行业务的过程中,大家可能不需要考虑自己的业务模块、自己的代码究竟落在哪一个的具体物理服务器或虚拟服务器上。Serverless给大家提供的一种就是开箱即用、按需付费的概念。其中,第一,对服务器的概念没有了,大家不需要了解服务器和管理服务器,不需要了解底层;第二,Serverless为大家提供的是按需付费的模式,按实际使用量付费。在Serverless的概念中,我们把它通常会分为两种,一种是后端即服务,后端即服务为大家提供的是存储类的服务。在这里举个例子,在腾讯云的对象存储服务中,它以Serverless的模式为大家提供的了按需付费的存储服务。
Serverless的工作模式是什么样的呢。传统去写一个模块,通常大家可能就会去配制例如一些监听服务器,然后有实际的请求到来时业务代码开始做处理。
而Faas提供的是计算性的服务,通过使用代码托管,实现计算能力的使用。在Faas的产品过程中,它的运行方式是一种触发式的运行。开发者把他的业务代码、业务逻辑封装好以后,以代码和配置的形式提交给到平台上,而这些代码是在有事件到来的时候才会触发运行。在运行环境内只需要针对这一次事件进行处理,在这个过程中,你的代码不用考虑高并发,不用考虑突增的事件到来,而是把这些交给平台,由平台完成计算。实际上在这个过程中,可以发现平台为开发者去真正做了很多事情,为开发者提供做扩容的能力,为开发者提供事件的驱动能力。因此,Faas可以总结为为开发者提供简单化的能力,针对开发者,不需要考虑高并发,不需要考虑我的业务有多少请求,你只需要考虑的是怎么处理好这一次业务。对于开发者来说,他需要写的业务代码可能更简单了。对于运维者来说,很多的工作,比如你不需要去关心底层的虚拟机或者是物理机、操作系统,而把这些东西都给到平台,由平台完成物理机、虚拟机的分配,或者是OS的补丁,都由是平台来支持,而运维更多的是关注业务的运维,业务状态是否正常。像传统的业务,如果你的请求量上升了,你需要考虑怎么样扩容,无论是传统的物理机还是虚拟机,都需要开发和运维介入。而在Faas这里,同样是由平台为你完成这一部分的扩容、缩容,包括实例的缩减。在计费这里的优势,Serverless是按需计费,在事件到来时我们启动付费,没有事件到来的时候不会有付费,整体来看,Faas更多的给开发者便利、给运维者便利,为大家提供更多的能力,让你关注业务,减少在运维上的工作。
腾讯云本身也推出了Faas的产品,这个产品在2017年的4月份上线了,随着持续的迭代,我们目前提供了多种语言的支持,也提供了多种函数的触发器的支持,针对函数功能,也提供了环境变量,支持大家将配置性内容记录在环境变量里,通过函数代码进行读取,也包括了实时的函数运行监控服务,也提供了函数的版本发布能力。而在Faas产品已经上线的情况下,云函数可以应用在哪些场景中,在这里给出了一些目前在云上被客户使用的场景。例如对对象文件的处理,在用户的图片上传到对象存储中后,触发云函数的运行,对图片进行一些例如裁剪、编码的操作,或者进行一些AI识别,这些都可以直接在云函数中实现。如果用户本身的业务中,已经有自身的业务系统已经这些处理,则可以利用云函数,把这些事件通知到自身的业务系统中,交给用户自行处理。而通过使用 API 网关,提供了API的管理,在API接收到请求时,触发函数运行。因此,API服务的业务逻辑就可以放在云函数中执行,比如说读取数据库之后,把数据响应给API网关,由API网关响应给客户端。而利用消息队列触发云函数,可以实现的业务逻辑包括了消息的转存、分析,消息的后续写入文件或者是写入数据库。消息队列的触发,和利用 kafka 进行日志处理其实也是一样的,目前使用kafka进行传递日志的有很多示例。我们也有客户使用了云函数,将 kafka 中收集的日志归档到COS对象存储中,实现了日志的归档。在这个过程中,还可以进行日志的分析,归类和过滤。
介绍完了Faas本身在实际中应用的一些场景,后续我们会对开发者能力做哪些建设呢?在Faas被我们推荐给用户使用了之后,我们发现了一些痛点。第一,用户怎么实现代码的调试,可能大家原有的做法是启动IDE,或启动文本编辑器,在本地搭一个小的开发环境,运行代码,进行调试开发。而Serverless有些不同,开发环境和运行环境如果有差异,可能会导致你在本地开发时没问题,但是在上传到平台上之后运行不起来。因此为了解决开发者在开发调试方面的问题,我们后续会推出本地调试工具,为用户在本地调试代码提供一些便利,提供和云上环境相同的调试环境,确保你在本地开发完成的代码,上传到云上也可以跑起来。第二个痛点就是打包部署过程,云函数原有的打包方式都是需要用户自行操作,把开发好的代码压缩,打成一个zip包,然后选择包上传。这个操作对用户在开发过程中是一个打断,他需要不断切换本地的开发和云控制台中的上传。而我们提供一键式的打包部署工具,能在在大家配置完成之后,通过一键工具,方便的完成上传的过程。
在前面我们提供的是用户在本地开发过程中的习惯优化。另外还有在云端开发的模式,我们也接触了一些用户,这些客户在使用函数时,把函数当成轻量级的功能函数。函数数量很多,但实际上逻辑很简单。在这个过程中,他所需要每次在创建函数之后去修改实现的业务逻辑很简单。我们现在在控制台中能提供的能力很简单,只提供了入口文件,即单文件编辑的窗口,可以简单的修改一下代码,并在保存之后测试运行。后续我们也规划了和腾讯云 的 cloud studio产品打通,提供在线开发的能力。和这个产品结合之后,实际上我们能够使用cloud studio提供的在线编辑能力、在线调试能力。同时cloud studio这个产品本身也包含了后台能力,我们在这个环境内可以进行包安装,也可以启动测试服务端来运行函数。同时通过深度集成,在这个环境中大家如果开发完成,可以一键式打包部署,通过点击一个按钮,就将代码穿戴到实际的运行环境中。
最后,在devops中,我们怎么实现云函数的Devops流程呢。首先我们关注的是在云函数投入到实际的业务场景中之后,我们怎么实现云函数的监控和运维工作。在实际运行过程中,有些用户可能一天有上千万次的调用,在这里,怎么协助用户找到代码中的问题。腾讯云本身具有云监控和云日志的能力,我们把云函数的运行状态收拢到腾讯云的监控日志服务上去。通过这种方式,利用云监控具备的统一监控视图、告警能力,去感知到某些云函数可能在某中情况下有运行失败的问题。同时,基于腾讯云的日志服务,对函数云的日志进行统一的查询、归档。当然这些也是云函数和腾讯云其它产品结合的场景,在这个场景中我们利用监控的能力、日志的能力,完成云函数的运维工作。
完成了运维相关的工作之后,我们怎么样解决在业务中按照需求,提供开发、预发布、测试环境的使用。我们后期会推出云函数的发布版本、别名以及灰度发布能力。通过这些能力,实现业务真正能在云函数上运行起来。目前函数的版本能力,是函数对已经提交的代码进行发布,得到具体版本号,而这个版本号我们可以直接给用户使用。同时设计的别名能力,具体指向某个版本号,通过这种方式,我们可以对外提供测试环境、正式环境的隔离,同时基于这种能力,可以通过别名不变,版本变化的方式,实现做多版本之间的流量切换。通过使用流量切换的方式,对用户做到不感知而完成升级。更近一步,怎么把云函数融入到devops 流程中,实现函数的CICD。在如图的示例中,我们通过 git 仓库存储代码代码,通过提供的命令行工具,实现云函数从代码库到打包构建,到本地的构建,然后完成代码更新,通过测试步骤可以进一步验证这个版本是否OK,然后再进行流量切换,最终完成真正的业务上线。
以上介绍的就是针对腾讯云云函数我们的后续规划,在开发者这方面能力怎么建设,怎么面对开发者更有效,怎么样让云函数面向业务更友好。
后面我们会介绍云函数在小程序开发这块的融入情况。小程序云开发是在今年9月份正式上线的。正式上线以后,开始使用的用户越来越多。小程度云开发是微信和腾讯云的融合,在结合之后,对小程序的开发者提供了Serverless服务,包含了对象存储,云数据库和云函数,其中对象存储提供了文件存储能力,云数据库提供了结构化数据存储能力,而云函数提供了Serverless的计算能力。通过这种方式,对开发者来说,不需要感知到底层的各种服务,而是直接开通服务后就可以使用。在这个产品中,云函数怎么体现它的优势?首先云函数在小程序开发中接入的时候,我们着重强调安全能力。小程度云开发本身和微信的开发者IDE这块做了无缝的整合。用户在每次调用函数时,都能拿到用户openid,获取到用户的登陆情况。而云函数和小程序,在内部也做了全链路的安全加强。第二是能快速使用起来。原有的用户自有业务,需要配制服务器、域名等等后才能调用访问。而云函数在开发之后,小程度内就可以直接通过内制的SDK调用函数运行,同时云函数又可以通过内制的 SDK 读写文件存储或者数据库。而这一套管理界面已经全部集成在微信的IDE里面,所有的开发者都有免费的额度套餐可以开通使用。
总的来说,腾讯云服务无服务器云函数的目标是为开发者提供极值纯粹的云端开发体验。