做 Serverless 开发,你需要掌握什么样的技能?

作者:

发布于: 2019-4-24

归档于:

标签:Serverless

​ Serverless架构在IT行业蓄势待发,并非没有道理。尽管这是一个相对较新的技术,但已引起了广泛的关注。专家指出,Serverless 架构具有缩短交付时间,改善操作和安全实践等功能,以及创造出一种革命性的付费模式——按资源消耗付费。Serverless 从底层开始变革计算机资源的形态,为软件架构与应用服务部署带来新的设计思路。

你或许已经了解了 Serverless 架构,但它具体的生态系统是什么样的,开发者又如何利用 Serverless快速进行应用落地……本文整理了Hello Serverless北京站的部分精彩内容,从 Serverless 架构设计的核心要点出发,为你解析Serverless开发,需要掌握的关键点。

腾讯云卢萌凯:一个工程师如何在2周内制作出用户过亿的小程序

随着小程序生态的逐渐繁荣,2019年将是小程序大爆发的一年。在公司人力不足的情况下,工程师怎样在极短的研发周期内,开发出一款支撑海量用户的小程序?腾讯云高级产品架构师卢萌凯以腾讯相册为例,现场分享了Serverless开发模式下,系统架构如何帮助用户实现高并发、负载均衡等,并保证系统的安全稳定。

据了解,腾讯相册团队初始阶段仅几位前端和后台开发,但目标是要支撑过千万的用户,且后台开发无法百分百能够投入到此项目,大部分时间要抽身支援其它项目,人力非常紧缺。此外,原有后台系统有不少历史包袱,在原有架构上做新的社交化功能开发是不现实的。

为了解决腾讯相册团队遇到的难题,腾讯云推荐了基于 Serverless 的小程序·云开发模式,通过提供较完整的云服务架构,简化小程序开发过程中复杂的后端操作,让开发者无需关心底层服务器资源部署运维,极大节约服务器架构搭建维护成本。基于云开发,腾讯相册团队用不到2周时间上线了第一版小程序。

小程序·云开发集成于小程序控制台的原生Serverless云服务,包括云函数、云数据库和云存储三大核心功能。

  • 云函数:在云端运行的代码,微信私有天然鉴权,开发者只需编写自身业务逻辑代码,平台保证安全和隔离性,根据请求自动伸缩;
  • 数据库:既可在小程序前端操作,也能在云函数中读写的JSON数据库,权限隔离;
  • 存储:既可在小程序前端直接上传下载云端文件,也可在云函数、云开发控制台可视化管 理,自带CDN加速。

那么,如何利用云开发系统完成业务逻辑的开发呢?这里,以点赞评论和分享功能为例。

新增小程序评论、点赞等操作需要用户的鉴权信息,腾讯相册原有的后端服务架构太复杂,增加新功能非常困难。我们采用的解决方案是通过云函数的路由功能,在原有的相册服务端获取用户的鉴权信息,匹配原有后台服务,判断该用户在小程序端是否有权限进行敏感操作。

分享功能里,小程序码不能存太多信息,而二维码中包含了name, ownerid, page等大量信息,在某些机型上无法有效识别。在云函数中,可以通过调用微信生成小程序码的接口,将图片存储至云文件存储,获取临时图片URL。这样小程序码只需记下一个ID,具体信息存储在小程序云的数据库中,大大提升识别度大幅。

在传统的开发模式中,有三大功能小程序无法绕开后台的帮助:数据读取、文件管理、敏感逻辑的处理(如权限)。因此,在小程序端都必须发送请求到后台进行鉴权,并且处理相关的文件或者数据。如果用 Node 来搭建后端服务,基础架构搭建、后期运维需要耗费不少时间和精力。基于 Serverless 的云开发方式下,新开发的小程序后端与原有的后端服务互不冲突,可节省排期和联调的时间,提升开发效率,同时,只需在云函数中完成鉴权,即可打通原有的数据资源。

截止2018年12月,腾讯相册累计用户量突破 1亿,月活 1200万,阿拉丁指数排行Top30,已经成为小程序生态的重量级玩家。腾讯相册通过小程序和空间相册打通,实现了在小程序端的照片上传、下载、 分享好友、点赞、评论、生成小程序码等功能。

除了小程序跟Serverless深度结合之外,腾讯云还基于Serverless为企业和开发者们打造了一套无服务器执行环境(Serverless Cloud Function,SCF)。用户只需使用平台支持的语言编写核心代码并设置代码运行的条件,SCF平台就会根据触发器事件,完成代码运行环境的准备、调度、触发,执行、扩容。

据介绍,SCF已经可以成熟应用于 Web 服务、Websocket、 消息处理/流事件处理、 对象存储COS回调等多个场景当中。感兴趣的读者可以点击阅读原文

了解详情!

腾讯云李晓慧:使用DBaaS打造热门应用

