一讲了解Serverless,以腾讯地图、微信小程序为例

标签: serverless 腾讯地图 微信 | 发表时间:2020-01-06 11:27 | 作者:灵雀云
出处:http://weekly.dockone.io

Serverless从去年开始尤其是最近特别火,因为确实能够解决我们的一些业务问题。我会借助腾讯云Serverless产品,来介绍下腾讯云是如何落地Serverless技术,以及Serverless技术所适用的场景,最后会介绍一些客户案例。

Serverless 简介



在左边这张图上,蓝色的是Serverless,在2016年它的热度已经超过微服务和 Kubernetes。右边展示的是Serverless产品化的情况。比如,2014年的时候,AWS首先推出了Lambda,2016年微软、Google、IBM都分别出了自己的产品。国内来说,17年国内厂商腾讯云推出了Tencent Cloud SCF,阿里云也推出了自己的Serverless产品。18年腾讯云联合微信,推出了微信小程序云开发的产品TCB,19年,腾讯云推出了Serverless 2.0产品TSF Serverless,支持新的应用场景。

什么是 Serverless?



Serverless无服务器,不代表真的不需要服务器,只不过服务器由云厂商维护。它是一种软件系统架构思想和方法,不是软件框架、类库或者工具。它的核心思想是,无须关注底层资源,比如:CPU、内存和数据库等,只需关注业务开发。

我们从另一个角度来看下 serverless 技术为什么这么火。

这张图的前三列大家应该可以看到这 3 列代表了云计算的发展阶段,从刚开始的 On-Premise 到 IaaS 层,再到 PaaS 层。第四列 FaaS 层,serverless就在这一层。

在软件研发领域,我们绕不开的两个环节是软件的部署和运维。如果我们要上线一个业务,在 On-Premise 阶段,我们要去购买物理服务器,然后还可能需要去建自己的机房,安装制冷设备,招聘运维人员,然后再上面搭建一系列的基础设施,比如:虚拟化,操作系统,容器,Runtime,Runtime 可以理解为像 python, golang, nodejs 这类软件。接下来我们要去安装软件类的开发框架,到最后,我们才会去编写我们真正需要的业务函数。到了 IaaS 层这一阶段,云厂商维护了硬件和虚拟化这两个基础设施。

到了 PaaS 层云厂商又维护了 OS、容器和 Runtime,然后到了 FaaS 阶段,用户只需要关注 Function,也就是只需要关注自己的业务逻辑。可以看到随着阶段的演进,用户需要关注的点越来越少,越来越聚焦于自己的业务逻辑。所以在 On-Premise 阶段,我们开发一个业务可能需要 8 个人,在 FaaS 阶段,我们只需要 2 个业务,节省了很多人力,可以把节省的人力投入到业务研发这块,提高产品的迭代速度,进而提高产品的竞争力。

由这张图我们也可以看到,过去十多年云计算其实是一个“去基础架构”的过程。这个过程可以让用户聚焦于自己真正需要的业务开发上,而不是底层的计算资源上。serverless 符合云计算发展的方向,是云的终极形态,这种特有的模式使serverless 存在潜在的巨大价值。

Serverless技术形态

这里介绍下Serverless的技术形态。目前腾讯云Serverless一共有3种技术形态。



一种是Cloud Function,Serverless Cloud Function 是基于事件驱动型的,大概意思就是外界触发一个事件给 Serverless 平台,Serverless 平台收到触发事件后,会调用函数并传入触发事件数据和参数信息,函数内部做业务逻辑处理之后返回给调用方。Serverless Cloud Function 可以对接多种云上的产品,比如:api网关、ckafka、cmq、COS对象存储等。

event function 是一种开发模式,要求业务将业务逻辑拆分成function 这种粒度,这种方式国外接受程度比较高,但是国内很多用户都还停留在 HTTP 这个阶段,为了能够方便现有的业务迁移到 serverless 平台,适配现有业务的调用方式以及扩展 serverless的使用场景,我们又提供了TSF Serverless这种方式。

