我们的小程序每天早上都白屏,真相是。。。

大家好,我是程序员鱼皮。最近我们在内测一款面试刷题小程序,没错,就是之前倒下的 “面试鸭”!

在我们的内测交流群中,每天早上都会有同学反馈:打开小程序空白,没任何内容且登录不上。

然后过了一会儿后,发现又恢复了,难道是我们又又又又写出了什么诡异的 bug 吗?

哈哈哈,其实不然,因为我们面试鸭的后端服务 Serverless 化了!

那什么是 Serverless 呢?这事说来话长,但是我们长话短说,想要理解这个名词,还得从远古时代说起。。。

远古时代

在很久很久之前,一家公司如果要上线一个网站,需要啥呢?

需要一台物理服务器对吧。通过在服务器上安装虚拟化软件,可以将一个配置很高的物理机划分成多个 “小服务器”,一台安装 Nginx、一台安装后端服务、一台安装数据库等等。

如果当前网站的用户量大了,那么手动扩个容,多划一台 “小服务器” 给后端服务。当服务挂了需要重启服务,当遇到业务问题需要登录到服务器上查看日志。

这个时期,公司需要专门分配人员来运维管理这些服务器,不仅需要处理服务器的资源问题,还需要帮忙排查日志、发布部署服务等。

云服务商时代

到现在,市面上绝大部分的公司都不需要主动去购买物理服务器了,而是从云厂商手上买云服务器。

相信很多同学都买过大厂的云服务器,我们可以在买来的服务器上安装 Nginx、Tomcat、部署静态资源和后端 Java 服务,完全不需要管什么物理机,不用考虑这个服务器线下的机房情况,比如机房内有没有开空调、服务器会不会过热之类的。

虽然没有实体的物理机,但是使用起来还是有服务器的概念,当资源不够的时候,还是需要手动配置扩容(一般就是花钱升级配置)。

即使在云服务器上安装 Docker 容器来部署项目,还需要人工对集群进行维护和容量规划,需要分配人员来维护管理这些云服务器。

无服务器时代 Serverless

因为 “有服务器” 的概念,即使有很多自动化的运维工具,还是需要运维人员来管理配置。

那假设没有服务器呢?没服务器还需要人来管啥吗?

这就是 Serverless,直译过来就是 无服务器

这里的无服务器不是说真的不需要服务器,而是一些云厂商进行了封装,让我们这些使用者感受不到服务器的存在。

举个例子,如果我们想部署一个网站,在使用上可能就是在页面上填写代码仓库、指定要发布的分支、设置一下端口。

然后再给服务配置一下使用的资源,就完事儿了!

从上图的配置中我们可以看到,默认实例数是 0 ,表示空闲的时候不需要实例副本,如果当前实例的 CPU 使用率大于 60 % 就自动扩容,最多可以扩容至 5 个实例。

相比于以前要自己登录到服务器上执行命令来部署程序,使用这种界面化操作,是不是简单了很多?是不是完全感受不到服务器的存在?

并且我们还可以直接从界面查看服务日志、监控服务等,完全不需要 SSH 远程连接到服务器并用一通 Linux 命令来操作。

这样一来运维复杂度都交给云服务厂商了,我们基本上不需要承担运维工作。

相信看到这大家对 Serverless 应该有点了解了,已经体会到它的好处了。

注意,这篇文章中,所说的 Serverless 其实更多指的是 Serverless 化,即无机器化、免运维化。

而很多时候 Serverless 指的是另一种含义,即 Serverless Computing 架构:FaaS (函数即服务)+ BaaS(后端及服务)。也是亚马逊在 2014 年推出的 FaaS 服务 Lambda,才将 Serverless 带入大众视野。

这里我就不展开解释什么叫 FaaS、BaaS 了,有兴趣的同学可以自行查阅资料, 想看的人也可以留言,如果多的话后面我再出一篇文章。

回到面试鸭的问题

