一、介绍

是指依赖于第三方应用程序或服务来管理服务器端逻辑的应用程序。 此类应用程序是基于云的数据库(如Google Firebase)或身份验证服务。

无服务器也意味着开发为事件触发的代码,并且在无状态计算容器中执行。 这种架构通常称为功能即服务(FaaS)。

FaaS(Function as a service 函数作为一种服务) 本质上是一个小程序或函数,它执行由事件触发的小任务,而不像单个应用程序那样做很多事情。因此,在FaaS架构中,我们将应用程序分解为小型,自包含的程序或功能,而不是在PaaS上运行并执行多种功能的单一应用程序。例如,API中的每个端点都可以是一个单独的函数,我们可以按需运行这些函数,而不是全时运行应用程序。

二、Serverless的主要优点

开发者只需要专注于业务逻辑就可以了,开发效率更高。开发一个典型的服务器端项目,需要花很多时间处理依赖、线程、日志、发布和使用服务、部署及维护等相关的工作,基于Serverless架构则不需要操心这些工作。
不需要关注云主机、操作系统、网络等基础资源,Serverless框架还可以根据负载量自动水平扩展。
不需要架构。Serverless架构本身就是高可用、高扩展的架构,基本上不需要架构师的参与。
按需付费, 成本相对比较低。用户购买的ECS使用时间一般不到5成,但是为另外5成闲置时间付费了。Lambda按照运行的时间收费,成本会低很多。

三、Serverless的主要缺点

不适合处理复杂的业务逻辑,它更适合调用云上的其他服务,粘合关键的产品。以AWS Lambda例,我们通常使用Lambda写一段逻辑将文件上传到S3,将请求的数据写入到DynamoDB或RDS数据库等一些相对简单的功能。
排查问题困难,因为逻辑散落在各处。
Serverless无法用于高并发应用,为每个请求启动一个进程开销太高,流量瞬间爆发容易导致超时。例如双十一支付宝高峰期每秒处理的交易数为8.59万笔,如果使用Serverless架构,意味着我们的系统内每秒有8.59万个进程被创建又被销毁,这是难以负担的开销。
Serverless调用之间不能共享状态让编写复杂程序变得极度困难。无状态是互连网应用追求的目标,例如满足“12要素”的应用。但Serverless将无状态进行的更加彻底,在不同的调用之间无法共享内存状态,例如使用hashmap。我们的AI应用中统计已处理图片总数的全局计数器在传统架构中只是一个全局变量,但在Serverless架构中它变成存储在内存数据库(Redis)中的一条记录,更新成本、保证原子性等因素让我们的编码变得数倍复杂。对于大多云原生的互联网应用来说,这种彻底的无状态架构是一个巨大的挑战,而对于动辄有几十万、上百万行代码的、充满了状态的企业应用来说,Serverless的无状态改造几乎是一个无法完成的任务。
业务拆分问题。如何将业务拆分成成百上千个运行在独立进程、运行时间受限的函数是巨大的挑战。而是否需要如此细粒度的拆分是需要回答的第一个问题。有些问题或许变成无解难题又或成本极高,例如分布式数据库事务。
厂商锁定。云计算是赢者通吃的行业,大而全的云厂商优势巨大,Serverless加剧了这种趋势。以前用户还需要自己写很多服务器端的逻辑,迁移的时候,把服务器端代码重新部署一下。采用Serverless架构之后,代码都是各个平台的Lambda代码片段,没法迁移。从客户的角度来看,是不希望自己被某家云厂商所绑架的。所以云计算行业需要做很多标准化的工作,方便用户无缝在各种云之间迁移。

对已存在的项目迁移困难。将现有的复杂的单体式应用进行如此细粒度的拆分需要极高的成本。

四、Microservice与Serverless的适用场景

Microservice适合构建复杂的应用。比如:构造一个分布式数据库。

Serverless 适合构建比较简单的应用,比如上传一张图片、对一段音频/视频进行编解码、对IOT设备的请求返回一小段数据等。