TSF Serverless,Service 这种形态可以理解为我们通常意义上的 HTTP 服务,简单理解就是把 HTTP 服务的运行环境从物理机或者虚拟机或者容器换成 serverless 计算资源。这种形态服务进程常驻,不限制运行时间,因为服务进程常驻,所以它一直在监听请求,所以请求延时更低,同时也支持长连接和一定的内场共享能力。因为 service 这种形态,跟我们现在的服务运行方式是一致的,所以业务可以无缝迁移到serverless 平台上,不需要做过多的改造。同时TSF Serverless支持Spring Cloud这种微服务框架,也支持Service Mesh这种服务形态。

还有一种就是Tencent Cloud Base这种形态,这种形态是我们联合微信团队推出,简化小程序开发流程,里面封装了很多功能,比如:云函数,对象存储,数据库,方便用户开发小程序。这也是云函数的一个典型应用场景,通过封装云函数,提供一些PaaS能力。

Serverless Cloud Function 组件架构

Cloud Function 组件架构



这里介绍一下Cloud Function的组件架构,让大家了解下,我们底层都做了哪些工作,来实现serverless这门技术。这张图描述了 serverless 的组件架构。最底层是基础设施层,底层计算资源我们用到了 docker 和轻量化虚拟机技术,其中 docker 是 serverless1.0 的计算资源展现形态,轻量化虚拟机是serverless2.0 的计算资源展现形式,相比于 docker,轻量化虚拟机性能得到了非常显著的提升,可以在几毫秒就可以启动一个业务进程。在最底层我们也做了双活,并且对底层资源做了严格的安全保护。

再上一层就是资源管理层,比如说我们有集群监控,监控我们的集群监控状况,如果有集群不可用,会立马安排运维人员去排障,当然了,我们刚说过我们底层是有双活的,当一个集群出故障的时候,我们可以把流量切换到另一个集群,用户是无感知的,也不会影响用户的请求。这一层我们有专门的自动扩缩容算法,来应对用户的请求变化。再往上,我们有认证和授权系统,通过认证和授权来保证函数的安全。再上面就是接入层,接入层主要用来触发 Function 的调度和执行。在往上就是架构层,主要用来做一些流程上的调度。最上面这2 层是用户需要关心的,用户主需要关注自己的业务代码,以及跟数据库,存储等的调用,还有自己使用的一些框架,其它底层的设施用户完全不用关心,全是由云厂商来提供专业的保障和维护。

我们还提供了很多外围的工具系统,来支持用户的研发、部署和排障。比如: DevOps 支持,日志、监控、告警支持。后面会有介绍。

运维工具建设



刚才讲了Serverless是如何支持函数的运行,其实就是讲了计算资源。但是要真正使用Serverless这个技术,光有计算资源还不行,还要有其它工具来支持Serverlss的开发和运维。接下来我从开发者工具,CI/CD,日志,监控告警来介绍下腾讯云是如何支持serverless的。

首先来介绍下开发工具,为了支持开发者能够方便高效的开发和部署云函数,我们开发了一系列的工具,比如:我们提供 VS Code 插件,通过 VS Code 插件,开发者可以很方便的通过 IDE 直接部署、更新和调试云函数。我们也提供了 Web IDE 来方便用户直接在网页开发代码。此外我们还提供 CLI 工具,通过 CLI 用户可以在终端很、方便的通过命令调用完成诸如配置、部署、调试、调用等功能。最后我们还提供 API 接口来满足用户对自动化和定制化的需求。最后我们还提供 SDK 供用户更方便的调用云函数的接口。所以可以看到要将 serverless 产品化,还需要做很多其它工作来支撑 serverless 这个技术,尤其是工具这块儿。

除了开发者工具,我们也提供完善的 DevOps 支持,从最佳实战,到工作流,到工具链,以及产品打通,我们都提供了很多方案和支持。

比如工作流这里,我们支持编码、构建、打包、部署、测试和发布等一系列流程。在工具这里,我们提供了:CLI、应用模型等。产品这里,我们打通了很多产品供用户很方便的跟这些产品进行交互,利用这些产品提供的能力,比如:Git 仓库,API 网关,ServerlessDB等。这个是 DevOps 支持。

