共计 5444 个字符,预计需要花费 14 分钟才能阅读完成。
本文整顿自 ServerlessDay · China 大会 –《京东智联云在 Serverless 的摸索》的分享,讲师为京东智联云的 PaaS 产品负责⼈朱琅。
本文次要分为三局部:
- ⾸先会介绍下 Serverless 的概念和定义,期间会讲讲我个⼈对 Serverless 的了解;
- 第⼆局部,我会着重介绍下 Serverless 在京东智联云的应⽤;
- 最初,会讲述我对 Serverless 将来的瞻望。
Serverless 的概念和定义
提到 Serverless,⼤家基本上第⼀工夫会想到的就是 AWS lambda,没错,让 Serverless 这个名称真正⽕起来的其实就是 AWS 推出的 FaaS 服务 — Lambda,它是⼀个平台,容许你在云上容许独⽴的代码段,通过事后设置好的事件触发代码的运⾏。
除了 FaaS 之外,还有 BaaS,尽管和 Blockchain as a Service 的缩写⼀样,但它其实是 Backend as a Service — 后端即服务的缩写,⽆需编写 / 治理所有服务端组件,与虚拟机和容器相⽐,概念上更靠近 SaaS(软件即服务),BaaS 服务都是畛域通⽤的组件服务,通过 API 调⽤的⽅式来使⽤。
说完了定义,再来看下 Serverless 的发展史。
- 最早能够追溯到 2006 年,Zimki 推出的代码执⾏平台,它是⾸个提出按使⽤免费的服务;
- 接着就是 2011 年的 Parse,它提供了 BaaS 框架,⽅便⽤户基于它更快的构建应⽤程序,起初是被 Facebook 收买;
- 到了 2012 年,相继有 Fribase 和 IronWorker 服务,前者是⼀个针对挪动端的应⽤开发平台,起初被 Google 收买了,后者是基于容器的应⽤负载平台;
- 到了 2014 年,也就是 AWS 推出了 Lambda,⾸个云上的 FaaS 服务,将 Serverless 概念带到了⼤众的视线中;
- 紧接着在 2016
年,Google,Azure,IBM 别离在他们的云服务上上线了 FaaS 服务。
在过来提到云计算,⼤家⽿熟能详的就是 IaaS,PaaS,SaaS,那么这个 FaaS 和其余三者什么区别?在我的定义⾥⾯,操作系统以上都须要⾃运维的属于 IaaS;PaaS 其实和 FaaS 是⼏乎⼀样的,除了应⽤这⼀层之外,其余都是由云服务提供商来进⾏运维;SaaS 最简略,现成的,间接上⼿使⽤即可。
⼤家可能会好奇,既然你说 FaaS 和 PaaS ⼏乎⼀样,那么为什么不间接称之为 PaaS 呢。不焦急,咱们先来看看这个:CloudFoundry,可能有⼀些⼈会⽐较陌⽣,然而如果你是属于云计算的⽼兵,那么你必定不会陌⽣。
AWS 是 2006 年推出的,国内最早的阿⾥云也是在 09 年才成⽴,其实到了 2012 年左右,云计算的概念才缓缓传到国内,我是 2013 年开始涉⾜云计算,那时候其实就曾经开始 IaaS,PaaS,SaaS 的竞争,有的公司从 IaaS 做起,有的间接从 PaaS 或者 SaaS 开始做起;那时候提到 PaaS,必定就会提到 CloudFoundry(业界⾸个开源的 PaaS 平台),很多互联⽹企业基于 CloudFoundry 构建了 PaaS 云服务,
⽐如:京东的 JAE,新浪的 SAE,百度的公有云等等。
当我第⼀次接触 FaaS 的时候,我第⼀个感觉就是,咦,这个和 CloudFoundry 很类似啊,在你向 CloudFoundry 公布应⽤的时候,对执⾏环境有要求,明确抉择你是基于什么开发语⾔以及版本,如果以后平台不⽀持,那么你其实也是⽆法部署运⾏起来的,其次平台也提供了⾃动弹性伸缩,⾃动服务⾼可⽤,以及⽹关 / 路由等服务,而后你发现两者的最⼤区别在于,CloudFoundry 平台上提供的是⼀个常驻服务,然而 FaaS 是⼀个事件触发代码运⾏的服务。
为了让⼤家更直观的了解,咱们来看下这个。
在裸⾦属时代,从硬件到代码都是须要⾃运维的,到了起初呈现了虚拟化,像各家云上的云主机服务,使⽤者只须要关注操作系统以上这⼀层即可,再到起初的容器技术呈现,使⽤者是须要关注容器⾃身和业务代码即可,⽬前 CloudFoundry 平台就是提供了容器服务,⽤户将
⾃⼰的业务代码部署到容器中,作为⼀个常驻服务运⾏起来。最左边就是 Function 了,⽤户连容器都不须要
⾃⼰保护了,只须要关注代码即可。
每⼀项新技术的呈现即是为了解决以后的技术遇到的问题,同时新技术的采⽤也必然会引⼊新的问题。⾸先说下 Serverless 的劣势:
- 劣势⼀:降低成本,这⾥的老本既包含了经营老本,也包含了开发成本,这个很好了解,因为你不须要保护像操作系统,硬件等相干的组件,所以也就不须要雇佣相应畛域的⼈员,从⽽升高了老本;
- 劣势⼆:减速翻新,当开发完业务代码,配合和现成的 Serverless 第三⽅服务(⽐如认证服务,⽂件存储服务等),能够疾速的把业务部署并运⾏起来,⼤⼤缩短了过来业务开发的周期;
- 劣势三:可扩展性,在没有 FaaS 之前,要解决业务的弹性伸缩性能,须要购买云⼚商提供的弹性伸缩服务,并且进⾏相应的条件配置之后,能力实现业务的⾃动弹性伸缩;在 FaaS 服务中,⾃动弹性伸缩的性能是默认就⽀持的。
接着说下 Serverless 的劣势:
- 劣势⼀:提早,因为采⽤了 Serverless 的⽅式部署服务,所以服务之间的调⽤都须要通过⽹络传输,⽽不能是原先的本地调⽤,所以绝对⽽⾔提早必定会减少;
- 劣势⼆:集成测试,因为采⽤了 Serverless 技术,那么当你开发完代码想在本地环境中进⾏测试验证,就⽐较麻烦,因为你本地不存在和云上的⼀样环境;
- 劣势三:供应商绑定,因为 Serverless 技术是⼀个新兴的技术,每⼀个供应商的提供技术和规范并不⼀致,所以⼀旦你基于某⼀个云⼚商的 Serverless 服务部署你的业务,如果再想搬迁到其余云上,那么不免对你的业务会有革新老本;
Serverless 在京东智联云的应⽤和实际
介绍完 Serverless 的概念和定义,接下来看看 Serverless 在京东智联云的应⽤和实际。
⾸先咱们来看下⽬前在京东智联云上曾经提供的 Serverless 服务列表都别离有哪些:
- 在 16 年的 2 ⽉份,京东智联云上线了对象存储服务,第⼀个采⽤ serverless 架构的云上零碎;
- 在 18 年的 9 ⽉份,咱们推出了 Faas 服务,是⼀款事件驱动的计算服务,通过函数服务,⽤户⽆需配置和治理服务器等基础设施,即可弹性、牢靠地运⾏业务代码,疾速构建应⽤与服务,且只需为代码理论耗费的资源付费;
- 在 18 年的 12 ⽉份,咱们推出了 API ⽹关,提供 API 的全⽣命周期治理;⽤户可通过 API ⽹关实现⾃身系统集成和服务聚合,还能便捷平安地凋谢其业务性能和数据,并实现与开发者或合作伙伴的连贯;
- 在 19 年的 1 ⽉份,咱们推出了队列服务,是⼀款基于 serverless 架构的全托管音讯队列服务,它能够提供⾼牢靠并且⼏乎⽆限扩大的托管音讯队列;
- 在 20 年的 1 ⽉份,咱们推出了告诉服务,是⼀款基于 serverless 架构实现公布订阅模式的音讯告诉服务,提供了⾼牢靠、⾼可⽤、可动静扩大的音讯推送主题。
接下来具体看下京东智联云的 FaaS 服务技术架构图。
两头粉⾊框起来的这部分属于 Faas 的外部零碎模块;
- ⾸先咱们来看下函数事件注册流程,API 会接管从 web 端传过来的事件注册申请,将事件触发条件等元数据信息存储到 MySQL 关系型数据库中,将函数的运⾏代码存储到 BaaS 服务,即 OSS 对象存储服务中,这样就实现了事件注册过程;
- 接着咱们来看下函数事件的触发流程,trigger 是⼀个主从⾼可⽤服务,当有内部的 event 发送事件到 trigger 的时候,如果是⼀个同步事件,会间接将事件发送给 dispatcher 服务,如果是异步事件,会先发送到 queue ⾥⾯,再由 queue 将事件传递给 dispatcher 服务,dispatcher 会采⽤集群的 部署模式,dispatcher 会判断以后 event 对应的函数代码是否曾经处于运⾏态,如果是,那么间接会调⽤ container ⾥⾯的函数代码;否则会发送申请到 scheduler 服务。scheduler 是⼀个主从⾼可⽤服务,scheduler 服务会负责启动⼀个 container 服务,在启动 container 的过程中会从 oss 服务中拉取这个 event 对应的函数代码并运⾏起来。
在整个零碎中,trigger、dispatcher、scheduler 服务都会和 etcd 服务进⾏交互,通过 etcd 来确保数据的⼀致性以及进⾏⼀些选主操作。
⽬前 FaaS 曾经接⼊的事件源别离是 API ⽹关,OSS【对象存储】,云事件(有点相似告诉服务,能够定义事件源,⽐如是某⼀个资源的监控指标触发了条件之后,会调⽤ FaaS 服务),还有就是 JQS【队列服务】;前三者事件采⽤被动推送的⽅式,JQS 的事件是通过 FaaS 被动去轮询获取的。FaaS 接管到 API ⽹关的事件会采⽤同步解决⽅式,其余三者会采⽤异步解决的⽅式。
在使⽤新技术前的第⼀步⾸先是理解新技术是⼲嘛的,接下来就是如何基于新技术对现有的业务进⾏革新。
下⾯,咱们以⼀个简略的单体应⽤为例,这是⼀个 B/S 类型的业务,Server 是⼀个单体应⽤,采⽤ MVC 的架构,涵盖了 HTML,JS,Service,Data Access ⼏个模块,数据采⽤ Database 进⾏存储;除了 Database 之外,其余的服务都须要⾃开发和运维。
针对这个应⽤进⾏ Serverless 化之后,就变成了这样的架构,HTML,JS 的动态⽂件通过 OSS 来进⾏存 储,⽤户认证采⽤独自的 User Authentication 第三⽅服务,不再须要⾃⼰开发独自的 service 服务来解决⽤户登录认证问题;⽽其余业务逻辑就使⽤ FaaS 来进⾏部署,通过 API Gateway 对外裸露,当浏览器触发业务调⽤的时候,就会触发相应的 FaaS 服务。通过 Serverless 化,真正须要开发的性能就只剩下 FaaS 的业务代码⽽已了,绝对传统⽅式便捷了很多。
接下来,看看京东是如何使⽤ Serverless 服务的。
案例⼀,是京⻨音讯平台,京⻨是京东给商家提供的⼀个⼯具服务市场,通过这个市场能够下载聊天⼯具,订单推送⼯具,经营剖析⼯具等。下⾯这个图是京⻨的音讯平台服务,会实时的将订单、商品、售后等信息 通过加⼯解决之后,发送到京东智联云的 JQS 当中,JQS 是全托管的基于 Serverless 架构的音讯队列服务,相应的⼯具会从对应的 JQS 中获取到相应的信息,并把相应的信息展现给对应的商家。因为音讯源的音讯量是动态变化的,所以对音讯队列的集群解决能⼒需要也是动静的,所以 JQS 很好的满⾜了京⻨的诉求,依据实在⽤量付费。
案例⼆,是京喜报警平台,京喜是京东旗下以拼购业务为核⼼的社交电商平台。当平台服务有报警信息进⼊到音讯队列,会触发对应的业务线的报警解决的 FaaS 服务,依据 MQ 中的报警内容,做出相应的响应事 件,能够是发短信,发邮件,或者是打电话。同时针对固定的报警逻辑,能够执⾏诸如重启服务,清理数据等相干操作。
因为自身报警就不是常态,并且随着业务的减少,如果有⼀个常驻服务来解决报警业务,这样难免会照成资源节约,采⽤ FaaS 就能够很好的防止资源节约的状况,当有报警产⽣的时候,再运⾏相应的服务来解决报警。
以上两个是⽐较简略的京东在使⽤ Serverless 服务的场景,当然还有更多的简单场景也会使⽤到。就像上⾯所讲,Serverless 并⾮万能,不能满⾜所有场景的诉求,然而我还是仍然很看好它的将来。
Serverless 的挑战与将来
在将来的 Serverless 状态中,还是存在很多的挑战须要去解决:
- 新的 BaaS 服务,能够提供长期和长久的存储服务,这样就能够防止购买常驻的存储服务,从⽽升高相干费⽤的开销
- 在合乎 Serverless 理念的状况下,升高服务间的调⽤开销;对于⼀个线上的业务零碎⽽⾔,低提早是永远回避不了的话题,如何采⽤ Serverless 的状况下,⼜能满⾜业务需要是 serverless ⼤规模使⽤的前提
- 软硬联合,提供更⾼的解决性能;针对在 FaaS 平台上运⾏的特定语⾔代码,在硬件层⾯进⾏相干的非凡优化,从⽽实现代码运⾏减速,提⾼性能;
- Serverless 技术的采⽤升高 IT ⽀出老本;真正的让⼤家意识到 Serverless 的应⽤能够升高对 IT 的⽀出和投⼊;
- 采⽤ Serverless 能够更便捷、更疾速的实现性能;通过周边的⼯具,更⽅便的让⽤户使⽤ serverless 来构建业务零碎,真正实现业务的迭代和翻新速度
即便 Serverless 还是有那么多挑战待解决,我对 Serverless 的将来仍然充斥信息;⽬前在 CNCF 的 serverless 幅员⾥⾯有越来越多的 Serverless 服务加⼊了进来,置信随着云原⽣的衰亡,Serverless 能够搭上这个趟⾼速的列⻋,顺利起⻜。
我深信,Serverless 将来可期!
One More Thing
3 秒你能做什么?喝一口水,看一封邮件,还是 —— 部署一个残缺的 Serverless 利用?
复制链接至 PC 浏览器拜访:https://serverless.cloud.tenc…
3 秒极速部署,立刻体验史上最快的 Serverless HTTP 实战开发!
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢送拜访:Serverless 中文网,您能够在 最佳实际 里体验更多对于 Serverless 利用的开发!
举荐浏览:《Serverless 架构:从原理、设计到我的项目实战》