写点什么

论无服务器架构的特征

  • 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:004390

评论

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

【原理篇】Supabase关联查询:内联、外联及外键约束

张文平

外键 Function 关联查询 Supabase Postgrest

京东商品列表数据接口(JD.item_search)丨京东API接口

tbapi

京东API接口 京东商品数据接口 京东商品列表数据接口 关键词搜索京东商品接口 京东商品API接口

软件测试训练营|从原理到实战,四天带你轻松进阶Python

霍格沃兹测试开发学社

多功能矢量图编辑器:Boxy SVG最新激活版

胖墩儿不胖y

Mac软件 矢量图编辑器 矢量图编辑

实时数仓投放主备链路Diff测试工具落地实践

得物技术

AI 数据

玩转数据世界:跨工作空间的安全授权与高效查询

观测云

数据可视化 数据授权

用友BIP全球司库助力陕西建工控股集团打造世界一流司库体系

用友BIP

全球司库

【介绍篇】Supabase与Firebase的关系和区别

张文平

数据库 云服务 Baas Supabase firebase

软件测试/测试开发丨Python 列表

测试人

软件测试 测试开发

用友ICT行业供应链数智化解决方案

用友BIP

供应链 ICT 行业

Databend 开源周报第 126 期

Databend

Data

【鸿蒙千帆起】《开心消消乐》完成鸿蒙原生应用开发,创新多端联动用户体验

HarmonyOS开发者

HarmonyOS

CloudQuery的过去、现在和未来

BinTools图尔兹

CloudQuery

报名启动|OpenHarmony源码转换器—多线程特性转换赛题

OpenHarmony开发者

OpenHarmony

DAPP算力挖矿系统开发丨详情开发

l8l259l3365

逻辑回归算法是什么呢?

小齐写代码

自主研发国产堡垒机,助力企业信息安全可控

行云管家

网络安全 信息安全 堡垒机

京东店铺所有商品数据接口(JD.item_search_shop)丨京东API接口

tbapi

京东API接口 京东商品数据接口 京东店铺所有商品数据接口 京东店铺数据接口

干货|EasyMR 基于 Kubernetes 应用的监控实践

袋鼠云数栈

大数据 Kubernetes 云原生 可观测性 Promtheus

大数据平台Bug Bash大扫除最佳实践

京东科技开发者

开源协助平台工程灵活应对多云时代的挑战

SEAL安全

开源 运维 平台工程

面向Java应用网络流的非侵入可观测指标采集联合方案 – Sermant & Gopher

华为云开源

微服务 Java、 sermant

基于扁平化BOM的全业务应用领先实践,提升离散制造行业运营效率

用友BIP

智能制造

软件测试/测试开发|一文带你了解Python列表操作

霍格沃兹测试开发学社

开启安全功能 ES 集群就安全了吗?

极限实验室

console 集群

【原理篇】Supabase应用开发为什么要配置RLS

张文平

权限 PgSQL Supabase 访问权限 Postgrest

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