日志这里我们支持 2 种日志查询方式,方便用户查看日志。在 scf 控制台上,能够查看函数调用成功与否,各阶段的调用时间,以及用户打印在日志或者标准输出的日志,支持用户按 RequestId 去搜索日志。另外我们还支持用户将日志输出到腾讯云日志服务系统,将日志持久化存储,在日志服务系统中,用户可以根据正则表达式来搜索日志,也可以自定义检索规则,方便下次检索。

Serverless Cloud Function 应用场景

这里介绍一下应用场景,先介绍下 Cloud function 的应用场景,通过这张图,我们可以看到,云函数可以作为浏览器、APP 和小程序的后端服务。通过我们提供的不同触发器可以支持不同的场景,比如通过 API网关触发器,可以匹配 websockt 的应用场景,通过cos/cmq/ckafka 触发器可以支持像:消息处理、流失计算,事件通知这类的应用场景。

Serverless Cloud Function 客户案例



这个是腾讯地图的客户案例,走的是 event function 这种方式。场景是这样的:用户在访问腾讯地图是会产生一些数据库,腾讯地图会将这些数据进行整理并保存到 Hbase 和 ES 上,然后再配上一个 UI 用来查询数据。当用户产生一条数据时,会将这条数据放在 kafka 队列中,kafka 触发后端的云函数,云函数做数据处理之后又将数据放入 kafka 队列中,由另外一个进程从 kafka 队列中取走处理后的数据,放入 ES 和 Hbase 中。

Tencent Cloud Base



下面介绍一下TCB。做小程序开发时,要有一个小程序前端,也需要有后端,写后端时,需要处理很多后端需要的组件或者功能,比如数据库、存储或者CDN等等,都需要研发工程师自己去给产品写接口、做调用,工作量非常大,这时候可以通过TCB来解决,TCB就会变成右边这样。前端仍然有一个小程序的前端,中间We-Chat Backed主要用来做授权,当授权通过后,会把请求转发到TCB组件,这个组件会提供很多SDK,提供的SDK里面封装了很多功能,比如数据库、对象存储以及云函数,直接通过TCB的SDK调用,这样就不需要处理后端那么多组件,让用户非常方便的去开发一个小程序。

TSF Serverless



这里介绍一下TSF Serverless,TSF是腾讯云的微服务产品,这个产品底层之前是支持基于虚拟机和基于容器部署应用,我们又增加了基于Serverless第三种部署方式。基于Serverless的话,用户不需要去关注底层资源,只需要去部署容器就可以了。

这个是它的组件架构,最底层是Serverless计算托管的一些功能,比如集群管理容器,这是Serverless底层的一些计算的展现形式。再上一层微服务部署框架,这个部署可以原生支持一些微服务功能,比如服务注册、服务发现以及服务限流、服务熔断、动态配置、服务监控、负载均衡、服务容错、服务审计等等。

TSF Serverless 应用场景

这里介绍下TSF Serverless其中的一个典型场景。假设我有一个 APP 应用跨多端的,比如 Android,iOS,Web。如果想写后台的话,我可能要写多个接口,去适配不同的终端。这样如果后端有变更,需要去更改 3 个终端的 API 接口,与此同时,当我们需要对一个字符串进行处理,如限定 140 个字符的时候,我们需要在每一个客户端(Android,iOS,Web)分别实现一遍,这样的代价显然相当大。

现在有一个比较流行的解决方案就是在前后端加一个 BFF 层(Backend For Frontend)将前后端解耦,这里是 BFF 层可以承载的能力比如:身份校验,日志记录,数据组合等。BFF 一般由前端工程师去编写,适配不同的后端当后端有变更的时候,只需要改 BFF 层就可以,不用去更改客户端。BFF 层可以部署成 HTTP Service,也就是可以直接利用我们提供的 HTTP Service 技术形态来部署。通过 BFF,可以让前端工程师变成全栈工程师,开发不用去关注底层的资源。因为BFF一般是HTTP服务,所以TSF Serverless就很适合这个场景。

相关 [serverless 腾讯地图 微信] 推荐:

一讲了解Serverless,以腾讯地图、微信小程序为例

- - DockOne.io
Serverless从去年开始尤其是最近特别火,因为确实能够解决我们的一些业务问题. 我会借助腾讯云Serverless产品,来介绍下腾讯云是如何落地Serverless技术,以及Serverless技术所适用的场景,最后会介绍一些客户案例. Serverless 简介. 在左边这张图上,蓝色的是Serverless,在2016年它的热度已经超过微服务和 Kubernetes.

