QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

论无服务器架构的特征

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

评论

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

json基础学习

ベ布小禅

4月日更

中国数字人民币试点有序扩大至“10+1” 拜登政府正加强研究数字人民币计划

CECBC

数字货币

一个极简的冲突管理工具

石云升

28天写作 职场经验 管理经验 4月日更 冲突管理

函数计算助力高德地图平稳支撑亿级流量高峰

阿里巴巴中间件

浅谈 MySQL 集群高可用架构

民工哥

MySQL MySQL 高可用 集群 linux运维

我常用的两个外国应用

彭宏豪95

产品 产品经理 工具 社交 Slack

金融科技数据链的DNA

博睿数据

金融科技 博睿数据 数据链DNA

学会这15点,让你分分钟拿下Redis数据库

民工哥

后端 linux运维 redis cluster

从被踢出局到5个30K+的offer,一路坎坷走来,沉下心,何尝不是前程万里

北游学Java

Java 数据库 分布式 微服务

Vue3、Vuex4、Ant Design2的实战项目开发管理系统

devpoint

vite Vue3 and design of vue

曾国藩:人生惟有常是第一美德

帅安技术

曾国藩 坚持 有常 天赋 成事心法

聊聊十种常见的软件架构模式

架构精进之路

4月日更

1分钟搞定 Nginx 版本的平滑升级与回滚

民工哥

nginx 后端 linux运维

专访中寰卫星导航项目管理部负责人卜钢:如何演绎人生之路

打工人!

采访 调查采访能力考核

你管这破玩意叫哨兵?

Java 数据库 redis 程序员 架构

阿里内部热捧“Spring全线笔记”,不止是全家桶,太完整了

Java架构追梦

Java spring 源码 架构 微服务

接口的幂等性怎么设计?

xcbeyond

设计 幂等性 4月日更

云原生技术及可观测实践

滴滴云

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java 编程 程序员 面试 计算机

使用JavaScript解析XML文件

空城机

JavaScript xml 大前端 递归 4月日更

mosquitto支持websocket搭建记录

风翱

4月日更 web socket mosquitto

区块链技术重新定义 物联网的物与物之间的交易

CECBC

发展空间

Coinbase上市,对加密市场将带来哪些影响?

CECBC

货币

函数计算助力语雀构建稳定且安全的业务架构

阿里巴巴中间件

文档 企业架构和云服务 业务架构

2年进入苏宁,第5年入职阿里,专科学历的他是如何做到?

Java架构师迁哥

智慧城市现状调研

程序员架构进阶

华为 智慧城市 28天写作 4月日更

隐私安全的城池营垒,能成为手机品牌高端化的赛点吗?

脑极体

云存储中不可不知的五个安全问题及应对措施

云计算

重读《重构2》- 改变函数声明

顿晓

重构 4月日更

怎么拥有个人磁力

帅安技术

IP 个人磁力 KOL 思想 吸引力法则

不愧是阿里内部“Spring Cloud Alibaba学习笔记”这细节讲解,神了!

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

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