Serverless Custom (Container) Runtime,2024年最新学生会面试题选择题怎么答

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

$ curl 0.0.0.0:9000 -X POST -d “hello world” -H “x-fc-request-id:123”

hello world

若服务已正常启动,说明它可以在接收 HTTP 请求后处理业务逻辑,然后将处理结果再以 HTTP 响应的形式返回给 FaaS 平台。

2.创建一个启动目标 Server 的可执行文件 bootstrap

函数计算冷启动 Custom Runtime 时,会默认调用 bootstrap 文件启动自定义的 HTTP Server。然后这个 HTTP Server 接管了函数计算系统的所有请求。

  • bootstrap 是运行时入口引导程序文件,它会告诉 FaaS 如何启动你的自定义运行时。Custom Runtime 加载函数时会固定检索 bootstrap 同名文件,并执行该程序来启动 Custom Runtime 运行时。

  • bootstrap 需具备 777 或 755 可执行权限

  • 如果是 shell 脚本,一定要添加 #!/bin/bash

创建 bootstrap 文件如下:

#!/bin/bash

./node_modules/.bin/ts-node server.ts

3.编写资源配置文件 template.yaml

在当前目录下编写一份用于部署到函数计算的资源配置文件 template.yaml:

ROSTemplateFormatVersion: ‘2015-09-01’

Transform: ‘Aliyun::Serverless-2018-04-03’

Resources:

custom-runtime: # 服务名称

Type: ‘Aliyun::Serverless::Service’

Properties:

Description: ‘helloworld’

custom-runtime-ts: # 函数名称

Type: ‘Aliyun::Serverless::Function’

Properties:

Handler: index.handler # Handler 在此时没有实质意义,填写任意的一个满足函数计算 Handler 字符集约束的字符串即可, 例如 index.handler

Runtime: custom # custom 代表自定义运行时

MemorySize: 512

CodeUri: ‘./’

4.部署、调用测试、完成

(1)使用 fun deploy -y 命令将我们的自定义运行时和业务逻辑代码所有资源部署到阿里云。

(2)使用命令调用部署函数,验证

$ fun invoke -e “hello,my custom runtime”

看到成功输出,就代表我们的 Custom Runtime 大功告成了!它可以直接运行我们写的 TS 代码了。

实现 Custom Container Runtime


TS 的运行环境问题可以用 Custom Runtime 解决,但是 Node 某些版本平台不支持的问题,就不能用同样的办法了。因为 Node 是全局安装的,依赖系统环境。

FC 平台已经为我们想好了此类问题的解决办法,为我们提供了 Custom Container Runtime(自定义容器运行环境)的能力。FaaS 平台有这种能力,是因为它的底层实现原理是 Docker 容器,所以它通过运用容器技术,把我们的应用代码和运行环境打包为 Docker 镜像,保持环境一致性。实现一次构建,到处运行。

工作原理

