亚洲色成人网站www永久,亚洲欧美人成视频一区在线,亚洲国产成人高清在线观看,亚洲精品久久久久久动漫,亚洲国产精品久久电影欧美

數(shù)據(jù)專欄

智能大數(shù)據(jù)搬運(yùn)工,你想要的我們都有

科技資訊

科技學(xué)院

科技百科

科技書籍

網(wǎng)站大全

軟件大全

Serverless 的概念或應(yīng)用場景我們以前講過很多,這里不再冗述。概括性地講 —— Serverless 的內(nèi)涵就是對全部底層資源和運(yùn)維工作的封裝,讓開發(fā)者更專注于業(yè)務(wù)邏輯。
完備的基礎(chǔ)性文章推薦閱讀這兩篇: Serverless 基本概念入門 Serverless 的運(yùn)行原理與組件架構(gòu)
本文嘗試從出圈的角度,以更接地氣的方式聊聊 Serverless。
先講個故事,疫情期間在家辦公,大家肯定沒少做飯,自己做飯才體會到家務(wù)不易,你需要:買菜買鍋、處理食材、煎炒蒸煮、最后洗碗。 聽起來是不是還挺像軟件開發(fā)?你需要有云服務(wù)器、后臺開發(fā)、前端開發(fā)、還有運(yùn)維。
你想著,要是我能只翻兩下鏟子,然后就能吃飯那該多好。
巧了,有一些商家就提供了這種服務(wù),幫你準(zhǔn)備好了鍋、洗干凈的食材、專業(yè)的廚師指點(diǎn),你只要進(jìn)去翻兩下鏟子,就能煮一頓精美的飯食!而且不用洗碗。 對應(yīng)到軟件開發(fā),開發(fā)者只需要關(guān)注業(yè)務(wù)邏輯(炒菜),而底層資源和運(yùn)維工作(鍋碗瓢盆、食材處理)都不用再操心。
終于到了正式復(fù)工的時間,你不用再自己做飯,新買的廚具就閑置了。你回想起昨天在商圈里的美好體驗(yàn),家里的廚具要是也在能用的時候付費(fèi),不用不收費(fèi)多好啊。 嘿嘿,Serverless 亦如此,按水電般計費(fèi),當(dāng)部署在其上的函數(shù)運(yùn)行時才收費(fèi)。
所以回到題目中來,Serverless 本身是云計算相關(guān)技術(shù),并非前端技術(shù),為何前端要關(guān)注 Serverless 呢?
答案很簡單 —— 解放生產(chǎn)力。
你的廚房里已經(jīng)準(zhǔn)備好了所有廚具和處理好的食材,你現(xiàn)在只需要關(guān)心火候認(rèn)真炒菜,成為美食博主指日可待。也就是文首所說的 —— 開發(fā)者能更專注于業(yè)務(wù)邏輯,其他的底層資源和運(yùn)維工作已經(jīng)全部封裝好了。
▎Talk is cheap, show you the code.
先給大家展示一個基于 Serverless 構(gòu)建 docsify 文檔的 demo
這個三分鐘的 demo,不僅完成了 docsify 發(fā)布代碼的上傳,還包括了對象存儲 COS 資源的申請和配置。而這僅僅是我第一次使用 Serverless 來構(gòu)建應(yīng)用,可見它上手性之高。
▎原文鏈接: 《三分鐘入坑指北 Docsify + Serverless Framework 快速創(chuàng)建個人博客》
再進(jìn)一步,我們演示個 Fullstack Application。 該項目借助 Serverless 社區(qū)現(xiàn)有的 @serverless/tencent-express 和 @serverless/tencent-website 組件來完成。
下面是一張簡單的組件依賴圖:
在開始所有步驟前,需執(zhí)行 npm install -g serverless 命令,全局安裝 serverless cli 。
1. 準(zhǔn)備
新建項目目錄 fullstack-application-vue ,在該項目目錄下新增 api 和 dashboard 目錄。然后新增 serverless.yml 和 .env 配置文件,項目目錄結(jié)構(gòu)如下: ├── README.md // 項目說明文檔 ├── api // Restful api 后端服務(wù) ├── dashboard // 前端頁面 ├── .env // 騰訊云相關(guān)鑒權(quán)參數(shù):TENCENT_APP_ID,TENCENT_SECRET_ID,TENCENT_SECRET_KEY └── serverless.yml // serverless 文件
2. 后端服務(wù)開發(fā)
進(jìn)入目錄 api ,新增 app.js 文件,編寫 express 服務(wù)代碼,這里先新增一個路由 / ,并返回當(dāng)前服務(wù)器時間: const express = require('express') const cors = require('cors') const app = express() app.use(cors()) app.get('/', (req, res) => { res.send(JSON.stringfy({ message: `Server time: ${new Date().toString()}` })) }) module.exports = app
3. 前端頁面開發(fā)
本案例使用的是 Vue.js + Parcel 的前端模板,當(dāng)然你可以使用任何前端項目腳手架,比如 Vue.js 官方推薦的 Vue CLI 生成的項目。進(jìn)入 dashboard 目錄,編寫入口文件 src/index.js : // 這里初始是沒有 env.js 模塊的,第一次部署后會自動生成 require('../env') const Vue = require('vue') module.exports = new Vue({ el: '#root', data: { message: 'Click me!', isVisible: true, }, methods: { async queryServer() { const response = await fetch(window.env.apiUrl) const result = await response.json() this.message = result.message }, }, })
3. 配置
前后端代碼都準(zhǔn)備好了,再簡單配置下 serverless.yml 文件了: name: fullstack-application-vue frontend: component: '@serverless/tencent-website' # inputs 為 @serverless/tencent-website 組件的輸入 # 具體配置說明參考: https://github.com/serverless-components/tencent-website/blob/master/docs/configure.md inputs: code: src: dist root: frontend hook: npm run build env: # 下面的 API 服務(wù)部署后,獲取對應(yīng)的 api 請求路徑 apiUrl: ${api.url} api: component: '@serverless/tencent-express' # inputs 為 @serverless/tencent-express 組件的輸入 # 具體配置說明參考: https://github.com/serverless-components/tencent-express/blob/master/docs/configure.md inputs: code: ./api functionName: fullstack-vue-api apigatewayConf: protocol: https
4. 部署
部署時,只需要運(yùn)行 serverless 命令就行,當(dāng)然如果你需要查看部署中的 DEBUG 信息,還需要加上 --debug 參數(shù),如下: $ serverless # or $ serverless --debug
最后終端會 balabalabala~ , 看到綠色的 done 就行了。 體驗(yàn): 在線 Demo
既然是全棧,怎么少得了數(shù)據(jù)庫的讀寫呢?
▎感興趣的話可移步作者原文繼續(xù)閱讀: 《基于 Serverless Component 的全棧解決方案》
從這兩個小項目中已然得解 —— Serverless 的內(nèi)涵就是對全部底層資源和運(yùn)維工作的封裝,讓開發(fā)者更專注于業(yè)務(wù)邏輯。
▎寫在后面
題主在問題描述中的思考很有價值,其實(shí) Serverless 的確不是一個前端的概念,甚至都不是為了解決前端的問題而出現(xiàn)的, 它其實(shí)就是云計算發(fā)展的必經(jīng)過程。
就好比,底層語言的發(fā)展趨勢肯定是高級語言。而高級語言肯定也會封裝起底層的硬件,讓程序員無需關(guān)心硬件的狀態(tài),專注編碼。
十年前編程還是比較難的高級學(xué)科,如今小學(xué)已經(jīng)開展編程課程。其實(shí)就是因?yàn)槌绦蛘Z言的發(fā)展,讓編程變得更加友好。
同樣地,Serverless 的出現(xiàn)和完善,也是讓軟件開發(fā)變得更加友好。不僅前端需要關(guān)注 Serverless,它可能屬于每一種類型的應(yīng)用開發(fā)者。
而這會淘汰后端嗎?并不會!
后端會更聚焦于業(yè)務(wù)邏輯、數(shù)據(jù)處理、算法策略等更專精的事情。
汽車的出現(xiàn)讓馬車夫成為了司機(jī),技術(shù)在變革,工程師也將成長。 GitHub: github.com/serverless 官網(wǎng): serverless.com 社區(qū): Serverless 中文網(wǎng)
前沿探索
2020-08-21 02:41:55
我有一個朋友(這朋友不是我),朋友的單位里有一個小型圖書室,圖書室中存放了不少書。
盡管每本書都在相應(yīng)的區(qū)域里進(jìn)行了編號,但是畢竟沒有圖書館的管理系統(tǒng),大家找起來還是要花點(diǎn)時間的。為了讓大家更容易地找到這些書,朋友聯(lián)系我,打算讓我?guī)退鲆粋€簡單的圖書查詢系統(tǒng)(完整的圖書館管理系統(tǒng))。
Easier said than done,考慮到這還是有一定復(fù)雜度的項目,我打算使用騰訊云云函數(shù) SCF,把整個應(yīng)用部署到 Serverless 架構(gòu)上。
▎整體效果
左邊是圖書檢索系統(tǒng)的首頁;右邊是檢索演示,比方說我們搜索「精神」,App 就會依據(jù)返回相關(guān)的書籍??雌饋磉€不賴。
▎功能設(shè)計 將包含書籍信息的 Excel 表存放至騰訊云對象存儲 COS 中; 使用騰訊云云函數(shù)讀取并解析表格; 根據(jù)詞語相似性檢索對應(yīng)的圖書; 通過 MUI 制作前端頁面,頁面也存放在 COS 中。
▎具體實(shí)現(xiàn) Excel 樣式(包含書名和編號)
分類 tab:
核心代碼實(shí)現(xiàn): import jieba import openpyxl from gensim import corpora, models, similarities from collections import defaultdict import urllib.request with open("/tmp/book.xlsx", "wb") as f: f.write( urllib.request.urlopen("https://********").read() ) top_str = "abcdefghijklmn" book_dict = {} book_list = [] wb = openpyxl.load_workbook('/tmp/book.xlsx') sheets = wb.sheetnames for eve_sheet in sheets: print(eve_sheet) sheet = wb.get_sheet_by_name(eve_sheet) this_book_name_index = None this_book_number_index = None for eve_header in top_str: if sheet[eve_header][0].value == "書名": this_book_name_index = eve_header if sheet[eve_header][0].value == "編號": this_book_number_index = eve_header print(this_book_name_index, this_book_number_index) if this_book_name_index and this_book_number_index: this_book_list_len = len(sheet[this_book_name_index]) for i in range(1, this_book_list_len): add_key = "%s_%s_%s" % ( sheet[this_book_name_index][i].value, eve_sheet, sheet[this_book_number_index][i].value) add_value = { "category": eve_sheet, "name": sheet[this_book_name_index][i].value, "number": sheet[this_book_number_index][i].value } book_dict[add_key] = add_value book_list.append(add_key) def getBookList(book, book_list): documents = [] for eve_sentence in book_list: tempData = " ".join(jieba.cut(eve_sentence)) documents.append(tempData) texts = [[word for word in document.split()] for document in documents] frequency = defaultdict(int) for text in texts: for word in text: frequency[word] += 1 dictionary = corpora.Dictionary(texts) new_xs = dictionary.doc2bow(jieba.cut(book)) corpus = [dictionary.doc2bow(text) for text in texts] tfidf = models.TfidfModel(corpus) featurenum = len(dictionary.token2id.keys()) sim = similarities.SparseMatrixSimilarity( tfidf[corpus], num_features=featurenum )[tfidf[new_xs]] book_result_list = [(sim[i], book_list[i]) for i in range(0, len(book_list))] book_result_list.sort(key=lambda x: x[0], reverse=True) result = [] for eve in book_result_list: if eve[0] >= 0.25: result.append(eve) return result def main_handler(event, context): try: print(event) name = event["body"] print(name) base_html = '''
{{book_name}}
分類:{{book_category}}
編號:{{book_number}}
''' result_str = "" for eve_book in getBookList(name, book_list): book_infor = book_dict[eve_book[1]] result_str = result_str + base_html.replace("{{book_name}}", book_infor['name']) \ .replace("{{book_category}}", book_infor['category']) \ .replace("{{book_number}}", book_infor['number'] if book_infor['number'] else "") if result_str: return result_str except Exception as e: print(e) return '''
未找到圖書信息,請您重新搜索。
''' APIGW 配置:
首頁代碼: 圖書檢索系統(tǒng)