Serverless 初探

- - 掘金 前端
广义的 Serverless :构建和运行软件时不需要关心服务器的一种架构思想. 虽然 Serverless 翻译过来是 “无服务器”,但这并不代表着应用运行不需要服务器,而是开发者不需要关心服务器. 而基于 Serverless 思想实现的软件架构就是 Serverless 架构. 现阶段关于 Serverless 的实现主要是基于 FaaS(函数即服务) 和 BaaS (后端即服务)的方案.

Knative serverless架构详解

- -
服务器是一个高性能的 Web 和反向代理服务器. Nginx 在激烈的 Web 服务器竞争中依旧保持良好的发展势头,一度成为. Web 服务器市场的后期之秀,这一切跟 Nginx 的架构设计是分不开的. 来自于my.oschina.net,,由火龙果软件Alice编辑、推荐. 无服务器架构(serverless),则表示代码可以只在需要时运行,在不需要时就停止,从而让你的基础设施能在其他方面自由使用计算资源.

Serverless/FaaS 的现状和未来

- - 午夜咖啡
FaaS 是一种新兴的技术平台,个人认为 2018 年即将迎来 FaaS 的崛起. 本文给大家提供一个 Serverless/FaaS 的现状与未来的报告,也作为自己的年度技术总结. 什么是 Serverless/FaaS. 但传统的 Application PaaS 平台,开发者对服务运行的实例还是有感的,即便是没有调用,也依然需要占用资源,并对资源付费,并不是完全的 Serverless,直到 FaaS 出现.

Serverless 的初心、现状和未来

- -
作者 | 不瞋  阿里云高级技术专家. 导读:Serverless 是如何产生的. Serverless 的未来又将如何. 本文分享了阿里云高级技术专家不瞋对于 Serverless 的看法,回顾其发展历程,并对 Serverless 的发展趋势做出预测. 回望整个计算机技术发展史,我们会发现 “抽象、解耦、集成” 的主题贯穿其中.

引入:从云计算到Serverless

- - InfoQ推荐
自世界第一台通用计算机ENIAC(Electronic Numerical Integrator And Computer, 如图1)诞生以来,计算机科学与技术的发展就从未停止过前进的脚步,尤其是近些年计算机的发展更是日新月异,有不断突破和进化的人工智能领域,有5G带来更多机会的物联网领域,还有“可信“的区块链技术,当然也有不断更新、不断迭代,不断走进“寻常百姓家”的云计算.

Serverless实战:打造个人阅读追踪系统 – ThoughtWorks洞见

- -
阅读习惯和个人知识管理体系. 进入互联网时代,知识的获取成本变得前所未有的低廉,但是无论再好的知识,若是没有对个人产生价值的话,那也只不过是一种信息噪音而已. 我在《个人知识管理:知识的三种形态》这篇文章中使用“材料 -> 资料 -> 知识”这样的路径来诠释信息的流通,如何方便快捷并且有效地收集材料,再将其整理转化为有价值的个人知识体系结构,在这个信息极度碎片化的时代变得尤为重要.

探索 Serverless 中的前端开发模式 - 掘金

- -
最近关于 Serverless 的讨论越来越多. 看似与前端关系不大的 Serverless,其实早已和前端有了渊源,并且将对前端开发模式产生变革性的影响. 本文主要就根据个人理解和总结,从前端开发模式的演进、基于 Serverless 的前端开发案例以及 Serverless 开发最佳实践等方面,与大家探讨 Serverless 中的前端开发模式.

当 SSR 遇上 Serverless,轻松实现页面瞬开

- -

谈Serverless无服务器架构和应用场景(201013)

- - 人月神话的BLOG
对于云原生解决方案中涉及到的微服务,DevOps,容器云和ServiceMesh等内容,在前面很多文章都已经谈到过,今天准备谈下对Serverless架构的一些理解. 实际上要完全理解Serverless无服务器架构是一件相对困难的事情,包括到现在我的认知里面仍然认为这种架构是无法满足传统IT应用系统的架构转型和迁移的,只能够应用到一些特定的场景.