无服务器革命:好,坏和丑

“这是愚蠢的。 比愚蠢还糟:这是一场营销炒作。”
理查德·斯托曼Richard Stallman)对云计算的评论,2008年9月

而且,十年后,当有人提到这个词时,您开始三思而后行:是到天上掉的东西,还是到2020年预计将占全球83%的企业工作负载的那件事?

无论您是否喜欢,另一场革命正在进行中。 AWS处于领先地位,紧随其后的是MS Azure和GCP,它们都怀有一个共同的目标:

解除对基础软件的束缚。

无服务器。

FaaS。

DevOps的死亡。

随便你

无论名称如何(为方便起见,我们将野兽称为“无服务器”),这种新范例已经在重塑软件领域中发挥了作用。 我们已经看到像可口可乐这样的巨头在其生产堆栈中采用了无服务器组件, 而无服务器这样的框架则获得了数百万美元的资金。 但是,我们应该记住,无服务器并不适合每个人,任何地方,每次都适用-至少到目前为止还不是。

服务器(较少)=状态(较少)

作为常规程序员,我看到的无服务器最大的“障碍”是“无状态”。 早先我可以肯定的是,我将复杂的计算结果存储在内存中。 或我提取到/tmp的相当大的元数据文件; 或我刚刚产生的辅助子进程; 一旦我的程序恢复控制,仍然会在那里,无服务器几乎打破了所有这些假设。 尽管像lambda这样的实现往往会保留状态一段时间 ,但总的约定是,应用程序应该能够抛弃所有希望,并可以从零开始优雅地启动,以防被干净的表盘调用。 不再有内存中状态:如果要保存,则保存。 你不,你输。

从另一个角度考虑,这也可能被认为是无服务器的(意外)巨大优势之一。 因为瞬态(通过“服务器化”架构仅使存在成为可能)是大多数(即使不是全部)邪恶的根源。 现在,通过设计,您可以减少犯错误的空间-这可能是一个公平的权衡,尤其是对于像我这样臭名昭著的程序员而言,它们通过内存状态管理寻求(通常为时过早)优化。

但是,我们不应忘记由于内存中状态管理和缓存容量的减少而导致的性能损失; 您的状态管理器(数据存储)原先只有数个“电路跃点” ,现在却要相隔数个网络跃点,从而导致数毫秒(甚至数秒)的延迟,以及更多的故障空间。

次秒计费

如果您在过去的十年中还活着,那么您会看到它的来临:一切都逐渐变成按需付费的模式。 现在,它的长度已到了以0.1秒的执行间隔对lambda进行收费的程度,并且量化将继续进行。 对于持久负载而言,这可能并不意味着很多优势,有时甚至可能意味着劣势 ,但由于负载差异较大的应用程序不必始终准备并为其预期的峰值负载付费,因此可以获得巨大的优势。 更不用说具有稀疏负载配置文件的事件驱动和批处理系统,这些系统可能节省一个数量级,特别是当它们是小型的且在地理位置上受限时。

此外,新的按资源付费使用模型(考虑到时间(或者说执行时间),也是一种非常有价值的资源)鼓励了面向性能的编程,这确实是一个好兆头。 FaaS提供商通常使用复合计费指标,将执行时间与内存分配等相结合,进一步加强了均衡优化的动力,最终产生了更好的资源利用率,更少的浪费以及由此带来的财务和环境效益。

看不见的红外线

代替物理硬件,虚拟化(以后)或容器化(以后)操作系统环境,现在您只能看到一个过程:实际上是一个功能或工作单元。 乍一看听起来不错(不再进行基础设施/硬件/操作系统/支持实用程序的监视或维护-希望无服务器提供商会为我们提供帮助!),但这在灵活性方面也意味着巨大的挫折:即使在在容器的日子里,我们至少可以灵活地选择自己喜欢的基本操作系统(尽管仍绑定到底层内核),而现在我们所拥有的只是编程语言的选择(有时是其版本)。 但是,那些经历了devop头痛的人肯定会同意后者是一个非常合理的权衡。

加强隔离

由于您不再具有访问现实世界的权限(通常来说,这是一个短暂的容器化过程),因此出错的空间更少(不可避免的,因为实际上您可以做的事情更少!)。 即使您受到损害,您的短命和有限的特权也可以防止进一步的污染,除非该漏洞利用足够强大以至于影响基本的业务流程框架 。 随之而来的是,不幸的是,如果发现了这样的漏洞,则由于基于lambda的恶意软件主机将比以往具有更大的可伸缩性,因此可以被大量利用。

