写点什么

论无服务器架构的特征

  • 2019-08-22
  • 本文字数:1770 字

    阅读完需:约 6 分钟

论无服务器架构的特征

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-08-22 08:004428

评论

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

想提升查询性能?openLooKeng新下推框架助您一臂之力

LooK

架构实战营 - 模块三作业

Sun

存储优化补充篇:Explain索引优化实操

Coder的技术之路

高并发 高并发系统设计 项目实战 数据库调优 索引优化

看了小姐姐的Spring SPI 总结,双非渣硕的我差点跳起来,被征服了

牛哄哄的java大师

Java

网络攻防学习笔记 Day7

穿过生命散发芬芳

5月日更 网络攻防

Nginx-代理服务器

进击的梦清

nginx Docker Linux Docker-compose 代理

华仔架构训练营作业(模块三)

不听不听王八念晶

PHP文件包含小总结

Thrash

安全

中国式美好假期:用AI地图,抢先体验未来出行

脑极体

数据架构:数据冷热分离实践思考

程序员架构进阶

数据架构 架构设计 28天写作 5月日更 冷热分离

架构实战营 -- 模块三

永佳

架构实战营

Nginx 常用配置清单

Java小咖秀

nginx Web 反向代理 HTTP

模块1作业

圆心角

【得物技术】软件工程与PlantUML实战

得物技术

软件工程 UML PlantUML 实战 得物技术

程序员应如何打破平庸,杜绝淘汰,避免内卷!【强烈建议收藏!】

程序员 ios开发

基于 MySQL 的消息队列系统架构设计文档

小遵

惊呆了!阿里自爆2021年度九大Java技术合集,Github上已获赞98.3K

Java架构师迁哥

如何做好用户画像?

石云升

创业 用户模型 5月日更

基于OpenPAI细化部署 Hadoop 集群

Damon

hadoop 5月日更

第一个鸿蒙应用

释缘

鸿蒙 HarmonyOS

太好用了!斩获3个大厂Offer后,才发现学霸给的JVM笔记有多强大

飞飞JAva

Java

分解的三要素,从经典中感悟

顿晓

5月日更 分解

AI英雄出少年!奔赴星辰,他们正在创造黄金时代

百度大脑

AI

内卷

Jxin

求求你别再用 MySQL offset 和 limit 分页了

xcbeyond

MySQL 5月日更

私域流量这件事,古代就有了……

白洞计划

辞旧迎新岁岁新

Thomas

matlab

「技术人生」专题第1篇:什么是技术一号位?

阿里巴巴中间件

技术 程序人生 方法论 思维

架构实战营模块三作业

竹林七贤

技术探索系列 - 轻松带你掌握JMM(2)

码界西柚

JVM JMM 5月日更

新书见面 | 《云原生时代的微服务架构实践》

Damon

微服务 云原生 5月日更

论无服务器架构的特征_架构_Jan Stenberg_InfoQ精选文章