随着DataBaaS Serverless服务的兴起和发展,用户不需要关注数据库实例及其扩展,能够将精力用来创造更多的业务价值。腾讯云数据库MongoDB产品负责人李晓慧,现场就DBaaS服务如何帮助用户构建高并发、安全、稳定的应用主题进行了深入浅出的分享。

李晓慧认为,当前用户业务绕不开两大问题:高昂的成本以及糟糕的敏捷性。因为在产品初期,数据库实例的使用率不会很高,但需要有专门的DBA来运维,且研发需要学习数据库的使用,因此数据库使用的学习成本和人力成本就上来了,这对系统的敏捷性有非常大的伤害。而DBaas的意义,就是解决系统的敏捷性和成本问题。

DBaaS是一种允许用户通过使用自助服务供应框架从预定义的服务目录中进行请求的数据库服 务。其主要优势是敏捷性,通过资源池来提供服务可以针对用户跟踪计算成本并对其收费,并降 低成本。DBaaS具备五大能力:

  • 完善的API能力:包含数据的CRUD、索引、聚合等多种能力的API,最大可能满足业务需求;
  • 索引管理:API和界面两种方式的索引管理,助力提高查询效能;
  • 完善的备份与恢复能力:数据的全量备份加增量备份、保证业务数据不丢失;
  • 完备的日志能力:提供数据操作日志及慢SQL日志,全方位助力定位问题;
  • 支持多文档事务(开发中):满足OLTP场景数据库事务需要;
  • 多维度监控和告警:除默认提供的监控指标外,用户还可以使用自定义指标保持对业务的 关注。

随后,李晓慧分享了腾讯云DaaS团队基于现有大用户服务的一些优化经验,第一点是DBaaS提供的一种资源池化技术,分热池和冷池,这个池子对用户无感知,用户只需要使用服务,池子有后台的紧密监控,发现用户的数据、服务变得很热之后系统会做迁移,把上面热服务迁走,这里用户是无感知的,同时假如其他的用户很久不再访问,这里会有一个冷池子,专门存储用户的冷环境。这样设计,能够使资源利用最大化。

第二个的是在服务游戏用户时,游戏用户请求业务量高峰来临,业务在高请求、高并发的时候,会进行很频繁的操作,此时大量的无任务请求可能会被锁住。系统在这里做了一个优化,我们提出了一个读快照的特性,通过读快照功能,避免读操作在高并发读写时被锁住,进而提高服务的吞吐量。通过下图可以看到,业务量大的时候,系统性能提升还是非常明显的。

腾讯云DBaaS服务的适用非常广泛,包括文章及日志服务、相册服务、游戏类服务以及电商类服务等。后续,DBaaS服务会陆续完善触发器功能,并与云函数一起,在公有云控制台上将这些功能展示出来,为大家提供更好的创建服务。

竹间科技朱峰:从 MVC 到 FaaS,如何开发企业级 FaaS 应用

简单心理是从去年第三季度开始尝试 Serverless 的,今年正式全面转向 Serverless 架构,用了大约半年的时间,摸索出一整套企业级 Serverless 应用框架。竹间科技技术负责人朱峰现场从什么是 FaaS、为什么使用 FaaS以及如何使用 FaaS三个方面分享了简单心理从 MVC 到 FaaS的研发历程。

Serverless 按照托管的对象来区分,有两个子集。一个是函数托管服务,也就是 FaaS(Function as a Service)。一个是应用托管服务,通常被称为 PaaS(Platform as a Service)。FaaS 是专指 Serverless 服务中的函数服务,开发者只需上传函数,剩下由服务商来负责按需执行和横向扩容等事情。目前大多数云服务商提供的 Serverless 服务都是 FaaS 服务,比如腾讯云的云函数,PaaS 主要的服务商是 Google 的 App Engine。

那么比起单体应用、微服务架构等,FaaS 架构的优势究竟在哪里呢?朱峰从三个层面进行了总结:

  • 首先是开发层面。就学习成本来说,由于 FaaS 的基本单位是函数,且函数本身是很纯粹的面向过程的编码方式,非常贴近人们的日常表达方式,所以无论是技术角度还是沟通角度来说,其学习和开发的成本都较低。从技术债的角度来说,无论是单体应用还是微服务,都无法避开业务快速增长时所带来的大量难以处理的技术债问题。FaaS 也无法避免技术债的产生,但由于函数这个颗粒度足够小,因此可以非常方便的找到重构的切入点,进行绿色环保施工,轻松进行各种程度的重构工作,使得技术债的偿还成本被极大的降低了。
  • 在运维层面,除了服务商全权提供执行、扩容、安全和灾备等服务外,因为云函数本身具有独立执行的特性,所以发生单点故障时,其受影响的范围也比较可控。
  • 成本方面的特性简单来说就是便宜,因为按量计费,不需要购买服务器和带宽等。高峰时也会自动伸缩,但目前因为冷启动的原因导致性能爬坡比较慢,不过如果使用的是腾讯云的话可以联系客服申请提前预热实例来一定程度上避免性能爬坡的问题。

