写点什么

2017 年会是 Serverless 爆发之年吗?

  • 2017-04-17
  • 本文字数:3337 字

    阅读完需:约 11 分钟

前言

中小型公司,尤其是互联网行业的创业公司,本身并没有太多的技术人员,如果设计系统时需要考虑诸多的技术问题,例如 Web 应用服务器如何配置、数据库如何配置、消息服务中间件如何搭建等等,那对于他们来说人员成本、系统成本会很高,Serverless 架构的出现,让这种情况可能可以大幅度改善。

初识 Serverless?

在目前主流云计算 IaaS(Infrastructure-as-a-Service,基础设施即服务)和 PaaS(Platform-as-a-Service,平台即服务)中,开发人员进行业务开发时,仍然需要关心很多和服务器相关的服务端开发工作,比如缓存、消息服务、Web 应用服务器、数据库,以及对服务器进行性能优化,还需要考虑存储和计算资源,考虑负载均衡和横向扩展能力,考虑服务器容灾稳定性等非专业逻辑的开发。这些服务器的运维和开发知识、经验极大地限制了开发者进行业务开发的效率。设想一下,如果开发者直接租用服务或者开发服务而无须关注如何在服务器中运行部署服务,是否可以极大地提升开发效率和产品质量?这种去服务器而直接使用服务的架构,我们称之为 Serverless 架构(无服务器架构)。

Serverless 架构的问世

2014 年,云厂商 AWS 推出了“无服务器”的范式服务。

其实,最初“无服务器”意在帮助开发者摆脱运行后端应用程序所需的服务器设备的设置和管理工作。这项技术的目标并不是为了实现真正意义上的“无服务器”,而是指由第三方供应商负责后端基础结构的维护,以服务的方式为开发者提供所需功能,例如数据库、消息,以及身份验证等。这种服务基础结构通常可以叫做后端即服务(Backend-as-a-Service,BaaS),或移动后端即服务(MobileBackend-as-a-service,MBaaS)。

现在,无服务器架构是指大量依赖第三方服务 (也叫做后端即服务,即“BaaS”) 或暂存容器中运行的自定义代码 (函数即服务,即“FaaS”) 的应用程序,函数是无服务器架构中抽象语言运行时的最小单位,在这种架构中,我们并不看重运行一个函数需要多少 CPU 或 RAM 或任何其他资源,而是更看重运行函数所需的时间,我们也只为这些函数的运行时间付费。无服务器架构中函数可以多种方式触发,如定期运行函数的定时器、HTTP 请求或某些相关服务中的某个事件。

Serverless 案例

以带有服务功能逻辑的传统面向客户端的三层应用为例(一个典型的电子商务应用网站)。一般来说包含客户端、服务端程序、数据库,服务端用 Java 开发完成,客户端用 JavaScript。
采用这种架构,服务端需要实现诸多系统逻辑,例如认证、页面导航、搜索、交易等都需要在服务端完成。如果采用 Serverless 架构来对该应用进行改造,则架构如图所示:

Serverless 架构相比于传统面向客户端的三层应用架构,有以下几方面的差异:

  1. 删除认证逻辑,用第三方 BaaS 服务替代;
  2. 使用另外一个 BaaS,允许客户端直接访问架构与第三方(例如 AWS Dynamo)上面的数句子库。通过这种方式提供给客户更安全的访问数据库模式;
  3. 前两点中包含着很重要的第三点,也就是以前运行在服务端的逻辑转移到客户端中,例如跟踪用户访问。客户端则慢慢转化为单页面应用。
  4. 计算敏感或者需要访问大量数据的功能,例如搜索这类应用,我们不需要运行一个专用服务,而是通过 FaaS 模块,通过 API Gateway 对 HTTP 访问提供响应。这样可以使得客户端和服务端都从同一个数据库中读取相关数据。由于原始服务使用 Java 开发,AWS Lambda(FaaS 提供者)支持 Java 功能,因此可以直接从服务端将代码移植到搜索功能,而不用重写代码。
  5. 最后,可以将其他功能用另外一个 FaaS 功能取代,因为安全原因放在服务端还不如在客户端重新实现,当然前端还是 API Gateway。

常见的 Serverless 框架介绍

