一讲了解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/FaaS 的现状和未来

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

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

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

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

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

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

- -

微信的价值

- - 钛媒体TMTpost—把脉科技资本论
昨天,微信正式发布了4.5版. 在我看来,这个新版本释放出了两个关键的信号,第一个是微信只做底层的平台,具体的应用会开放给第三方来做,第二个是微信公众账号未来的形态,一定不是简单的对话,而是类似app的形态. 首先,我们看到微信把保存公众账号文章这个功能,开放给了“我的印象笔记”. 这是一个非常基础性的功能,微信完全可以自己来做,而且自己做从客户体验角度来讲,也会最方便,但是它把它开放了.

微信是什么?

- - 《商业价值》杂志
一个移动互联网时代全民都在参与回答的问题. 2012年12月,丁香园CTO、知名互联网评论人冯大辉在推出不久的微信公众平台上创建并运营自己的公众号一段时间之后,说了一句让人印象深刻的话,“对话即服务,对话即搜索”. “微信一定会蚕食搜索引擎的市场……搜索本质上也是服务,天气、旅游、购物、股票……皆可拓展.

微信是鸡肋?

- - 月光博客
   微信是一款跨平台的通讯工具,作为腾讯最为倚重和寄予厚望的产品,承载着腾讯移动互联网称霸之梦. 本文希望透过微信,加深对社会化媒体与移动互联网的理解,概述微信在社会化媒体及移动互联网的角色定位.   我们可以用微信与好友一对一聊天,具有私密性强,快捷便利的特点,这是微信的一个基本功能. 陌陌,微博私信,QQ等都可以具有这样的功能,显然这形成不了微信的核心竞争力.

微信在东南亚推“WeChat GO 微信乐游卡”,聊微信免流量

- - PingWest品玩
PingWest 品玩 9 月 8 日报道,微信与新加坡第二大电信运营商 StarHub(星和电信)合作,推出一款名为“WeChat GO 微信乐游卡”的电话卡产品. “微信乐游卡”用户在境内可以免流量使用微信,同时提供 7 天和 12 天两种套餐,定价分别为 16 新元和 32 新元. 前者提供 7GB 定额流量和 1GB 高速可漫游流量,500 分钟本地通话时长以及 60 分钟直拨主叫中国大陆通话时长;12 天套餐提供 15GB 定额流量,2.4GB 高速可漫游流量,3000 分钟本地通话时长和 150 分钟主叫中国大陆通话时长.

微信架构的启示

- - Tim[后端技术]
腾讯大讲堂中最近分享了周颢演讲的 微信技术总监解读微信架构的秘密,看完视频的一些心得. 微信的技术设计上有很多微创新,看起来都很小,但是对于系统的稳定性、用户体验及开发敏捷都具有重要作用. 由于客户端升级不便,从技术设计上尽量利用后端的设计来减少依赖客户端升级的方法. 如某个版本新增了群聊功能,按常规思路,需要所有客户端升级才能全部打通.