Custom Container Runtime 工作原理与 Custom Runtime (https://help.aliyun.com/document_detail/132044.htm#Task-2259898) 基本相同:

  • 函数计算系统初始化执行环境实例前会扮演该函数的服务角色,获得临时用户名和密码并拉取镜像

  • 拉取成功后根据指定的启动命令 Command、参数 Args 及 CAPort 端口(默认 9000)启动自定义的 HTTP Server。

  • 然后这个 HTTP Server 接管了函数计算系统的所有请求,包括来自事件函数调用及 HTTP 函数调用。

下面我们自定义一个 Node V16.1.0 版本的容器运行环境。

操作步骤
1.自定义 HTTP Server

这一步和 Custom Runtime 相同,使用 Node.js Express 自定义一个 Http 服务 server.js,GET 和 POST 方法分别路由至不同的 Handler:

// server.js 文件

‘use strict’;

const express = require(‘express’);

// Constants

const PORT = 9000;

const HOST = ‘0.0.0.0’;

// HTTP 函数调用

const app = express();

app.get(‘/*’, (req, res) => {

res.send(Hello FunctionCompute, http function, runtime is : Node ${process.version}\n);

});

// 事件函数调用

app.post(‘/invoke’, (req, res) => {

res.send(Hello FunctionCompute, event function,runtime is : Node ${process.version}\n);

});

// 启动 HTTP 服务并监听 9000 端口

var server = app.listen(PORT, HOST);

console.log(Running on http://${HOST}:${PORT});

server.timeout = 0; // never timeout

server.keepAliveTimeout = 0; // keepalive, never timeout

启动服务,本地测试一下:

# 启动 HTTP 服务

$ node server.js

# 新开一个终端,通过 curl 命令测试

$ curl http://0.0.0.0:9000

Hello FunctionCompute, http GET, this runtime is : Node v11.5.0     # 这是我本地的 Node 版本,后面在自定义容器中会输出 v16.1.0

验证通过。

2.构建镜像并上传

同样的,需要先做两个准备工作:

  • 1)安装启动 Docker

  • 2)使用阿里云容器镜像服务创建命名空间和镜像仓库 (https://cr.console.aliyun.com/) 存放我们的自定义镜像

接下来,先编写 Dockerfile,再构建包含我们 Node 指定版本运行环境和应用代码的镜像,最后上传到自己的镜像仓库。

(有需要的同学可以先看下这篇文章如何把一个 Node.js web 应用程序给 Docker 化 (https://nodejs.org/zh-cn/docs/guides/nodejs-docker-webapp/) )

(1) 编写 Dockerfile:

# 基于基础镜像 node:16.1.0-alpine3.11 构建我们自己的镜像

FROM node:16.1.0-alpine3.11

# 设置容器工作目录

WORKDIR /usr/src/app

# 将 package.json 和 package-lock.json 都拷贝到工作目录

COPY package*.json ./

# 安装依赖

RUN npm install

# 将当前目录下的所有文件拷贝到容器工作目录中

COPY . .

# 暴露容器 8080 端口

EXPOSE 8080

# 在容器中启动应用程序

ENTRYPOINT [ “node”, “server.js” ]

(2)安装启动 Docker,登录阿里云镜像服务,构建并上传:

# 登录

$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com

登录成功后,先构建 Docker 镜像:

# 指定 ACR 镜像地址:其中 my_serverless 为你自己的容器命名空间;nodejs 为你自己的镜像仓库名称;v16.1.0 为镜像版本号

$ export IMAGE_NAME=“registry.cnhangzhou.aliyuncs.com/my_serverless/nodejs:v16.1.0”

# 构建镜像

# -t 给镜像取名字打标签,通常 name:tag 或者 name 格式

  d o c k e r   b u i l d   − t    docker build -t   docker build t IMAGE_NAME .

再启动容器,本地打开浏览器 http://localhost:9000/ 看是否可以正常响应,来验证我们的自定义镜像是否可以运行成功:

# 启动容器:将容器的 9000 端口映射到主机的 9000 端口$ docker run -p 9000:9000 -d $IMAGE_NAME

验证通过后,最后上传镜像:

# 上传镜像

  d o c k e r   p u s h    docker push   docker push IMAGE_NAME

上传成功后,可以在阿里云镜像服务中看到我们的镜像。后面就可以使用它啦!

3.定义 template.yaml

创建一个 template.yaml文件如下:

ROSTemplateFormatVersion: ‘2015-09-01’

Transform: ‘Aliyun::Serverless-2018-04-03’

Resources:

CustomContainerRuntime: # 服务名称

Type: ‘Aliyun::Serverless::Service’

Properties:

Policies:

- AliyunContainerRegistryReadOnlyAccess

InternetAccess: true

nodejs-express-http: # 函数名称

Type: ‘Aliyun::Serverless::Function’

Properties:

Description: ‘HTTP function powered by nodejs express’

Runtime: custom-container # 表示自定义容器

Timeout: 60

CAPort: 9000 # 注意!这里Custom Container Runtime使用的监听端口一定要和HTTP Server监听的端口保持一致,否则会出现错误

Handler: not-used

MemorySize: 1024

CodeUri: ./   # Root directory for the function or the Dockerfile path

CustomContainerConfig: # 容器镜像配置

# Sample image value: registry-vpc.cn-shenzhen.aliyuncs.com/fc-demo/nodejs-express:v0.1  使用同地域的VPC镜像地址加速

Image: ‘registry.cn-hangzhou.aliyuncs.com/my_serverless/nodejs:v16.1.0’

Command: ‘[ “node”]’

Args: ‘[“server.js”]’

Events:

http-trigger-test:

Type: HTTP

Properties:

AuthType: ANONYMOUS

Methods: [‘GET’, ‘POST’, ‘PUT’]

4.部署测试

# 使用命令部署到 FC

$ fun deploy -y

部署成功后,我们去 FC 平台上进行测试。

文末

js前端的重头戏,值得花大部分时间学习。

JavaScript知识

推荐通过书籍学习,《 JavaScript 高级程序设计(第 4 版)》你值得拥有。整本书内容质量都很高,尤其是前十章语言基础部分,建议多读几遍。

前端电子书

另外,大推一个网上教程 现代 JavaScript 教程 ,文章深入浅出,很容易理解,上面的内容几乎都是重点,而且充分发挥了网上教程的时效性和资料链接。

学习资料在精不在多,二者结合,定能构建你的 JavaScript 知识体系。

面试本质也是考试,面试题就起到很好的考纲作用。想要取得优秀的面试成绩,刷面试题是必须的,除非你样样精通。

这是288页的前端面试题

288页面试题

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
7.png)

另外,大推一个网上教程 现代 JavaScript 教程 ,文章深入浅出,很容易理解,上面的内容几乎都是重点,而且充分发挥了网上教程的时效性和资料链接。

学习资料在精不在多,二者结合,定能构建你的 JavaScript 知识体系。

面试本质也是考试,面试题就起到很好的考纲作用。想要取得优秀的面试成绩,刷面试题是必须的,除非你样样精通。

这是288页的前端面试题

288页面试题

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-1oabDPaT-1713187335743)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值