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

2024-05-09 22:44

本文主要是介绍我们的小程序每天早上都白屏,真相是。。。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

然后过了一会儿后,发现又恢复了,难道是我们又又又又写出了什么诡异的 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.chinasem.cn/article/974711

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

美容美发店营销版微信小程序源码

打造线上生意新篇章 一、引言:微信小程序,开启美容美发行业新纪元 在数字化时代,微信小程序以其便捷、高效的特点,成为了美容美发行业营销的新宠。本文将带您深入了解美容美发营销微信小程序,探讨其独特优势及如何助力商家实现业务增长。 二、微信小程序:美容美发行业的得力助手 拓宽客源渠道:微信小程序基于微信社交平台,轻松实现线上线下融合,帮助商家快速吸引潜在客户,拓宽客源渠道。 提升用户体验:

程序人生--拔丝地瓜

一个会享受生活的人,难免会执迷于探索“三餐茶饭,四季衣裳”的朴素涵义。如今在这繁杂喧闹、竞争激烈的社会环境里,如何才能从周而复始的生活中挖掘出一点儿期待!这是一个仁者见仁智者见智的开放性话题。对于大部分的人来说,看电影、运动、旅游、美食、加班....是假日的备选安排。 春节临走之前,再次尝试“拔丝地瓜”,为何要强调“再次”二字?因为这道甜菜我已经尝试过很多次,失败与成功都经历过。十几年的烧饭经历

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文实际路径如下: 如果在本文路径中没有此目录,请尝试在C盘中搜索 python,搜索到相关python目录后,点击Python 3.9进入目录,

2_为MFC程序添加菜单

在MFC中添加菜单栏 1,双击资源文件,显示资源视图,点击Menu插入Menu菜单,编辑菜单的ID,自己取名字。 2,点击“请在此处键入”添加菜单选项,输入&E,E的下面就会产生下划线;在产生的弹出菜单中继续编辑,并且可以添加事件处理函数; 在弹出菜单的任意位置,鼠标右键,弹出的菜单中选择“插入分隔符”,即可产生分隔符 3,在你设计的Dialog窗口的属性栏,选择Menu后面的

在Ubuntu 14.04上安装和配置SNMP守护程序和客户端的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 作为系统管理员的重要工作之一是收集关于服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理这种类型的信息。其中许多工具都是建立在一种叫做 SNMP 的技术之上。 SNMP 代表简单网络管理协议。它是服务器可以共享关于其当前状态的信息的一种方式,也是管理员可以修改预定义值的通道。虽

第一个PSpice程序

环境cadence 16.6 PSpice A/D PSpice程序开发已经逐渐淡出我们的视线,可是却不能忽视其对电子设计开发的重大作用,在学习的过程中偶然看到PSpice应用,却全部是图形输入,而怀着想知道为什么的好奇心,找遍图书馆唯一一本的PSpice程序设计与仿真的书(虽然也有英文的,但是好几本书,等需要时再看了)终于还是被我找到,经过不断的努力,加上偶然的原因终于成功运行了。 步骤:

hello程序的漫游历程

hello程序的运行过程 #include<stdio.h>int main(){printf("hello, world\n);return 0;} 相信大家都知道这个著名的家伙,hello world,万物起源。 本文的目的就是一起来看看,当这个hello程序在系统上运行时,系统发生了什么以及为什么会这样。 hello程序的生命周期是从一个源文件(源程序)开始的,文件名为hello