当前位置:网站首页>从云计算到函数计算
从云计算到函数计算
2022-08-04 16:53:00 【InfoQ】

函数计算,你的名字

函数计算,直达应用的核心
ECS ?FC ?


- 服务器性能能否应对可能突然爆发的用户请求,何时扩容?
- 服务器上的脚本和业务代码等多少还在健康运行?
- 外部网络安全威胁到来时如何保障数据安全?


函数计算 FC:解放生产力,更专注于应用的业务本身


- 用户无需采购和管理服务器等基础设施,运维成本低,安全性更高。(涵盖了云服务器的优势)。
- 用户只需专注业务逻辑的开发,使用函数计算支持的开发语言设计、优化、测试、审核以及上传自己的应用代码。结合工作流,代码提交自动部署,直接运行!
- 函数计算 FC 以事件驱动的方式触发应用响应用户请求。与阿里云对象存储 OSS、API 网关、日志服务和表格存储等服务无缝对接,帮助快速构建应用。
- 简化运维工作,提供日志查询、性能监控和报警等功能快速排查故障。
- 不用担心性能问题,架构更富有弹性,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力。
- 使用成本低,按需付费,支持百毫秒级别收费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景。
如此妙哉的函数计算该如何体验呢?


由繁到简,从长到短
实践:基于 Node.js + Serverless 的 Web 短网址跳转

- API 网关/API Gateway
- 函数计算/Function Compute
- 对象存储/Object Storage Service
- 日志服务/Log Service
- MongoDB Serverless 实例
- 购买 MongoDB Serverless 版。
- 新建集合,新建集合其实就相当于新建一个表。创建集合:links、logs。
- 通过程序代码连接 Serverless 实例,使用方法参见官方文档:https://help.aliyun.com/document_detail/185473.html
import storage from '../storage'
export default async (req, res): Promise<any> => {
// params from request body or querystring
const params = req.body ?? req.query
const { url = '', slug = '' } = params as { url?: string, slug?: string }
// url is required
if (url === '') {
return res.status(400).send({ message: 'Missing required parameter: url.' })
}
// url format check
if (!/^https?://.{3,}/.test(url)) {
return res.status(400).send({ message: 'Illegal format: url.' })
}
// custom slug length check
if (slug.length !== 0 && (slug.length < 2 || slug.length > 10)) {
return res.status(400).send({ message: 'Illegal length: slug, (>= 2 && <= 10).' })
}
const getForwarded = (name: string): string => req.headers[`x-forwarded-${name}`]?.toString() ?? ''
try {
// request origin url
const origin = `${getForwarded('proto')}://${getForwarded('host')}/`
// if slug customized
if (slug !== '') {
const existUrl = await storage.getUrlBySlug(slug)
// url & slug are the same.
if (existUrl === url) {
return res.send({ slug, link: origin + slug })
}
// slug already exists
if (existUrl != null) {
return res.status(400).send({ message: 'Slug already exists.' })
}
}
// target url exists
const existSlug = await storage.getSlugByUrl(url)
// url exists & no custom slug
if (existSlug != null && slug === '') {
return res.send({ slug: existSlug, link: origin + existSlug })
}
// create if not exists
const newSlug = await storage.addLink(url, slug)
// response
res.send({ slug: newSlug, link: origin + newSlug })
} catch (e) {
return res.status(500).send({ message: e.message })
}
}

结语
边栏推荐
- 智慧场馆的无人值守怎么做?
- LeetCode 0167. 两数之和 II - 输入有序数组
- gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
- 机器学习(十一):KNN(K近邻)
- 15 days to upgrade to fight monsters and become a virtual fashion creator
- 电气成套设备行业如何借助ERP系统,解决企业管理难题?
- 实践:二进制数据处理与封装
- 游戏云服务器配置怎么选合理?
- Mobile magic box CM201-1_CW_S905L2_MT7668_wire brush firmware package
- 容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
猜你喜欢

全球电子产品需求萎靡:三星越南工厂大幅压缩产能,减少工人工作日

智慧场馆的功能有哪些

测试零基础如何进入大厂?一场面试教会你(附面试题解析)

Heilongjiang Mobile New Magic Hundred Box M411A_2+8_S905L3A_wire brush firmware package

gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’

mysql学习笔记——利用动态SQL和Session变量实现一个公式或者计算器

美容院管理系统有哪些促销方式?

Steady Development | Data and Insights on Mobile Game Players in Western Europe

面试官:多个线程执行完毕后,才执行另一个线程,该怎么做?

B站回应HR称核心用户是Loser;微博回应宕机原因;Go 1.19 正式发布|极客头条
随机推荐
R语言使用cov函数计算矩阵或者dataframe数据变量之间的协方差、cor函数计算相关性、cor函数通过method参数指定相关性、相关性计算方法Pearson,Spearman, Kendall
机器学习(十七):网格搜索(Grid Search)和SVM
移动CM101s_MV100_EMMC_M8233_强刷后全分区线刷固件包
WEB 渗透之XXE&XML
Mobile magic box CM201-1_CW_S905L2_MT7668_wire brush firmware package
HCIP笔记(6)
生产环境重大bug,update加上索引字段会走索引进行更新?还是走全表扫描
乐享购(分享购)的模式:优势、亮点、收益
容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
911S5正式谢幕后 如何找到一个好用的替代品
nyist 301 递推求值(矩阵快速幂)
机器学习(十一):KNN(K近邻)
机器人示教编程与离线编程的优缺点对比
AtCoder Beginner Contest 262 部分题解
备战9月,美团50道软件测试经典面试题及答案汇总
“敏捷欺骗了开发人员”
CSDN21天学习挑战赛——程序流程控制(02)
【笔试题】-【日常记录】
xgboost模块param中的一些错误
浙江数码代工M301H 免拆通刷_卡刷固件包(语音OK)