在FaaS的使用方面,朱峰分别从知识储备、框架以及命令行三个维度进行了深度分享。

  • 知识储备:以 Node.js 举例,这里的基本用法是指最常用的知识,比如常用类型及其方法,需要掌握如:字符串如何拼接、替换,当前时间戳如何获取等等。可能还需要掌握一些内置库(比如读写本地文件)和特定情况需要用到的第三方库(比如 mysql、redis 等等)。然后是 FaaS 的基础知识,主要是两个概念:云函数和触发事件。云函数就是 FaaS 的基本单位,是一个负责接收和处理事件的函数。对于触发事件,不同业务类型可能有不同的侧重点,简单心理主要使用网络请求和定时触发这两种事件。了解了 FaaS 的基础知识之后,接下来是云函数框架所需的基础知识,包括命名规则、模板和插件。

  • 框架:简单心理主要通过模板和插件的组合,来大幅简化日常的开发工作。这个框架目前仅在简单心理内部使用,上手这套框架,需要了解三个抽象概念:命名规则、模板和插件。命名规则的作用是管理大量的云资源的,通过命名规则,将云服务融为一体进行开发和使用同时,为了简化开发工作和提升开发效率,我们将一些常用业务流程进行抽象,并制作成模板,开发者可以通过模板来生成业务流程所需的云资源。最后是插件,插件是对常用技术的封装,比如数据库、第三方接口等等。

  • 命令行是用于快捷处理云函数整个生命周期的工具,可以通过命令行快速完成云函数创建、添加插件、更新模板和插件、测试、发布、批量测试、批量发布等。

腾讯云李艳博:无服务器云函数网络架构演变

最后分享的是腾讯云高级工程师李艳博,李艳博从Serverless的定义、Serverless传统网络架构以及云函数新网络架构三个方面分享了腾讯云无服务器云函数网络架构演变。

云函数即用户将业务代码委托给平台,配置事件触发方式。平台根据触发器事件,完成运行环境的初始化、网络的打通、代码的执行和扩容操作。

网络需求分两大类,第一类是访问公网,例如通过公网访问自己的数据中心;另外一类需求是访问VPC,VPC是云上逻辑隔离的网络空间。访问公网的需求中,有一类特殊需求是固定公网出口IP,例如客户通过公网访问存有敏感数据的数据时,需要限定来源IP,提高访问安全性。传统网络架构中,对无需固定IP访问公网已经有比较好的支持,但是对访问VPC和固定IP访问公网的场景支持上还有一些不足。

客户的函数是部署在一个SCF集群里,集群本身位于一个VPC中,在VPC内配置了NAT网关,函数访问公网时统一由NAT网关转发。传统网络架构下对于无需固定IP访问公网的场景已经有比较好的支持。因为传统架构下单个NAT网关配置了多个EIP,因此无法支持固定一个出口IP的目的。对于将NAT网关上的所有IP组添加到外部API的IP白名单的做法,存在两个问题,一个是IP组由所有客户函数共享,存在安全问题。另外一个是随着集群规模增大IP组会配置更多IP,存在扩展性问题。

传统架构下访问VPC是通过在容器内创建到客户VPC的弹性网卡实现的。由于创建弹性网卡是个比较重的流程,耗时比较长,存在冷启动问题。另外运行函数时候,可能分配不到弹性网卡对应的IP资源导致函数运行失败。

传统架构下固定IP访问公网是在访问VPC的基础上实现的,通过在客户的VPC内配置NAT网关实现固定IP访问公网。这种架构一方配置复杂,另外一方面是成本问题。NAT网关除收取流量费外,还有固定的资源占用费,每个月最便宜也要三百多。

在新架构下,函数要访问VPC时,首先从云函数到主备容灾的Proxy,再从Proxy到客户的VPC。新架构下,在运行函数时只需要配置代理的参数,新架构下冷启动,相比旧的架构,时间从秒级下降到毫秒级。另外是资源占用的问题,新架构下从客户VPC内分配两个弹性网卡,在创建函数时把这些资源分配好,运行函数的时,不会存在因为创建弹性网卡失败导致IP资源不足,进而导致函数运行失败,下图是新架构下访问VPC的整体设计。

固定IP访问公网的设计,和访问VPC是类似的,变化点有三个,第一点是不再需要创建到客户VPC的弹性网卡;第二点是在HAVIP上绑定一个EIP,客户函数访问公网时,流量会先转发到Proxy,Proxy再以EIP访问公网;最后一个变化在访问VPC的时候,是单个客户独享一对主备Proxy,固定IP访问公网是多个客户共享的,在一个弹性网卡上绑定多个HAVIP,每个HAVIP绑定一个EIP。下图是新架构下固定IP访问公网的设计。

总体而言,新架构无需固定IP访问公网的网络拓扑和网络功能与传统架构完全一致,是传统架构中继承过来的。访问VPC有两个优化,第一是冷启动的优化,第二是节约VPC内的资源;最后固定IP访问公网的场景主要有两点优化,第一成本降低,第二配置简单。

传送门:

欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!