2020 Google开发者大会重磅开幕 了解详情

论无服务器架构的特征

2019 年 8 月 22 日

论无服务器架构的特征

Wisen Tanasa 在最近的博文当中提到,在目前关于无服务器架构的文献当中,有相当一部分由云服务供应商提供赞助,因此在内容上存在单纯强调优势的倾向。但 Tanasa 认为,每当有新的技术出现时,最重要的是全面了解其意义,因此我们应该从客观角度出发探讨无服务器架构的特性。


作为 Thoughtworks 首席开发者,Tanasa 表示他更倾向于使用“特质(trait)”、而非特性,因为他认为这些属于无服务器架构的固有元素,我们无法像处理其它可塑特性那样做出调整。特质是天然存在的,所以我们必须接受,而非与其针锋相对。


无服务器架构拥有较低的入门门槛;大家能够遵循教程轻松了解如何上手。但 Tanasa 指出,虽然开发人员面对的初步学习曲线比较平缓,但随着项目变得更为复杂,曲线也会迅速呈现出陡峭的态势。在无服务器的世界中,代码、日志记录以及监控等基础设施仍然必不可少。此外,他还注意到开发人员在面对无服务器架构时往往有忽略代码设计的倾向——很多人认为自己只是在直接使用函数。他强调称,对于最重要的构建原则,我们在无服务器世界中同样不应忽视。无论是SOLID这类设计概念,还是持续交付原则,都将在无服务器领域继续发挥重要作用。


在无服务器的世界里,不存在主机的概念——我们完全不需要面对任何服务器。由此带来的一大优势,在于显著减少了运营开销——不需要升级服务器、也不必考虑应用程序所必需的安全补丁。但与此同时,这也意味着我们需要对应用程序中的不同度量标准进行监控,换言之我们必须重新学习如何调整整个架构。Tanasa 强调称,尽管能够自动添加安全补丁,但应用程序安全实践在无服务器环境仍然适用。一个典型的例子就是不要在代码当中存储密码,这实际上跟无不无服务器没有关系。


函数即服务(FaaS)具有临时性,这意味着无服务器本身是无状态的。由于状态不会被存储在应用程序当中,因此横向扩展就变得非常简单——只需要直接启动更多实例即可。另外,无状态也意味着发生错误的空间大大减少。但是,无状态也意味着我们无法利用众多有状态技术进行应用程序开发;例如,我们将无法使用 HTTP 会话。


再有,无主机也意味着架构本身具有弹性。换言之,我们不必手动管理资源,资源分配方面的很多原有难题也将随之消失。一般来讲,这还意味着我们只需要为实际使用的资源付费。但在与遗留系统相集成时,这种弹性也有可能带来新的挑战。Tanasa 指出,除非传统系统能够像无服务器组件那样轻松扩展,否则我们必须限制负载以防止其因过载而发生故障。


在默认情况下,无服务器架构当中包含大量通过网络进行分布式集成的组件。持久性由后端即服务(BaaS)负责实现,代码则以多项函数的形式运行,其它服务用于实现身份验证与队列等功能。分布式特质也为架构带来了高可用性。如果当前可用区存在问题,则架构可以使用另一可用区。不过分布式应用程序在一致性方面需要做出权衡,最典型的两种选项就是写入后读取以及最终一致性;我们在更新以及读取数据时,必须考虑到这些具体情况。


由于利用 BaaS 支持事件,因此无服务器架构还具有事件驱动特质。Tanasa 指出,这并不是说开发者必须完全接受事件驱动型架构,但事件驱动确实能够带来诸多优势。举例来说,事件驱动能够显著降低各组件之间的耦合水平。但这同时也会带来无法建立系统整体视图的风险,并提高排除系统故障的难度。


Tanasa 最后指出,无服务器架构带来了一种有趣的范式转变。其改进了软件开发当中的诸多方法,同时也引入了一系列需要由开发人员以及团队加以适应的全新挑战。


在另外两篇博文中,来自 Symphonia 公司的 Mike Roberts 描述了他对于无服务器的定义。在他看来,无服务器应用程序是一类利用无服务器服务实现的应用程序,且此类服务必须具有以下五点共通特质:


  • 不需要管理服务器主机或者服务器进程。

  • 根据负载进行自动规模伸缩与自动配置。

  • 根据使用情况决定实际成本。

  • 性能容量以不同于主机规模或数量的其它术语进行定义。

  • 具备隐含的高可用性。


