AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

分布式锁的实现方案

360技术

基于深度学习的两种信源信道联合编码

华为云开发者联盟

深度学习 通信 编码 信源编码 信道编码

推荐 2 款必备的 Django 开发神器

星安果

Python django Web 后端

如何正确使用Python临时文件

华为云开发者联盟

Python 安全 临时文件 tempfile 库函数

Golang号称最快的Json解析器速度可达5623ns/op

happlyfox

学习 3月日更 Go 语言

设计与思考,关于资源和生命周期

程序员架构进阶

设计实践 生命周期 28天写作 3月日更 池化技术

Gas费用持续攀升!NA公链NAC公链如何破解高额Gas费用的困局?

区块链第一资讯

Datadog 能成为最大的云监控厂商吗

睿象云

运维 运维平台 Datadog 云监控

NoCode 实战 | 零代码应用开发,轻松搞定任务跟踪管理难题(上)

亚马逊云科技 (Amazon Web Services)

【LeetCode】删除排序链表中的重复元素 IIJava题解

Albert

算法 LeetCode 3月日更

​Autonomous Dream Works的独创力杰作EGGNetwork EFTalk

币圈那点事

用 Redis 实现消息队列是一个好主意么?

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

看东鹏饮料如何从150亿条数据中洞察先机 | 精选案例

亚马逊云科技 (Amazon Web Services)

镜像仓库学习笔记

lenka

3月日更

区块链六大应用场景,推动政府信息化发展

13828808769

区块链+ #区块链#

亚马逊云科技和德甲为 2021 赛季新推出三项赛况统计数据,强化实时比赛分析

亚马逊云科技 (Amazon Web Services)

初识Golang之声明函数

Kylin

3月日更 21天挑战 Go 语言

异步机制和CPU架构对 Redis 性能的影响

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

Rust从0到1-基础概念-数据类型

rust 数据类型

华为云PB级数据库GaussDB(for Redis)揭秘第六期:Feed流场景中的应用

华为云开发者联盟

数据库 redis 华为云 GaussDB Feed流

主数据建设的挑战与发展

EAWorld

低代码是什么?低代码价值主要体现在哪?

优秀

低代码

通俗讲解分布式锁,看完不懂算我输

Java小咖秀

Java 分布式 多线程 并发

Python基础之:Python中的模块

程序那些事

Python Python3 程序那些事

QCon全球软件开发大会:推动创新,实现技术落地

博文视点Broadview

区块链BaaS应用平台搭建,助力企业运用区块链解决业务问题

13828808769

区块链 区块链+ 区块链发展 #区块链#

Worktile 前端工程化之路

PingCode研发中心

大前端

搞懂 ZooKeeper 集群的数据同步

HelloGitHub

Java zookeeper ZooKeeper原理

网络连接之协议栈

Kylin

协议栈 3月日更 21天挑战 网络连接

一段java代码执行旅程

华为云开发者联盟

JVM class 指令 java代码 java栈

智慧公安信息化管理系统,重点人员管控系统的搭建

13828808769

智慧交通

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