2014 年 11 月 14 日,AWS 发布了 AWS Lambda。AWS Lambda 是市面上最早,也是最为成熟的 Serverless 框架之一。该服务最迟支持 Node.js,现在也支持 Java 和 Python。它与 Alexa Skills Kit(软件开发工具包)紧密集成,亚马逊提供交互式控制台和命令行工具,以便上传和管理代码片段。

Google 是为服务架构的最前沿公司,除了推动 Kubernetes,Google 还投资了 Cloud Functions,该架构可以在其公共云基础设施上运行。

Iron.io 最初是为企业级应用提供微服务。Iron.io 是用 Go 语言编写的,用于处理高并发、高性能计算服务,并已经集成 Docker 服务,提供一种完整的微服务平台。

  • IBM OpenWhisk

2016 年 2 月的 InterConnect 大会,IBM 发布了 OpenWhisk,这种事件驱动型开源计算平台可以用来替代 AWS Lambda。OpenWhisk 平台让广大开发人员能够迅速构建微服务,从而可以响应诸多事件,比如鼠标点击或收到来自传感器的数据,并执行代码。事件发生后,代码会自动执行。

  • Serverless Framework

Serverless Framework 是无服务器应用框架和生态系统,旨在简化开发和部署 AWS Lambda 应用程序的工作。Serverless Framework 作为 Node.js NPM 模块提供,填补了 AWS Lambda 存在的许多缺口。它提供了多个样本模板,可以迅速启动 AWS Lambda 开发。

  • Azure WebJobs

Azure Web 的应用功能,可以与 Web、API 应用相同的上下文中运行程序或脚本。可以上传并运行可执行文件,例如 cmd、bat、exe、psl 等等。WebJobs 提供 SDK 用于简化针对 Web 作业可以执行的常见任务,例如图像处理、队列处理、RSS 聚合、文件维护,以及发送电子邮件等等。

Serverless 架构原则

  • 按需使用计算服务执行代码

Serverless 架构是 SOA 概念的自然延伸。在 Serverless 架构中,所有自定义代码作为孤立的、独立的、细粒度的函数来编写和执行,这些函数在 AWS Lambda 之类的无状态计算服务中运行。开发人员可以编写函数,执行常见的任务。在比较复杂的情况下,开发人员可以构建更复杂的管道,编排多个函数调用。

  • 编写单一用途的无状态函数

    单单负责处理某一项任务的函数很容易测试,并稳定运行。通过以一种松散编排的方式将函数和服务组合起来,能够构建易于理解、易于管理的复杂后端系统。
    为 lambda 等计算服务编写的代码应该以无状态方式进行构建,这样会让无状态功能很强大,让平台得以迅速扩展,处理数量不断变化的请求或者事件。

  • 设计基于推送的、事件驱动的管道

    可以构建满足任何用途的服务器架构。系统可以一开始就构建成无服务器,也可以逐步设计现有的单体型应用程序,以便充分发挥这种架构的优势。最灵活、最强大的无服务器设计是事件驱动型的。

    构建事件驱动的、基于推送的系统常常有利于降低成本和系统复杂性,但是要注意,并不是任何情况下都是适当的或者容易实现的。

  • 创建更强大的前端

    由于 Lambda 的定价基于请求数量、执行时间段以及分配的内存量,所以代码执行需要越快越好。数据签名的令牌让前端可以与不同的服务直接通信。相比之下,传统系统中所有通信经由后端服务器来实现。让前端与服务进行通信有助于减少创建环节、尽快获得所需的资源。

  • 与第三方服务集成

    如果第三方服务能提供价值,并减少自定义代码,那么自然它们就很有价值。开发人员可以通过引入第三方服务来减少自己实现各种业务逻辑的需要,可以减少小型公司的开发成本,避免价格、性能、可用性等要素上的劣势。

未来趋势

随着移动和物联网应用蓬勃发展,伴随着面向服务架构(SOA)以及微服务架构(MSA)的盛行,造就了 Serverless 架构平台的迅猛发展。在 Serverless 架构中,开发者无须考虑服务器的问题,计算资源作为服务而不是服务器的概念出现,这样开发者只需要关注面向客户的客户端业务程序开发,后台服务由第三方服务公司完全或者部分提供,开发者调用相关的服务即可。Serverless 是一种构建和管理基于微服务架构的完整流程,允许我们在服务部署级别而不是服务器部署级别来管理应用部署,甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地交付软件。

