抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

无服务器架构在混合环境下的挑战

2017 年 12 月 06 日

Sam Newman 是一位独立咨询顾问,也是《 Building Microservices 》这本书的作者。他在伦敦举行的Velocity 大会上发表演讲,讨论了关于在一些同时依赖无服务器架构和传统基础设施的混合系统中所面临的挑战。尤其是,Newman 重点讨论了无服务器架构如何改变了我们关于系统弹性的概念,以及两个体系同时存在于一个高负荷系统内会发生怎样的冲突。

系统弹性在传统服务系统中依赖于状态来控制(例如,在任何时间点用数据库连接池,来及时调节和控制访问数据库的请求数量)。在这种系统中,系统稳定性通过控制输入负载并把这些负载均衡到多个系统实例中来维持。但是,在短暂的函数(lambdas)中没有地方来存储这些控制状态,因此在函数随着负载自动扩展与后端数据库扩展之间需要一个平衡机制。

自动扩展的云数据库,例如亚马逊的DynamoDB 或者谷歌的Bigtable ,很适合无服务器架构。但是Newman 指出,大多数系统依赖传统数据库,因此简单地在一个遗留的系统中嫁接无服务器函数可能会导致严重的后果。Newman 强调,即便是作为无服务器架构典范之一的 Bustle 也面临过许多前所未有的挑战。尽管他们特意给任意一个 Redis 节点设置了一个 1000 lambda 连接数的限制(可以处理 10 倍那个数量的连接),但是他们仍然发现一些失效的节点,因为据传闻说,lambda 函数似乎在连接停止后也会保持连接存活长达 3 分钟。Bustle 的工程师不得不深入研究 Redis 内部工作机制来修复这个问题(强制这些僵尸连接更快地超时)。Newman 说,这也突出了无服务器架构系统与非无服务器架构系统在处理负载和系统弹性的方式上的不协调。

Newman 提到的另一个挑战是,通常被用在微服务中来处理失败的下游服务,能够有效降低负载从而让整个系统更具弹性的断路器(circuit breakers),是依赖于维护跨多个请求的状态来实现的。例如,一旦下游服务恢复稳定,断路器就能够自我关闭。

Newman 讲到,服务网格(service meshes),例如 Istio 或者 Linkerd ,也许能够帮助解决这些问题。它们可以作为持久化的状态代理,而这些状态能够协调微服务函数间的负载。

最后,从安全角度来看,函数是运行在容器中的,因此很容易受到攻击,因为一个容器可以侵入到另一个运行在同一台主机上的容器。但是,如果函数运行所在的容器存活的时间很短,这种攻击就会变得很困难,因为不能在函数结束后进行攻击。诸如 Guy Podjarny 等安全专家警告说,无论如何,无服务器架构都将安全隐患转移到了应用层级别,并且如果没有正确的安全措施,一长串的函数链调用很可能会受到攻击

Newman 也提到了许多人在选择一家 FaaS(Function-as-a-Service)供应商时所关心的问题,而这些问题也涵盖在最新的InfoQ eMag 中。将讨论内容从如何锁定一家供应商,转变为理解(以及接受)每个FaaS 实现在提高运行速度(负载越少速度越快)和迁移成本(跨FaaS 供应商的工具集越相似,成本就越少)之间的权衡,是解决这个问题的关键。

查看英文原文: Serverless Challenges in Hybrid Environments


感谢罗远航对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 12 月 06 日 18:00788

评论

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

架构实战营5 作业

梦寻解语花

架构实战营

JVM之内存管理

邱学喆

JVM 内存管理 垃圾回收算法 垃圾回收器

模块5-”微博评论“的高性能高可用计算架构

小遵

模块五:课后作业

黄嘉治

模块5作业 微博评论高性能高可用计算架构

TH

架构实战营

【Vue2.x 源码学习】第六篇 - 数据代理的实现

Brave

源码 vue2 6月日更

架构模块5作业

高亮

架构训练营

【Flutter 专题】110 页面间小跳转 (四)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6 月日更

Pandas之:Pandas高级教程以铁达尼号真实数据为例

程序那些事

Python 大数据 数据分析 pandas

架构实战营模块五作业

冷大大

作业 架构实战营 模块五

架构实战营 模块五课后作业

iProcess

架构实战营

设计微博系统中”微博评论“的高性能高可用计算架构

小荷才露尖尖角

#架构实战营

前端vue在可视化大屏领域的工作实践

孙叫兽

Vue 可视化 eCharts 可视化地图

架构实战营模块5

阿体

”微博评论“的高性能高可用计算架构

thewangzl

用C语言实现interface

实力程序员

从水晶宫到甲秀楼:在数博会读懂智慧城市的“大工业时代”

脑极体

模块五-微博评论高性能高可用计算架构

华仔架构训练营

模块5作业

大肚皮狒狒

模块5 学习总结

TH

架构实战营

给你一台服务器,你能把你写的代码部署到线上吗?

小傅哥

小傅哥 ssl 云部署搭建 博客配置 安装宝塔

如何画好架构图 (建议收藏)

悟空聊架构

流程图 架构图 6 月日更 processon 原理图

【LeetCode】目标和Java题解

HQ数字卡

算法 LeetCode 6月日更

(技术型)产品经理打怪升级之路

菜根老谭

产品经理 职业转型

模块五:课后作业

菲尼克斯

架构实战营

windows安装minikube的正确姿势

Daniel

Docker k8s minikube 6月日更 6 月日更

Proxy 对象简介

编程三昧

JavaScript 前端 ES6 Proxy

作业

CR

react源码解析7.Fiber架构

全栈潇晨

react.js react源码

花费3680元买了一个慕课网的Java就业班课程,里面竟然有自己写的开源项目!

十三

Java 开源 知识产权 springboot 开源项目

架构实战营 模块五作业

Dylan

架构实战营

Study Go: From Zero to Hero

Study Go: From Zero to Hero

无服务器架构在混合环境下的挑战-InfoQ