写点什么

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:0013617
用户头像

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

关注

评论

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

Zenlayer 推出 AI 模型全球调用解决方案,破局企业部署三大挑战

极客天地

国资委深化“AI+”专项行动 AI法务工具AlphaGPT赋能业务升级

科技汇

科学智能:全球顶尖学者共聚复旦,共探科研范式变革新引擎

ModelWhale

科学智能 AI4S

区块链 RWA 系统的上线

北京木奇移动技术有限公司

咕泡AI课程专家团全拆解 | 技术答疑助你全周期通关!

咕泡科技

人工智能 AI 咕泡人工智能 咕泡ai

领跑 AI 基础设施存储赛道!焱融科技实力登榜「AI Cloud 100 China」

焱融科技

文件存储 大模型 AI基础设施 2025 AI Cloud 100 China

WebGL 软件外包开发流程

北京木奇移动技术有限公司

区块链开发 软件外包公司 RWA开发

多端一体化教育解决方案

微擎应用市场

三方系统集成(低代码)平台实践

vivo互联网技术

Java 架构 后端 低代码

7月1日19点,ModelWhale 大模型应用平台全新升级!

ModelWhale

大模型 modelwhale

建筑矿山设备工厂与 MyEMS 能源管理系统深度应用白皮书

开源能源管理系统

开源 能源管理 节能减排 工厂安全生产

如何使用龙蜥衍生版KOS,2步实现大模型训练环境部署

OpenAnolis小助手

AI 操作系统 龙蜥大讲堂

区块链 Web3 项目的上线

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

模块化电商解决方案

微擎应用市场

大模型成今年高考志愿神器,超千万用户使用百度AI志愿助手、高考大数据服务

科技大数据

Cursor 如何保障「代码索引」的安全、高效

Baihai IDP

程序员 AI 智能体 cursor AI 编程

香港校长团探访博大数据前海智算中心,科技赋能教育共育湾区数字人才

极客天地

网易云信 x Doris:降本70%、提速11倍, 统一 ES/InfluxDB/Hive 多技术栈的落地实践

SelectDB

数据库 App ES Doris 网易云信

私有化部署 IM:即时通讯软件助力团队协作

BeeWorks

即时通讯 IM 私有化部署

鸿蒙+星闪:一场“1+1>2”的音频蝶变

脑极体

AI

MES与ERP深度融合:数据报表、可视化大屏及系统集成技术详解

万界星空科技

制造业 mes ERP系统 万界星空科技mes AI低代码MES

多行业线下服务订单数字化解决方案

微擎应用市场

CST软件如何设置分布式计算(Distributed Computing)的 TCP-IP子网

思茂信息

cst操作 CST软件 CST Studio Suite

20~30K * 15薪,可惜挂了

王中阳Go

Java 面试

观测云产品更新 | 外部数据源、日志、监控、事件、基础设施等

观测云

卓正医疗如何用 NocoBase 搭建“家庭医生式”服务体系?

NocoBase

开源 低代码 数字化转型 零代码 医疗行业

龙蜥衍生技术助力清华登顶TPC物联网数据性能榜首 | 干货推荐

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥操作系统 tpc

拼多多店铺订单列表,订单详情,订单物流接口指南

tbapi

拼多多API 拼多多店铺接口 拼多多店铺订单接口 拼多多店铺订单详情接口

Java程序员的职业加速器:飞算JavaAI一键生成完整工程代码,轻松应对开发挑战

猫头虎

Java 人工智能 AI编程 idea intellij

MyEMS开源能源管理系统v5.6.0发布通知

开源能源管理系统

开源 能源管理 开源能源管理

多行业活动管理

微擎应用市场

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