这种新兴的云计算服务交付模式为开发人员和管理人员带了很多好处。它提供了合适的灵活性和控制性级别,因而在 IaaS 和 PaaS 之间找到了一条中间道路。由于服务器端几乎没有什么要管理的,Serverless 架构正在彻底改变软件开发和部署流程,比如推动了 NoOps 模式的发展。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-04-17 19:0013294
用户头像

发布了 50 篇内容, 共 29.0 次阅读, 收获喜欢 40 次。

关注

评论

发布
暂无评论
发现更多内容

go高并发之路——本地缓存

EquatorCoco

Go 缓存 开发语言

VMware Aria Operations for Networks 6.13 发布,新增功能概览

sysin

vmware aria

Web3 游戏周报(10.20 - 10.26)

Footprint Analytics

链游

图解:什么是多租户?

快乐非自愿限量之名

服务器 多租户

精彩回顾|2024 ACDU 中国行·上海站成功举办!

墨天轮

数据库 sql 国产数据库 KaiwuDB

SQL Server 可观测最佳实践

观测云

SQL Server

VMware ESXi 8.0U3 Huawei (华为) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

sysin

华为 huawei esxi OEM unlocker

生成对抗网络GAN简介

天翼云开发者社区

网络 GAN

枫清科技仲光庆:AI+行业新范式,双轮驱动助力数智化升级

Fabarta

#人工智能 #大模型

软件测试学习笔记丨selenium处理下拉框

测试人

软件测试

望繁信科技出席2022浦东国际人才港论坛,获颁最具潜力的海归创业团队大奖

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能 望繁信科技

私有云容灾方案设计浅谈

天翼云开发者社区

云计算 私有云

一文彻底弄懂MySQL优化之深度分页

不在线第一只蜗牛

MySQL 数据库

天谋科技成为先进操作系统创新联盟智能制造协同创新实验室成员单位,出席揭牌仪式

Apache IoTDB

合合信息发布智能文档处理“百宝箱”,助力文档应用开发

合合技术团队

App 科技 合合信息 文档解析

软件测试学习笔记丨Selenium复用cookie

测试人

软件测试

云智慧透视宝:率先适配华为原生鸿蒙的APM,为用户体验保驾护航

云智慧AIOps社区

APM 应用性能管理 应用性能监控

精准操控,稳如磐石:飞控+综控系统仿真揭秘

DevOps和数字孪生

飞管飞控

人工智能 | 智谱 AI 大模型

测吧(北京)科技有限公司

测试

HyperWorks的模型简化

智造软件

软件 教程 Hypermesh

一块显卡理解一部完整电影!智源联合多所高校推出小时级的超长视频理解大模型Video-XL

智源研究院

有哪些推荐的8款TODO团队协作工具可以提升工作效率?

爱吃小舅的鱼

TODO 团队协作工具 todo软件

华为云开源引领,KubeEdge晋级CNCF毕业项目

华为云开发者联盟

云原生 边缘计算 cncf kubeedge

SD-WAN 跨国专线的应用场景

Ogcloud

SD-WAN SD-WAN组网 跨国组网 SD-WAN国际专线 国际网络专线

Python实现微博舆情分析的设计与实现

快乐非自愿限量之名

Python

提升前端开发效率的五种实用技术

天翼云开发者社区

前端开发

淘宝商品评论API返回值中的物流与评价关联分析

技术冰糖葫芦

API 接口 API 测试 API】 API 协议

实时分析,快速迭代 —— 商品信息监控助力商家持续优化产品

技术冰糖葫芦

API 接口 API 测试 API 协议

颠覆性创新,低成本一天内快速上线体育赛事直播平台!

软件开发-梦幻运营部

详解MES系统的生产过程实时监控与异常处理

万界星空科技

生产管理系统 mes 制造业数字化 万界星空科技mes 生产过程管理

AI PC“加菜”了,双十一最值得关注的10款酷睿Ultra 200V AI PC

E科讯

2017年会是Serverless爆发之年吗?_语言 & 开发_麦克周_InfoQ精选文章