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

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

Serverless 简介node

pic1.jpg

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

什么是 Serverless?golang

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

咱们从另外一个角度来看下 serverless 技术为何这么火。正则表达式

pic2.jpg

这张图的前三列你们应该能够看到这 3 列表明了云计算的发展阶段,从刚开始的 On-Premise 到 IaaS 层,再到 PaaS 层。第四列 FaaS 层,serverless就在这一层。算法

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

到了 PaaS 层云厂商又维护了 OS、容器和 Runtime,而后到了 FaaS 阶段,用户只须要关注 Function,也就是只须要关注本身的业务逻辑。能够看到随着阶段的演进,用户须要关注的点愈来愈少,愈来愈聚焦于本身的业务逻辑。因此在 On-Premise 阶段,咱们开发一个业务可能须要 8 我的,在 FaaS 阶段,咱们只须要 2 个业务,节省了不少人力,能够把节省的人力投入到业务研发这块,提升产品的迭代速度,进而提升产品的竞争力。数据库

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

Serverless技术形态

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

pic3.jpg

一种是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 组件架构

pic4.jpg

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

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

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

运维工具建设

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

pic5.jpg

首先来介绍下开发工具,为了支持开发者可以方便高效的开发和部署云函数,咱们开发了一系列的工具,好比:咱们提供 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 应用场景

pic6.jpg

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

Serverless Cloud Function 客户案例

pic7.jpg

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

Tencent Cloud Base

pic8.jpg

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

TSF Serverless

pic9.jpg

这里介绍一下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就很适合这个场景。

相关文章
相关标签/搜索