大多数提供商故意限制lambda尝试进行恶意活动,例如发送垃圾邮件 ,合法用户对此会不以为然,但遭到了垃圾邮件的困扰(想象每月有数百万lambda运行时数量激增,AWS已经提供了100万次免费调用, 320万秒的执行时间 -向一组用户发送垃圾邮件;十二个免费的AWS订阅将使攻击者获得巨大的优势!)

供应商锁定:有副作用吗?

这是每个云平台(或者如果您仔细考虑的话) 任何平台,实用程序或服务的固有问题。 一旦您决定利用平台的“酷”或“高级”功能,便可以有效地与之耦合。 对于无服务器平台而言,这比以往任何时候都更加真实:除了语言构造之外,几乎所有其他一切都是特定于提供程序的,并且尝试编写“通用”功能最终会以难以理解的复杂方式被大量黑客和重新发明的轮子所包围。 ,或者很可能什么都没有。

从某种意义上说,这是必不可少且不可避免的回报。 如果必须要特别,就必须要具体! 诸如Serverless之类的框架正在积极尝试解决这一问题,但是,按照一般的观点 ,通用解决方案仍然遥不可及。

拥有权利的同时也被赋予了重大的责任

鉴于无服务器应用程序的简单性,多功能性和可伸缩性,它们对于公司的IT基础设施而言可以成为宝贵的资产; 但是,如果设计,部署,管理和监控不当,则无论从架构复杂性还是在财务方面,事情都可能非常容易失控。 因此,知道如何驯服野兽比简单地学习野兽可以做什么更为重要。

祝您在无服务器的冒险中好运!

翻译自: https://www.javacodegeeks.com/2018/02/serverless-revolution-good-bad-ugly.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?

一、什么是频谱? 频谱的全称是频率谱密度。在对时域信号进行认识和研究的过程中非常不便,那我们该如何更直观地认识信号,更清楚地了解信号的特点呢? 利用傅里叶变换将时域信号变换到频域。 我们知道,在通信领域里傅…

Verilog HDL中模块参数传递的方法

文章目录前言一、参数传递二、参数传递方法1.方法一2.方法二3.方法三总结前言 “parameter”是Verilog HDL中的一个关键字,代表着参数型常量,即用parameter来定义一个标识符代表一个常量,这样可以提高程序的可读性与可维护性。 例如&#xf…

仔细看看_仔细看看,您会发现需要改进的地方

仔细看看我建议您做一个练习:明天早上返回工作时,浏览项目的源代码,并尝试寻找重构的机会。 即使老板没有要求也要这样做。 这样做是因为您想要一些激动人心的工作时间。 重构是改变已经可以正常工作的艺术 。 但是要进行重构,您…

Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别

文章目录前言一、单目运算符、双目运算符和三目运算符二、位运算符三、逻辑运算符四、缩减运算符五、总结前言 我们在学习和理解Verilog HDL中的一些运算符的意义时,可能会对一些运算符的使用产生混乱,因此本文整理了Verilog HDL中&与&&、|…

Verilog HDL中容易生成锁存器的两种情况

在Verilog HDL的程序设计中,有两种情况会生成锁存器。 第一种情况 在always块中使用if语句,但是没有else,这会导致当条件不成立时,没有其他语句可执行,使得被赋值的寄存器一直保持不变,”锁存“住。 第二…

Spring Security与Maven教程

1.简介 在这篇文章中,我们将演示如何针对非常特定的用例将Maven依赖项用于Spring Security。 我们使用的所有库的最新版本都可以在Maven Central上找到。 在项目中,了解Maven依赖项的工作方式和管理方式对于有效的构建周期非常重要,并且对于…

EbN0、SNR、0.1nmOSNR的区别与联系

文章目录前言一、SNR与EbN0二、0.1nmOSNR1、波长宽度与带宽的换算2、0.1nmOSNR2.1、单极化信号2.2、双极化信号总结前言 无论是无线通信、光通信或者可见光通信系统中,我们经常会遇到信噪比的概念,但大多数,我们用的都是信号与噪声功率比&am…

