一个新技术的出现不是无中生有,从石头中凭空蹦出来的,而是在原有基础上的继承和发展。

Serverless也不例外,我们回顾下IT基础设施的发展,就会发现,Serverless自然就会浮现出来,你自己就可以发明它(但是却实现不了它)。

局域网时代

上世纪90年代,你是一家IT部门的负责人,公司需要建立一个信息管理系统,

这时候的系统都是局域网的, 是C/S模式的, 业务逻辑主要在客户端软件中, 需要被安装到各个电脑上去,然后访问同一个数据库。

在部署这个系统之前,你需要做很多的工作:

搭建局域网, 购买交换机,路由器。

买服务器,安装操作系统,比如Window NT

安装数据库软件,例如Oracle。

然后再把那些Delphi/VB/PowerBuilder写的客户端安装到电脑上, 整个系统跑起来了。

数据中心

C/S模式的很大弊端就是客户端更新特别麻烦,服务器能支撑的用户也不大。

Web兴起后,你们公司的应用也与时俱进,从C/S模式变成了B/S模式,用户主要使用浏览器来访问应用,业务逻辑在服务器端运行。

这时候,你还需要买服务器,然后放到数据中心去托管,毕竟那里的条件更好,更稳定。

网络不需要自己来搭建了, 掏钱买数据中心的网络带宽就好。 还需要自己安装软件, 比如Linux操作系统,Tomcat, Ngnix, MySQL等等。

随着功能的增加,你还需要新的服务器来处理缓存,搜索等功能。 为了应对高并发,还需要分布式,负载均衡,数据复制。

你需要仔细地规划, 看看这些缓存,搜索,数据库, 负载均衡等都需要什么样的服务器,有些要求CPU很强,有些要求内存很大,有些要求硬盘很快。

总之,运维这样一套系统,非常麻烦。

虚拟化

但是,如果你的网站没人访问了,这一套复杂的系统,这些昂贵的服务器就会变成摆设,你想卖都很难卖掉,这是巨大的浪费。

一个想法就会浮现出来:为什么要用物理服务器?  谁要是能提供虚拟机给我就好了! 用完了就可以“扔掉”!

于是那些有实力的大厂就这么做了,把这些物理服务器的计算能力,存储能力统一管理,统一调配,对外提供的就是虚拟机。

他们把这种方式叫做云计算,你使用了云计算以后,有很多好处:

物理服务器不用买了,申请虚拟机就可以了。什么样的CPU, 多少内存,多大的硬盘,对应的价格也不同。

操作系统会按照你的要求自动给你安装好。网络自然不用操心, 要多大带宽直接买就行。

对于PaaS来讲,连运行时环境都安装好了,直接使用就行。

这些虚拟机可以包月,包年计费。但是,如果没有人访问你的应用,没有流量,你也得掏钱。

理想模式

想必你的脑海中已经浮现出了解决方案:

  1. 不要再考虑什么物理服务器/虚拟机了, 把代码上传到云端,直接运行。

  2. 按使用情况(如CPU时间、内存大小)来收费

(IBM: 我的大机一直按使用情况收费,你们玩了几十年,终于回到我这里了 ^-^)

如果没有人访问你的应用,就不要部署它,这样只会占用一点点存储空间,不用使用CPU和内存;如果有人访问,把应用部署到某个服务器上,执行这次请求,返回给用户,然后卸载这个应用。

和之前的方式相比,最大的特色是即用即走,不会在服务器/虚拟机中常驻。

但是这么做可能吗? 不行,应用的粒度太大,一个应用几十、上百模块,每个请求来了就部署整个应用,只执行那么一点儿代码, 然后就卸载掉。 如果每个请求这么来回地部署和卸载,你是疯了吗,兄弟?

那微服务呢?粒度还是太大 ! 如果是微服务中的一个API,或者说就是一个“函数”呢?  这个粒度应该差不多了。