Jonas Bonér 在今年早些时候的一篇博文中也提到,虽然他力挺无服务器这波浪潮,但编程模型不应只关注无状态函数,因为这同时也会严重限制所能支持的用例类型。


另外,在 2017 年的一篇博文中,Martin Fowler 提到了事件通知的风险,并指出虽然事件通知模式非常实用,但也增加了大规模流量长期处于监控之外的风险


原文链接:


https://www.infoq.com/news/2019/08/traits-serverless-architecture/


2019 年 8 月 22 日 08:00 3708

评论

发布
暂无评论
  • 使用 GitOps 在无服务器时代构建现代化 CI/CD 管道

    近年来,构建和发布软件的方式发生了重大转变。这主要围绕着微服务,将代码分解成小组件,使用基础设施即代码,并使用Git作为将所有代码粘合在一起的唯一真相来源。在本文中,我将讨论现代软件开发的转变和不同步骤,以展示无服务器领域的可能解决方案。此外,我列出了为这个时代而设计的有用的工具。无服务器时代带来了许多转变,但这并不意味着我们过去遇到的安全、日志记录等问题已经消失,你应该继续解决这些问题,并利用工具使你能够专注于你的业务。

  • Serverless:我还是一个大孩子

    无服务器计算在这里,并将继续存在。我们将看到无服务器服务越来越接近这里描述的理想化的情景。但是,虽然Serverless已经成熟了,但我们还有一段路要走。为了真正实现无服务器计算的理想,我们需要审慎地重新思考当前的计算和安全模型。虽然挑战是巨大的,但回报更大,因此我们可能比我们想象的更快实现这个理想。

  • 使用 GitOps 在无服务器时代构建现代 CI/CD 管道

    本文是 Datree.io 首席技术官兼联合创始人、AWS 社区精英 Shimon Tolts 所写的一篇客座文章。

  • 谷歌的大数据路:谷歌的“黑科技”

    在大数据的上半场,谷歌虽因决策失误丧失了先发优势,但在下半场,谷歌携带着“黑科技”Spanner数据库系统闪亮登场。

    2018 年 3 月 19 日

  • 为“无服务器”正名

    本文讨论“无服务器”的缺点和优点,并为其改变构建应用程序的方式带来的好处进行辩护——进一步向无服务器架构发展。

  • 异构系统跨语言服务化初探

    从单体应用到 RPC 服务化、容器化,到后期的混合云应用以及跨语言支持,再到目前的 WeiboMesh,Motan RPC 在其中扮演了至关重要的角色。

    2018 年 3 月 19 日

  • Autodesk 无服务器微服务架构样例

    在题为“什么比微服务更好?无服务器微服务”的网络直播中,Alan Williams(Autodesk)、Asha Chakrabarty(Amazon)和Alan Ho(Apigee)讨论了一个无服务器微服务的架构。其中,该微服务的构建使用了AWS lambda函数和运行在AWS上的Apigee端点。

    架构
  • 分布式系统关键技术:服务调度

    微服务是服务依赖最优解的上限,而服务依赖的下限是千万不要有依赖环。

    2017 年 12 月 26 日

  • 基于 DDD、CQRS、微服务和事件溯源构建系统

    对于构建系统来说,模块化是至关重要的,但实现模块化需要应对一些反模块化的做法。

  • 构建可伸缩的有状态服务

    来自Twitter的分布式系统工程师,Caitie McCaffrey,在Strange Loop会议上讨论了有状态服务的优点,以及如何扩展它们,有状态的服务相比于无状态的服务,在业界大家知道的要少的多。其中优点包括数据定位、高可用、强并发模式。McCaffrey还给出了有状态的实际案例。

  • 深入浅出云原生架构(一):架构演进与成熟

    本文讨论了在推行云原生架构时,组织在云上托管应用程序的过程中应评估哪些因素。

  • 产品图鉴:哪些分布式数据库值得看?

    今天这一讲,我会把视角切换到产品方向,为你做一次整体介绍。所以,你也可以将这一讲当作一个产品版的课程索引。

    2020 年 10 月 16 日

  • 大咖对话 | 刘俊强:谈谈我对 2019 年云计算趋势的看法

    2019年云计算服务市场依旧会强劲增⻓,并且云服务将对企业的协作和工作模式产生更深远的影响。

    2019 年 3 月 22 日

  • 无服务器架构 1/3

    无服务器是软件架构世界中的热门话题。在这一领域我们已经看到很多书籍、开源框架、大量不同类型的供应商和产品,甚至专门的会议活动。但无服务器到底是什么,为什么值得(或不值得)考虑该技术?希望本文能为你提供一些启发。这是系列文章的第一篇,主要将介绍无服务器架构的概念。

  • 架构设计三原则

    从今天开始,我会分两期讲讲架构设计的3个原则,以及架构设计原则的案例。

    2018 年 5 月 15 日

  • 天天都在说,无服务器计算到底是什么?

    这个天天被说来说去的东西到底是什么?

  • 微服务和 Serverless 的天作之合

    Serverless 或者说 FaaS 最开始只是 AWS 推出的一个功能,但现在业界已经有人将其看作微服务的进化,因为其内含的 Function 可以视为更小的、原子化的服务,天然地契合微服务的一些理念。微服务和 Serverless,是天作之合吗?

  • 无服务器运维依然是未解难题

    自Serverlessconf London 2016活动第一天起,人们就开始关注一个新兴的话题:“NoOps”无服务器平台为运维工作造成的前所未有的挑战。物理服务器和虚拟机可以进行抽象,但这并不意味着可以彻底省略基础架构配置工作,开发者往往会忽略底层持久机制所蕴含的巨大风险。

    DevOps
  • Mike Roberts: 什么是无服务器架构?

    无服务器架构是最近一个比较热的话题。我们也看到有很多的书籍、开源框架和大量的产品在不断涌现,在一些技术大会上也有专门的主题。6月17日,Mike Robers在Martin Fowler的博客网站上发布了一篇题为“无服务器架构”的文章,引起了业界的诸多关注。在该文章中,他认为无服务器是后端即服务(BaaS)和函数即服务(FaaS)的结合,并以AWS Lambda产品为例探讨了FaaS的特点、什么不是无服务器及需要考虑的其他相关问题。

