当前位置: 首页 > 科技观察

建议大家稍微了解一下Serverless_0

时间:2023-03-16 01:59:50 科技观察

一门新技术,并不是凭空出现,凭空从石头里蹦出来,而是在原有的基础上继承和发展。无服务器也不例外。当我们回顾IT基础设施的发展,会发现Serverless自然而然会出现,你可以自己发明(但你无法实现)。局域网时代20世纪90年代,你是IT部门的负责人,公司需要建立信息管理系统。那时候的系统都在局域网,C/S模式,业务逻辑主要在客户端软件。分别安装在每台电脑上,然后访问同一个数据库。在部署这个系统之前,需要做很多工作:搭建局域网,购买交换机,路由器。购买服务器,安装操作系统,如WindowNT,安装数据库软件,如Oracle。然后在电脑上安装Delphi/VB/PowerBuilder编写的那些客户端,整个系统就开始运行了。数据中心C/S模式最大的缺点就是客户端更新特别麻烦,服务端能支持的用户数也不大。Web兴起后,贵公司的应用也与时俱进,从C/S模式转变为B/S模式。用户主要通过浏览器访问应用,业务逻辑运行在服务器端。这时候还是需要买一台服务器放在数据中心托管。毕竟那里的条件更好,也更稳定。网络不需要自己搭建,只需要为数据中心的网络带宽付费。还需要自己安装软件,比如Linux操作系统、Tomcat、Ngnix、MySQL等。随着功能的增加,还需要新的服务器来处理缓存、搜索等。为了应对高并发、分布式、负载平衡和数据复制也是必需的。你需要仔细规划,看看这些缓存、搜索、数据库、负载均衡等需要什么样的服务器,有的需要强大的CPU,有的需要大内存,有的需要快速的硬盘。总之,这样的系统运维起来非常麻烦。虚拟化但是,如果没有人访问你的网站,那么这个复杂的系统和这些昂贵的服务器就成了摆设,想卖就难卖了。这是一个巨大的浪费。一个想法就会浮现:为什么要使用物理服务器?谁能给我提供虚拟机就太好了!用完可以“扔掉”!计算能力和存储容量统一管理和部署,对外提供的是虚拟机。他们称这种方法为云计算。当你使用云计算后,有很多好处:你不需要购买物理服务器,你可以申请一个虚拟机。什么样的CPU,多大的内存,多大的硬盘,对应的价格也不一样。操作系统将根据您的要求自动安装。网络自然不用担心,带宽买多少就买多少。对于PaaS,连运行环境都安装好了,直接用就行了。这些虚拟机可以按月或按年计费。但是,如果没有人访问您的应用程序,则没有流量,您必须付费。理想的模式心里一定有一个解决方案:什么物理服务器/虚拟机都不要想,把代码上传到云端,直接运行。按用量收费(比如CPU时间,内存大小)(IBM:我的主机一直按用量收费,你玩了几十年,终于回来找我了^-^)如果没人访问你的应用,别'部署它,所以它只占用很少的存储空间,不使用CPU和内存;如果有人访问,将应用程序部署到服务器,执行请求,返回给用户,然后卸载应用程序。与之前的方法相比,特点是即开即用,不会常驻服务器/虚拟机。但是有可能这样做吗?不行,应用的粒度太大了。一个应用程序有几十个或数百个模块。每次请求过来,部署整个应用,只执行少量代码,然后卸载。兄弟,每个请求都这样来回部署卸载,你是不是疯了?微服务呢?粒度还是太大了!如果它是微服务中的API,或“功能”怎么办?大约在那里。这里说的功能到底是什么?需要根据具体的业务进行划分,比如搜索商品,图片转换,需要足够小,足够单一,能够快速启动、运行、卸载。“函数”实际上只做一件事,不保持状态。通过这种方式,它可以很容易地扩展到任意数量的服务器/虚拟机/docker容器。请求多了就扩容,请求少就缩容,没有请求就卸载。这真的很酷。这种方法现在称为无服务器。并不是说没有服务器,而是服务器对用户是透明的。应用程序的加载、启动、卸载和路由都需要由平台来处理。Serverless的特点Serverless的开发方式和运行方式类似这样:1.程序员编写功能代码完成业务2.上传到支持Serverless的平台,设置触发规则。3.当请求到来时,serverless平台根据触发规则加载函数,创建函数实例并运行。4.请求多则扩容实例,请求少则缩容实例。5.如果无人值守,卸载函数实例。如果有多个函数,如何确定调用哪一个?绝对需要一些东西来转发它。(微服务:我就是这么玩的!)如果业务比较复杂,一个功能搞不定怎么办?您可以安排多个功能!(SOA:我早就做过了!)按需加载,自动Scalable,不需要规划硬件,安装软件,按用量付费。这么好的东西,是不是应该马上拥抱serverless?等待!为了实现上述目标,你不得不牺牲很多重要的东西:地位。该函数没有状态,每次启动都可能部署到一个全新的“服务器”上。这样有两个问题:用户的session状态一定不能保持,sessionsticky等功能不应该考虑。该功能不能持久化到本地,也不能访问本地硬盘上的任何东西(服务器是看不见的,怎么能看到硬盘?)。所有想要持久化的东西,都必须保存在外部系统或存储中,比如Redis、MySQL等,显然,这些东西也应该以“服务”的形式呈现,即BackendasaService(BaaS)).如果你的应用程序不能拆分成无状态功能,你将无法享受Serverless带来的好处。Serverless更适合那些无状态的应用,比如图像和视频的处理、转换、物联网设备状态的信息处理等等。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号coderising】点此查看该作者更多好文