從云計算到函數(shù)計算
點擊上方圖片了解活動詳情!
哈嘍各位開發(fā)者,為了幫助大家客觀了解并使用阿里云函數(shù)計算(FC),阿里云開發(fā)者社區(qū)攜手云原生應(yīng)用平臺 Serverless 團(tuán)隊發(fā)布 “Serverless 函數(shù)計算征集令”,提供免費資源額度邀請你發(fā)文評測,7月31日前參與活動,即有機(jī)會獲得千元好禮 + 千元函數(shù)計算資源包!
立即參加:https://developer.aliyun.com/topic/serverless2022
悄悄說...現(xiàn)在投稿還可領(lǐng)取優(yōu)酷視頻季卡一張;阿 Ser 也精選出一些活動中的優(yōu)秀征文推薦給大家,下面讓我們跟隨筆友 “Ethin” 的步伐,看看他眼中的 Serverless 世界吧!
函數(shù)計算,你的名字
云計算,是一種基于互聯(lián)網(wǎng)的計算方式,通過這種方式,共享的軟硬件資源和信息可以按需求提供給計算機(jī)各種終端和其他設(shè)備,使用服務(wù)商提供的電腦基建作計算資源,因此用 “云” 來指代 “網(wǎng)絡(luò)計算資源” 這是一種非常恰當(dāng)?shù)谋扔鳌?/span>

美國國家標(biāo)準(zhǔn)和技術(shù)研究院的云計算定義中明確了三種服務(wù)模式,分別是軟件即服務(wù)(SaaS)、平臺即服務(wù)(PaaS)和基礎(chǔ)設(shè)施即服務(wù)(IaaS)。
阿里云的產(chǎn)品能全部覆蓋這三種服務(wù)模式,如果分別舉個例子那么應(yīng)該是:宜搭(SaaS 加速器)、函數(shù)計算 FC 和云服務(wù)器 ECS。
Serverless 計算服務(wù),其基于 PaaS 又不同于 PaaS,因而更多時候被稱作功能即服務(wù)(Function-as-a-Service,縮寫為 FaaS)。函數(shù)計算 FC 是阿里云的事件驅(qū)動的全托管 Serverless 計算服務(wù)產(chǎn)品,我想函數(shù)計算 Function Compute 的名字就是這樣誕生的。
函數(shù)計算,直達(dá)應(yīng)用的核心
ECS ?FC ?


服務(wù)器性能能否應(yīng)對可能突然爆發(fā)的用戶請求,何時擴(kuò)容?
服務(wù)器上的腳本和業(yè)務(wù)代碼等多少還在健康運(yùn)行?
外部網(wǎng)絡(luò)安全威脅到來時如何保障數(shù)據(jù)安全?
面對諸多問題確實會讓人頭大,但如果我們摒棄基于服務(wù)器的架構(gòu)而轉(zhuǎn)用 Serverless 架構(gòu)之后;服務(wù)的過程就變成了這樣:


函數(shù)計算 FC:解放生產(chǎn)力,更專注于應(yīng)用的業(yè)務(wù)本身


應(yīng)用的部署將變得十分容易。我們只要上傳基本的代碼,同時不需使用 Puppet、Chef、Ansible 或 Docker 來進(jìn)行配置管理,大大降低了運(yùn)維成本。
綜上所述,相對于傳統(tǒng)項目,函數(shù)計算 FC 具備以下優(yōu)勢:
用戶無需采購和管理服務(wù)器等基礎(chǔ)設(shè)施,運(yùn)維成本低,安全性更高。(涵蓋了云服務(wù)器的優(yōu)勢)。
用戶只需專注業(yè)務(wù)邏輯的開發(fā),使用函數(shù)計算支持的開發(fā)語言設(shè)計、優(yōu)化、測試、審核以及上傳自己的應(yīng)用代碼。結(jié)合工作流,代碼提交自動部署,直接運(yùn)行!
函數(shù)計算 FC 以事件驅(qū)動的方式觸發(fā)應(yīng)用響應(yīng)用戶請求。與阿里云對象存儲 OSS、API 網(wǎng)關(guān)、日志服務(wù)和表格存儲等服務(wù)無縫對接,幫助快速構(gòu)建應(yīng)用。
簡化運(yùn)維工作,提供日志查詢、性能監(jiān)控和報警等功能快速排查故障。
不用擔(dān)心性能問題,架構(gòu)更富有彈性,毫秒級別彈性伸縮,快速實現(xiàn)底層擴(kuò)容以應(yīng)對峰值壓力。
使用成本低,按需付費,支持百毫秒級別收費。只需為實際使用的計算資源付費,適合有明顯波峰波谷的用戶訪問場景。
函數(shù)計算 FC 似乎是真正實現(xiàn) “像云一樣” 的云計算愿景,它很好的詮釋了:最大程度利用資源、減少空閑資源浪費的環(huán)保理念以及降低學(xué)習(xí)成本和使用成本的現(xiàn)實需求。
如此妙哉的函數(shù)計算該如何體驗?zāi)??


由繁到簡,從長到短
實踐:基于 Node.js + Serverless 的 Web 短網(wǎng)址跳轉(zhuǎn)

API 網(wǎng)關(guān)/API Gateway 函數(shù)計算/Function Compute 對象存儲/Object Storage Service 日志服務(wù)/Log Service MongoDB Serverless 實例
購買 MongoDB Serverless 版。 新建集合,新建集合其實就相當(dāng)于新建一個表。創(chuàng)建集合:links、logs。 通過程序代碼連接 Serverless 實例,使用方法參見官方文檔: https://help.aliyun.com/document_detail/185473.html?
邏輯代碼部分示例:(Attention: 該項目還使用了 Express 框架,以便于簡化路由處理)
import storage from '../storage'export default async (req, res): Promise<any> => {// params from request body or querystringconst params = req.body ?? req.queryconst { url = '', slug = '' } = params as { url?: string, slug?: string }// url is requiredif (url === '') {return res.status(400).send({ message: 'Missing required parameter: url.' })}// url format checkif (!/^https?:\/\/.{3,}/.test(url)) {return res.status(400).send({ message: 'Illegal format: url.' })}// custom slug length checkif (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 urlconst origin = `${getForwarded('proto')}://${getForwarded('host')}/`// if slug customizedif (slug !== '') {const existUrl = await storage.getUrlBySlug(slug)// url & slug are the same.if (existUrl === url) {return res.send({ slug, link: origin + slug })}// slug already existsif (existUrl != null) {return res.status(400).send({ message: 'Slug already exists.' })}}// target url existsconst existSlug = await storage.getSlugByUrl(url)// url exists & no custom slugif (existSlug != null && slug === '') {return res.send({ slug: existSlug, link: origin + existSlug })}// create if not existsconst newSlug = await storage.addLink(url, slug)// responseres.send({ slug: newSlug, link: origin + newSlug })} catch (e) {return res.status(500).send({ message: e.message })}}

結(jié)語
戳下方,立即查看作者原文!