发现更多内容

MobTech袤博与百度战略签约 携手布局数据智能产业新蓝图

Geek_116789

女员工被阿里录取工资二万六,辞职时被领导挽留:给你4万留下

程序员生活志

阿里 女程序员

三大 OSS 缓存加速系统巅峰对决

苏锐

hadoop cache JuiceFS JindoFS Performance

讲烂了的mysql,今天再给大家重温一下

爱嘤嘤嘤斯坦

Java MySQL 数据库 编程 mysql事务

第6周-作业2-总结

seng man

计算机网络基础(一)---计算机网络概览篇

书旅

php laravel 计算机网络

在前端如何玩转 Word 文档

阿宝哥

html markdown word

如何把百万级别的订单根据金额排序

码哥字节

数据结构 排序算法

Worktile完成新一轮融资,将发力研发管理赛道

Worktile

融资

人人都需要一份自己的「使用说明书」

非著名程序员

程序员 程序人生 提升认知 独立思考 自我思考

推荐系统大规模特征工程与FEDB的Spark基于LLVM优化

范式AI云

spark Sparksql 推荐系统 LLVM FEDB

为什么单元测试不是持续交付的唯一答案

持续集成 单元测试

微信小程序使用GoEasy实现websocket实时通讯

GoEasy消息推送

小程序 websocket 即时通讯

第6周-作业1

seng man

阿里拍卖,能不能拍到点儿上?

ToB行业头条

啃碎并发(10):内存模型之内部原理

猿灯塔

吴恩达推荐笔记:22张图总结深度学习全部知识

程序员生活志

深度学习 学习笔记 吴恩达

IDC2020 Q1通用服务器数据发布,浪潮信息成绩喜人

Geek_116789

为什么我们需要制品管理?

Man

DevOps nexus 制品库管理 Artifactory

抢滩新基建,百度还会输给阿里和腾讯吗?

ToB行业头条

我在项目中是这样配置Vue的

前端有的玩

JavaScript Vue 前端 框架设计

腾讯的ToB梦想

ToB行业头条

设计模式六大原则

刘志刚

设计原则

《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料

小傅哥

Java 设计模式 小傅哥 重构 代码质量

CAP原理简述

刘志刚

laravel redis队列不执行

kaer

laravel redis Queue

话题讨论|在编程中,有哪些好习惯是应该一直坚持下去的?

InfoQ写作平台

写作平台 话题讨论 话题

自动化测试首先是一种工作文化

wangwei1237

自动化测试 测试文化

2020,是中国SaaS行业的机遇之年?

ToB行业头条

​中国SaaS处在什么阶段?

ToB行业头条

Spring5-Reactor函数式编程

小技术君

spring reactor Spring5 springboot

2020中国技术力量年度榜单盛典

2020中国技术力量年度榜单盛典

论无服务器架构的特征-InfoQ