说了这么多,有些同学可能要问,所谓的 Serverless 和面试鸭每天早上白屏的问题有什么关系吗?

哈哈,眼尖的同学可能从上面的配置中就已经发现问题了。

没错就是这个实例副本数!面试鸭后端服务最小的副本数设置的就是 0 !

也就是说如果很长一段时间没有人访问面试鸭的服务,那么实例数就会减少到 0 ,一旦有用户在这个时候访问面试鸭,那么就需要重新启动实例,这个过程就是所谓的冷启动(Cold start)。

其实很好理解,就好比我们在 IDEA 中启动 Java 程序一样,它需要一些时间才能把服务启动好。

对应到 Serverless 中,如果没有可用的容器实例,此时请求过来,它就需要启动一个新容器,新容器的分配、启动、加载程序,都需要时间。

所以,冷启动会产生延迟时间,这也是为什么很多人强推应用的云原生化,追求程序的快速启动。

正常情况下半夜没人访问面试鸭,导致实例都关了,一些同学一大早打开面试鸭,触发冷启动,因为延迟原因导致登录不上且没面试题,过一段时间后,容器启动完毕,此时访问又一切正常。

看到这应该有同学能想到解决方法,把最小实例数改为 1 不就好啦?

哈哈,确实如此。之所以最小实例副本设置为 0,是因为 Serverless 服务是 按时计费 的,因为面试鸭还在内测阶段,用户数不多,使用时长也并不长,所以我们就能省则省啦~

这个按时付费,也是 Serverless 的一个优势,低峰期的时候甚至可以 0 支出呢!也比较适合学习项目部署的朋友。

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

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

相关文章

Day3 | Java基础 | 4常见类

Day3 | Java基础 | 4 常见类 基础版Object类equalshashCode(散列码)hashCode和equals clone方法String类 问题回答版Object类Object类的常见方法有哪些?和equals()的区别是什么?为什么要有hashCode?hashCode和equals的…

chrome extension插件替换网络请求中的useragent

感觉Chrome商店中的插件不能很好的实现自己想要的效果,那么就来自己动手吧。 本文以百度为例: 一般来说网页请求如下: 当前使用的useragent是User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safar…

解决WordPress无法强制转换https问题

原因:我在用cs的时候,突然老鸟校园网突然断了,客户端cs连不上了,进程也杀不死,cpu占用100%,只能重启,但是重启后我的blog网站打不开了 开始以为是Nginx的问题,重启它说配置出了问题…

[iOS]从拾遗到Runtime(上)

[iOS]从拾遗到Runtime(上) 文章目录 [iOS]从拾遗到Runtime(上)写在前面名词介绍instance 实例对象class 类对象meta-class 元类对象为什么要有元类? runtimeMethod(objc_method)SEL(objc_selector)IMP 类缓存(objc_cache)Category(objc_category) 消息传递消息传递的…

C语言【文件操作 2】

文章目录 前言顺序读写函数的介绍fputc && fgetcfputcfgetc fputs && fgetsfputsfgets fprintf && fscanffprintffscanf fwrite && freadfwritefread 文件的随机读写fseek函数偏移量ftell函数rewind函数 文件的结束判断被错误使用的feof 结语 …

【2024版】最新6款漏洞扫描工具来了!(附下载)看完这一篇就够了

目录 一、Nessus 二、AWVS 三、ZAP 四、w3af 五、北极熊 六、御剑 七、网络安全学习路线 (2024最新整理) 八、学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 渗透测试收集信息完成后&#xf…

《ESP8266通信指南》11-Lua开发环境配置

往期 《ESP8266通信指南》10-MQTT通信(Arduino开发)-CSDN博客 《ESP8266通信指南》9-TCP通信(Arudino开发)-CSDN博客 《ESP8266通信指南》8-连接WIFI(Arduino开发)(非常简单)-CSD…

AI换脸原理(3)——人脸对齐介绍

