从云计算到函数计算
函数计算,你的名字
云计算是一种基于互联网的计算方法。通过这种方式,共享的软硬件资源和信息可以根据需要提供给计算机的各种终端和其他设备,并使用服务提供商提供的计算机基础设施作为计算资源。因此,用云代替网络计算资源是一个非常合适的比喻。
国家标准和技术研究所的云计算定义明确了软件即服务三种服务模式(SaaS)、平台即服务(PaaS)服务于基础设施(IaaS)。阿里云的所有产品都可以覆盖这三种服务模式。如果举个例子,应该是:适合搭建(SaaS加速器)、函数计算FC和云服务器ECS。
Serverless基于计算服务PaaS又不同于PaaS,因此,它通常被称为功能,即服务(Function-as-a-Service,缩写为 FaaS)。函数计算FC全托管是由阿里云事件驱动的Serverless 计算服务产品,我想计算函数Function Compute名字就是这样诞生的。
函数计算,直接应用的核心
我们知道应用程序的核心是逻辑和存储,代码主要实现业务逻辑和持久性。
函数计算FC总体上是FaaS BaaS:
函数是指由业务逻辑部分计算的函数FaaS来实现;
通过数据持久化、新闻推送和账户系统BaaS来实现。
ECS?
Serverless服务不是没有服务器,而是作为一种新的架构,我们在传统应用维护方面的工作进一步减少。
以云服务器为基础的常见服务器Web以服务为例,大致有这样的流程:
在服务过程中,服务器可能涉及路由规则、权利识别逻辑和其他复杂的业务代码。同时,开发团队不仅应该专注于开发,还应该在服务器的运行和维护上投入大量精力,如始终关注以下问题:
· 服务器性能能能否应对可能突然爆发的用户请求,何时扩容?
· 服务器上的脚本和业务代码还在健康运行吗?
· 当外部网络安全威胁到来时,如何确保数据安全?
面对很多问题,确实会让人头大,但如果我们放弃基于服务器的架构,转用它Serverless架构完成后,服务流程就变成了这样:
当客户端和数据库没有改变时,服务器就变成了Serverless的架构。分工发生了巨大的变化。例如,需要开发团队维护的路由模块和识别模块将访问服务提供商API开发团队不需要维护这两部分的业务代码,只需要继续维护相关规则,不再需要担心应用程序的构建;业务代码分为函数粒度,不同的函数表示不同的功能,根据要求也可以根据要求量实现;云厂商负责业务逻辑以外的部分安全问题和资源调度问题。
除了开发和维护产品的省心,在具体实现成本上也能达到降本增效的效果。相对于传统项目服务的全天候运行来说,函数计算FC是基于事件驱动的,只有在用户发起请求时,函数才会被激活并且执行,运行成本按量收费,成本相较于节省计划还有显着的成本优势。
FC 解放生产力,更注重应用业务本身
使用云服务器时,我们不必担心物理机房维护等操作系统层下的内容;使用函数计算FC,我们不需要安装操作系统、容器配置作环境,不用担心环境程序会挂断。
可见FC采用函数计算Serverless架构结束后,用户只需要操作和维护与应用程序相关的函数,ECS架构下只剩下一件事需要担心:
函数计算就像一场新的技术革命,用函数计算FCServerless架构后:
- 开发团队不需要维护自己的服务器,也不需要担心服务器的各种性能指标和资源利用率。团队的操作和维护可以更专注于监控应用程序本身的测量。
- 应用程序的部署将变得非常容易。我们只需要上传基本代码而不使用它Puppet、Chef、Ansible或Docker配置管理大大降低了运维成本。
,与传统项目相比,函数计算 FC 具有以下优点:
- 用户不需要购买和管理服务器等基础设施,运维成本低,安全性高。(即云服务器的优点)
- 用户只需专注于业务逻辑的开发,使用函数计算支持的开发语言设计、优化、测试、审核和上传自己的应用代码。结合工作流提交自动部署,直接运行!
- 函数计算FC应用程序以事件驱动的方式响应用户请求。与阿里云对象存储OSS、API无缝连接网关、日志服务、表格存储等服务,帮助快速构建应用。
- 简化运维工作,提供日志查询、性能监控、报警等功能。
- 不用担心性能问题,架构更有弹性,毫秒级弹性伸缩,底层扩容快速实现,以应对峰值压力。
- 使用成本低,按需支付,支持100毫秒收费。只需支付实际使用的计算资源,适用于有明显峰谷的用户访问场景。
FC似乎真的实现了函数计算 像云一样的云计算愿景很好地解释了最大限度地利用资源、减少空闲资源浪费、降低学习成本和使用成本的环和使用成本的实际需求。
如何体验这样精彩的函数计算?
函数计算FC提供运行环境、开发者工具和函数触发器。同时,函数计算FC提供免费执行次数 : 100万 (次)免费资源使用量 : 40万 (GB-秒)。对于小规模的在线使用,我们只能支付公共网络流量成本和其他资源。
最常用的函数计算方法是控制台进入服务和函数子页面,依次创建服务和函数。
当然,阿里云在函数计算控制台-应用页面提供一键式,我们可以通过导入模板和仓库来创建:
目前,公开测试中的模板中心包括来自官方或社区的56个应用程序或框架模板,覆盖范围相当全面。在官方文建可以在官方文档的指导下实现FC应用。
从繁到简,从长到短
主要功能-实现长连接和短链接的映射。
简要描述:
用户可以指定URL创建相应的短链
用户访问短链,自动跳转到相应URL
如上所述,用函数计算FC一般来说,构建应用是必要的FaaS BaaS。本文的实践项目涉及BaaS使用数据库,方便使用云开发平台构建应用。
应用架构图如下:
资源预备:
需要注册开通云开发平台,激活以下服务,
API 网关/API Gateway
函数计算/Function Compute
对象存储/Object Storage Service
日志服务/Log Service
MongoDB Serverless实例
数据库部分:
购买MongoDB Serverless版。
新集合,新集合实际上相当于新表。创建集合:links、logs。
通过程序代码连接Serverless例如,单击此链接以查看官方文档。
逻辑代码部分示例:
(Attention:该项目也被使用Express方便简化路由处理的框架)
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() ?.toString() ?? '' try { // request origin url const origin = `${getForwarded('proto」${getForwarded('host')}/` // if slug customized if (slug !== '') { const existUl = 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 })
}
}
完成前端静态页面后便可绑定域名上线测试。
注意,需要绑定已备案域名。
小结
Serverless作为云原生玩家的首选微服务已逐渐得到大众认同并快速发展起来,期待未来会有更多基于Serverless的应用。
作者:Ethin