Serverless的更多相关文章

  1. 【转】OpenStack和Docker、ServerLess能不能决定云计算胜负吗?

    还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值460亿美元的SaaS之王.今天谈谈『No ...

  2. 【转】Serverless架构

    这是来自martinfowler.com的Serverless架构一文的大意翻译. 什么是Serverless?    Serverless首先是用于描述我们的应用程序是明显或充分地依赖第三方应用或服 ...

  3. Serverless 架构:用服务代替服务器

    Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:&q ...

  4. Serverless无服务应用架构纵横谈

    Serverless无服务应用架构纵横谈 一.Serverless是啥 自从互联网兴起以来,Server就成了网络的核心部件.所以围绕Server的生意圈,也发展得如火如荼. 从最早的电信托管,到虚拟 ...

  5. 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...

  6. 黄文俊:Serverless小程序后端技术分享

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...

  7. 聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!

    4月14日,由云加社区举办的TVP&腾讯云技术交流日云开发专场,暨"腾讯云-云开发圆桌论坛"在北京.深圳两地同步举行. 当天下午,一场主题为"基于大前端和node ...

  8. AWS Step Function Serverless Applications

    Installing VS Components To follow along with this article, you must have an AWS account and install ...

  9. 精读《Serverless 给前端带来了什么》

    1. 引言 Serverless 是一种 "无服务器架构",让用户无需关心程序运行环境.资源及数量,只要将精力 Focus 到业务逻辑上的技术. 现在公司已经实现 DevOps 化 ...

  10. 开源 serverless 产品原理剖析 - Kubeless

    背景 Serverless 架构的出现让开发者不用过多地考虑传统的服务器采购.硬件运维.网络拓扑.资源扩容等问题,可以将更多的精力放在业务的拓展和创新上. 随着 serverless 概念的深入人心, ...

随机推荐

  1. Linux-grep,awk,sed

    grep 参考1:https://www.cnblogs.com/ITtangtang/p/3950497.html sed 参考:https://www.cnblogs.com/wangqiguo/ ...

  2. scrapy框架--?乱码unicode

    安装 pip install scrapy 建立一个爬虫项目 scrapy startproject 项目名称 scrapy startproject itcast 进入itcast文件夹 生成一个爬 ...

  3. 小学四则运算口算练习app---No.7

    今天主要改了设置页面的提示框以及按钮的闪退问题: activity_calculators .class import android.support.v7.app.AppCompatActivity ...

  4. selenium webdriver使用的一些小技巧(持续更新中)

    1.开始结束时间只支持控件选择,不支持填写,怎么办? 如下图: 解决方案: 用javaScipt把开始结束时间的reaonly属性去除,然后再输入,举例如下 /**     * 输入开始日期     ...

  5. Anaconda3(5-1)程序编辑器 自带的spyder

    1装好后自带spyder编辑器 2 打开软件 3 每次程序需要制定anaconda3中创建的虚拟环境对应 的python版本的路径 例如在我的电脑我创建了两个环境 而我的pytorch安装在pytho ...

  6. vue大文件上传插件选哪个好?

    文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...

  7. JavaScript计算时间前一天跟后一天

    1.获取当前时 //写在HTML <button onclick="goBefore()">前一天</button> <button onclick= ...

  8. 请简要描述margin重复问题,及解决方式

    两个相邻的盒子垂直方向上的margin会发生重叠,取较大的那个值,而不是相加. 解决: 父级设置padding代替margin 父级设置overflow:hidden 当前元素设置透明的边框 使用绝对 ...

  9. Redis内存回收策略

    如果使用Redis的时候,不合理使用内存,把什么东西都放在内存里面,又不设置过期时间,就会导致内存的堆积越来越大.根据28法则,除了20%的热点数据之外,剩余的80%的非热点或不怎么重要的数据都在占用 ...

  10. Golang(二)基本概念

    类型 18个基本类型:bool.string.rune.byte.int.uint.int8.uint.int8.int16.uint16.int32.uint32.int64.uint64.floa ...