这里说的函数到底是什么? 需要看具体的业务来划分,比如搜索产品,图像转换, 它需要足够小,足够单一,能快速启动,运行,卸载。

一个“函数”真的只做一件事情,并且不保持状态。 这样一来它可以轻松地被扩展到任意多的服务器/虚拟机/docker容器中去。请求多了就扩容,请求少了,就收缩,请求没了,就卸载,实在是太爽了。

这种方式现在称为Serverless,并不是说没有服务器,而是说服务器对用户来说是透明的。 应用的装载、启动、卸载,路由是需要平台来搞定。

Serverless 的特点

Serverless的开发模式和运行模式类似这样:

1. 程序员编写完成业务的函数代码

2. 上传到支持Serverless的平台,设定触发的规则。

3. 请求到来,Serverless平台根据触发规则加载函数,创建函数实例,运行

4. 如果请求比较多,会进行实例的扩展,如果请求较少,就进行实例的收缩。

5. 如果无人访问,卸载函数实例。

如果有多个函数,怎么确定调用哪一个? 肯定需要一个东西来转发一下。

(微服务: 我就是这么玩儿的啊!)

如果业务比较复杂,一个函数搞不定怎么办? 可以把多个函数给编排起来!

(SOA: 我早就这么做了!)

按需装载,自动伸缩,不用你苦逼地去规划硬件,安装软件,还可以按照使用情况付费,这么好的东西,我们是不是马上投入serverless的怀抱?

慢着!

为了达到上面的目标,你必须得牺牲一个很重要的东西:状态

函数没有状态的,每次启动都可能会被部署到一个全新的“服务器”中,这就有两个问题:

  1. 用户的会话状态肯定是无法保持的,像session sticky 这样的功能就别想了。

  2. 函数无法做本地的持久化,没法访问本地硬盘的任何东西(服务器看不见了,怎么能看见硬盘呢?)。

所有想持久化的东西必须得保存到外部的系统或者存储中,例如Redis,MySQL等。 很明显,这些东西也应该以“服务”的方式来呈现,即Backend as a Service (BaaS)。

如果你的应用无法拆分成无状态的函数,是无法享受Serverless带来的种种好处的。

Serverless更适合那些无状态的应用,例如图像和视频的加工,转换, 物联网设备状态的信息处理等等。

推荐图书:

手把手教你用 Python 建立

无须专人托管的服务器

(扫一扫,京东购)

作者:[印] Jalem Raj Rohit

译者:安翔

本书采用目前流行的 Python 语言,通过云架构中的示例,手把手教你在 AWS 和微软 Azure Functions 中构建 Serverless 架构、部署 Serverless API、处理日志和监控、将 Lambda 函数部署为基础设施即代码,等等。本书还详细介绍了 VPC 和 SAM 等技巧。

本文授权转载自:码农翻身公众号

题图来源:unsplash.com