利用Verilog HDL实现序列检测器,附上仿真程序。

文章目录一、序列检测器二、状态转移图三、序列检测器Verilog HDL程序1、源程序2、测试平台程序四、仿真结果五、总结一、序列检测器 序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如:针对一个较长的比特流01001001001111010101…

在Java中使用Google的协议缓冲区

最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中,显然有与Java 7 , Java 8和Java 9密切相关的全新项目,例如第7章(“ Lamb…

不同阶QAM调制星座图中,符号能量的归一化计算原理

文章目录前言一、归一化能量计算原理二、Matlab中如何得到归一化能量符号总结前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是格雷编码的。在坐标系中,相邻符号之间的横纵坐…

4qam、16qam、64qam、256qam理论仿真曲线

本博文给出了4qam、16qam、64qam、256qam理论仿真曲线,画出了EbN0 vs BER的曲线图,可以作为大家学习的一个参考。 仿真结果: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Theoretical ber curves of different orde…

建立时间、保持时间与亚稳态

文章目录一、建立时间与保持时间二、亚稳态现象总结一、建立时间与保持时间 建立时间(set up time)是指在触发器的时钟信号上升沿到来以前,数据从不稳定到稳定所需要的时间,一般用TsuT_{su}Tsu​表示。 保持时间是指在触发器的时…

java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。

java ee空指针我们花了不到三年的时间才推出了下一个Java EE版本 。 今年4月16日, JCP EC对JSR 342进行了投票并获得批准。 这是一个成功的故事,因为在去年八月下旬的最后时刻撤消了拥有云就绪平台的最初想法。 作为EG的成员,撰写即将发布的功…

Java的原始字符串文字

似乎“ 原始字符串文字 ”即将出现在Java中。 JEP 326开始的(“原始字符串字面量”) 发行JDK-8196004 ,并宣布为“新JEP候选人” 3月2日的JEP和相关问题的人指出,“Java的仍然是一小群现代编程语言中的一个不为原始字符串提供语言…

Java可能使用UTF-8作为其默认字符集

由于基于Java的应用程序通常用于各种各样的操作系统和环境中,因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖:默认语言环境,默认字符集和默认时区》 ; 注释JDK默认数据 …

rest api_摆脱困境:向REST API添加验证

rest api我对此感到有些ham愧,但是直到昨天,我才知道我可以通过使用Valid和RequestBody批注将验证添加到REST API中。 这在Spring MVC 3.0中不起作用,由于某种原因,我没有注意到在Spring MVC 3.1中添加了对此功能的支持 。 我从不…

2020-08-07 光纤通信第二章知识点整理

目录 2.1 半导体激光器 2 2.1.1 激光原理的基础知识 2 2.1.2 激光激射条件 3 2.1.3 结构理论 4 2.1.4 典型分类 6 2.1.5 模式概念 7 2.1.6 基本性质 8 2.2 半导体发光二极管 10 2.2.1 工作原理 10 2.2.2 结构和分类 10 2.2.3 主要性质 10 2.3 光源的直接调制 11 2.3…

静态分析的教育方面

加入我们项目的新程序员经常会问我们是否具有自动格式化工具,以使Java代码看起来完全符合Qulice的期望。 (Quili是我们使用的静态分析器。)我总是回答说,拥有这样一个自动代码抛光器只会有害,不会帮助项目及其成员改进…

2020-08-14 光纤通信第三章知识点整理

目录 3.1 光接收机 2 3.1.1 光接收机的分类与性能指标 2 3.1.2 直接检测光接收机的构成及功能 2 3.2 光电检测器 3 3.2.1 PN结的光电效应 4 3.2.2 PIN光电二极管 4 3.2.3 雪崩光电二极管(APD) 6 3.3 放大电路及其噪声 7 3.3.1 噪声的数学处理 8 3.3.2 放…

2020-08-21 光纤通信第四章知识点整理

第四章 光纤通信系统 目录 4.1 模拟光纤通信 2 4.2 数字光纤通信系统和总体设计 3 4.2.1 数字光纤通信系统基本组成 3 4.2.2 数字光纤通信系统总体设计 4 4.3 数字光纤传输系统的性能指标 7 4.3.1 误码性能 7 4.3.2 抖动、漂移性能 8 4.3.3 可用性 8 4.4 光纤放大器及其在光纤通…