人脸对齐简介 人脸对齐其实包含两个步骤:人脸关键点检测、人脸对齐,英文术语有facial landmark和face alignment,主要用于精确标识眉毛、眼睛、鼻子、嘴巴以及人脸轮廓等特征部位。不同数据集对于关键点的数量有不同的设定,最少的是标记5个关键点,通常包括两只眼睛的瞳孔…

【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs

文章目录 1.内核函数调用堆栈:4个函数2.printk:cat /proc/cmdline查看consolettyS03.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG4.top&perf&…

mac 本地使用docker 运行es,kibana

1.下载 m芯片一些版本不支持.踩过坑.翻看官网才知道只有部分镜像支持m芯片 https://hub.docker.com/添加链接描述 docker pull elasticsearch:7.17.21 docker pull kibana:7.17.21镜像已经下载下来了 2.创建文件映射-挂载 /Users/lin/dev/dockerMsg 其中lin是自己的用户名…

2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、…

JavaWeb_请求响应_简单参数实体参数

一、SpringBoot方式接收携带简单参数的请求 简单参数:参数名与形参变量名相同,定义形参即可接收参数。并且在接收过程中,会进行自动的类型转换。 启动应用程序后,在postman中进行测试: 请求成功,响应回了O…

【Ping】Windows 网络延迟测试 ping 、telnet、tcping 工具

ping 命令 属于网络层的ICMP协议,只能检查 IP 的连通性或网络连接速度, 无法检测IP的端口状态。 telnet telnet命令,属于应用层的协议,用于远程登录,也可用于检测IP的端口状态。但是功能有限,只能检测一时…

八股文(C#篇)

C#中的数值类型 堆和栈 值类型的数据被保存在栈(stack)上,而引用类型的数据被保存在堆(heap)上,当值类型作为参数传递给函数时,会将其复制到新的内存空间中,因此在函数中对该值类型的修改不会影…

华为eNSP Pro模拟器下载(普通账号可用)

好消息!华为终于开放了普通账号使用权限! 安装教程下载后见《指导手册-eNSP Pro V100R001C00.pdf》 华为eNSP Pro模拟器下载(普通账号可用) 下载地址 华为eNSP Pro模拟器下载(普通账号可用) - 下一朵云 …

Linux进程间通信方式

每个进程的用户空间都是独立的,不能相互访问。 所有进程的内核空间(32位系统3G-4G)都是共享的 应用场景 作为缓冲区,处理速度不同的进程之间的数据传输资源共享:多个进程之间共享同样的资源,一个进程对共享数据的修改&#xff0c…

大数据Scala教程从入门到精通第五篇:Scala环境搭建

一:安装步骤 1:scala安装 1:首先确保 JDK1.8 安装成功: 2:下载对应的 Scala 安装文件 scala-2.12.11.zip 3:解压 scala-2.12.11.zip 4:配置 Scala 的环境变量 在Windows上安装Scala_windows安装scala…

RK3568 学习笔记 : u-boot 下通过设置 env ethact 设置当前工作的以太网设备

前言 正点原子 :RK3568 开发板 atompi-ca1 默认有两个网口,通过 u-boot mii 命令,可以查看 网口信息 > mii device MII devices: ethernetfe010000 ethernetfe2a0000 Current device: ethernetfe010000u-boot 下的以太网,不同…

昂科烧录器支持O2Micro凹凸科技的电池组管理IC OZ7708

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中O2Micro凹凸科技的电池组管理IC OZ7708已经被昂科的通用烧录平台AP8000所支持。 OZ7708是一款高度集成、低成本的电池组管理IC,适用于5~8s Li-Ion/Polymer电池组&a…

C++从入门到入土(二)——初步认识类与对象

目录 前言 类与对象的引入 类的定义 类的访问限定符及封装 访问限定符: 封装: 类的作用域 类的实例化 类的大小 this指针 this指针的特性 前言 各位佬们,在开始本篇文章的内容之前,我想先向大家道个歉,由于…