是时候了解一下Serverless了相关推荐

  1. 一键部署dns服务_OpenShift : 通往云原生、DevOps、微服务和Serverless的大门

    新书速递 查尔斯·狄更斯的<双城记>中有句耳熟能详的名言:"这是一个最好的时代,也是一个最坏的时代."作为技术从业者,在这个数字化浪潮和技术变革接连发生的时代,我对这句 ...

  2. 二:serverless网站数据库操作

    操作数据库API文档 第一篇,搭建一套免费的serverless网站 一,创建集合,进入控制台 登录腾讯云后台 打开云开发控制台 可以新建集合,新建集合后点击集合名称即可批量导入导出数据库集合的数据, ...

  3. 一:搭建一套免费的serverless网站

    因为公司需求,需要快速搭建一个公司内部能够访问的资源查看管理的 PC网站,因为没有服务器,没有后端开发,又要快速上线使用,那么 serverless 就成了我的首选方案,下面从零开始搭建. 步骤一. ...

  4. 现在,Serverless 真的已经成熟了吗?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者 | Justin Etheredge 策划 | Ti ...

  5. 图解 Serverless!秒懂!

    作者 | 江昱(阿里云 Serverless 产品经理) 抛砖引玉:从云计算到 Serverless 2009 年,UC Berkeley发表了:Above the Clouds: A Berkele ...

  6. Serverless 下的微服务实践

    作者 | 弈川 微服务架构介绍 微服务架构诞生背景 在互联网早期即 Web 1.0 的时代,当时流行的是单体应用,研发团队比较小,主要是外部网页,然后新闻门户等:到了新世纪的互联网时期 Web 2.0 ...

  7. Serverless 在大厂都怎么用?

    点击可观看精彩演讲视频 主持嘉宾: 中国信息通信研究院 云计算部副主任.腾讯云TVP,陈屹力 圆桌嘉宾: - Amazon Web Services 首席开发者布道师,费良宏 - 阿里集团 Serve ...

  8. Serverless:微服务架构的终极模式(文末赠书)

    微服务的生态和实践已经比较成熟,其设计方法.开发框架.CI/CD工具.基础设施管理工具等,都可以帮助企业顺利实施微服务.然而,微服务远没有达到完美,它在架构.开发.基础设施方面仍然面临新的挑战. 微服 ...

  9. 微服务和 Serverless 如何强强联合?

    导语 |  微服务与 Serverless 被不少开发者称为"天作之合",在当前的微服务体系中,Serverless 的定位是什么?Serverless 在微服务分布式应用中又是如 ...

  10. Serverless 时代下大规模微服务应用运维的最佳实践

    微服务架构的优点和痛点 Aliware 1 微服务架构的诞生背景 回到互联网早期时代,也就是web1.0时代,当时主要是一些门户网站,单体应用是当时的主流应用,研发团队相对较小,这时候的挑战在于技术的 ...

最新文章

  1. pr预设的卷及内核锐化是什么_看完这一篇,彻底搞懂锐化怎么用!
  2. 人工智能(5)---一文解读人工智能创业的5大坑
  3. sort降序shell_希爾排序(Shell Sort)
  4. 【Android 逆向】Android 中常用的 so 动态库 ( /system/lib/libc.so 动态库 | libc++.so 动态库 | libstdc++.so 动态库 )
  5. PHP操作MYSQL--PDO
  6. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
  7. java hashmap读,java – ConcurrentHashmap – 读取和删除
  8. 中国买家团撑起2018芯片市场,华为千亿支出排名全球第三 | 盘点
  9. 【转】Delphi实现自动发贴和识别验证码 王泽宾
  10. 这真有点“凶”... 开发转测试,薪资不降反升
  11. 拷贝sys文件到另一个服务器,服务器文件拷贝到其他服务器
  12. 李宏毅自然语言处理——BERT和它的家族
  13. Android TeaPickerView数据级联选择器
  14. 网络共享计算机网络无法访问,局域网电脑无法访问共享文件网络共享失败怎么解决...
  15. redis SDS介绍
  16. 修复打不开计算机管理,win10系统设备管理器打不开的修复技巧
  17. 什么是重绘,重排?如何解决?
  18. 竹云+巨杉丨互信认证 安全可靠
  19. 【前端】页面适配?移动端适配屏幕的各种解决方案!
  20. (翻译)网站品质与配色相关

热门文章

  1. 转行python经验_【经验分享】转行如何自学Python并且找到工作,分享自己心得
  2. 计算机全球服务器,云计算的宿命:全球合并成一台计算机,支持无服务器运行...
  3. android button 添加事件_2019最新Android常用开源库总结
  4. python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例
  5. PTA 基础编程题目集 7-13 日K蜡烛图 C语言
  6. PTA 基础编程题目集 7-12 两个数的简单计算器 C语言
  7. 【c语言】蓝桥杯算法提高 P0402
  8. matlab中gen2par函数,R语言中绘图par()函数用法
  9. 阿里开源混沌工程工具 ChaosBlade
  10. 移动端自动化测试(一)appium环境搭建