嵌入式工程師月薪多少域名查詢seo
現(xiàn)在,短視頻內(nèi)容已成為新趨勢(shì),每個(gè)人都在從TikTok、Instagram、YouTube等平臺(tái)上消費(fèi)這些內(nèi)容。讓我們看看如何為TikTok創(chuàng)建一個(gè)系統(tǒng)。
這樣的應(yīng)用程序看起來(lái)很小,但在后臺(tái)有很多事情正在進(jìn)行。以下是相關(guān)的挑戰(zhàn):
?由于該應(yīng)用程序在全球范圍內(nèi)使用,將會(huì)有大量的請(qǐng)求發(fā)送到服務(wù)器。這最終會(huì)增加服務(wù)器的負(fù)載。?將視頻上傳到后臺(tái)將是一個(gè)巨大的任務(wù),這將增加服務(wù)器的負(fù)載并阻塞。?流暢地播放視頻,無(wú)緩沖。?一個(gè)基于用戶興趣推薦視頻的推薦系統(tǒng)。
讓我們逐一了解每個(gè)部分。我將其分為三個(gè)部分:
?與用戶相關(guān)的服務(wù)?與視頻發(fā)布相關(guān)的服務(wù)?與點(diǎn)贊和評(píng)論相關(guān)的服務(wù)?推薦服務(wù)
與用戶相關(guān)的服務(wù)
這是一個(gè)包含與用戶相關(guān)服務(wù)的服務(wù),如下所示:
?注冊(cè):?用戶將在應(yīng)用程序中注冊(cè)。?登錄:?它將對(duì)憑證進(jìn)行身份驗(yàn)證,并向應(yīng)用程序發(fā)送響應(yīng)。?登出:?用戶將從應(yīng)用程序中注銷。?關(guān)注:?如果用戶想要關(guān)注或取消關(guān)注其他用戶,則可以通過(guò)此服務(wù)完成。
為了存儲(chǔ)與用戶相關(guān)的數(shù)據(jù),我們將使用基于SQL的數(shù)據(jù)庫(kù),如MYSQL或PostgreSQL,因?yàn)榕c用戶相關(guān)的數(shù)據(jù)(例如追蹤關(guān)注者)將會(huì)是關(guān)聯(lián)數(shù)據(jù),所以這是一個(gè)適當(dāng)?shù)倪x擇。
為了優(yōu)化數(shù)據(jù)庫(kù)性能,我們將使用主從架構(gòu)。主數(shù)據(jù)庫(kù)用于執(zhí)行寫操作,從數(shù)據(jù)庫(kù)用于執(zhí)行讀操作。要了解有關(guān)此內(nèi)容的更多信息,可以閱讀文章如何優(yōu)化數(shù)據(jù)庫(kù)性能并擴(kuò)展它?[3]

現(xiàn)在讓我們討論用戶服務(wù)的流程。應(yīng)用程序?qū)l(fā)出API調(diào)用,API Gateway將管理這些API。它將為用戶服務(wù)路由請(qǐng)求。
請(qǐng)求將通過(guò)負(fù)載均衡器進(jìn)行,負(fù)載均衡器下將有多個(gè)用戶服務(wù)實(shí)例。根據(jù)負(fù)載,它將決定哪個(gè)實(shí)例將處理請(qǐng)求。一旦請(qǐng)求被處理,負(fù)載均衡器將將響應(yīng)發(fā)送回API網(wǎng)關(guān),然后再發(fā)送回應(yīng)用程序。
與視頻發(fā)布相關(guān)的服務(wù)
這是一個(gè)包含與視頻發(fā)布相關(guān)服務(wù)的服務(wù),如下所示:
?上傳視頻:?將視頻上傳到后臺(tái)服務(wù)器。?發(fā)布:?如果用戶想要?jiǎng)?chuàng)建、編輯或刪除帖子,則可以通過(guò)此服務(wù)完成。
為了存儲(chǔ)與帖子相關(guān)的數(shù)據(jù),我們將使用基于NoSQL的數(shù)據(jù)庫(kù),如MongoDB。對(duì)于每個(gè)用戶,可能會(huì)有成千上萬(wàn)的帖子,這將導(dǎo)致大量數(shù)據(jù)。
為了實(shí)現(xiàn)最佳性能,擴(kuò)展數(shù)據(jù)庫(kù)可能會(huì)很困難。NoSQL數(shù)據(jù)庫(kù)支持水平分片,這有助于我們?cè)诓挥绊懶阅艿那闆r下擴(kuò)展數(shù)據(jù)庫(kù)。要了解有關(guān)數(shù)據(jù)庫(kù)分片的更多信息,可以閱讀文章關(guān)于數(shù)據(jù)庫(kù)分片的一切 | 擴(kuò)展數(shù)據(jù)庫(kù)[4]。

現(xiàn)在讓我們討論視頻服務(wù)的流程。應(yīng)用程序?qū)l(fā)出API調(diào)用,API Gateway將管理這些API。它將為視頻服務(wù)路由請(qǐng)求。
請(qǐng)求將通過(guò)負(fù)載均衡器進(jìn)行,負(fù)載均衡器下將有多個(gè)視頻服務(wù)實(shí)例。根據(jù)負(fù)載,它將決定哪個(gè)實(shí)例將處理請(qǐng)求。一旦請(qǐng)求被處理,負(fù)載均衡器將將響應(yīng)發(fā)送回API網(wǎng)關(guān),然后再發(fā)送回應(yīng)用程序。
如何使文件在全球范圍內(nèi)可訪問(wèn)而不增加下載時(shí)間?
視頻文件將上傳到單獨(dú)的云存儲(chǔ)服務(wù),如Amazon S3 Bucket?,F(xiàn)在,如果我們想在世界范圍內(nèi)任何地方訪問(wèn)文件而沒(méi)有任何延遲,那么該文件將發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN),它將將媒體文件更新到世界各地的不同數(shù)據(jù)云存儲(chǔ)中。
我們能進(jìn)一步優(yōu)化以減少下載時(shí)間嗎?
還有一個(gè)挑戰(zhàn)需要解決,即原始視頻的大小可能較大,因此如果將大文件發(fā)送回客戶端,則下載時(shí)間會(huì)更長(zhǎng),這會(huì)影響用戶體驗(yàn)。
文件一旦上傳到云存儲(chǔ),您可以在數(shù)據(jù)庫(kù)中存儲(chǔ)文件路徑。然后將帖子/視頻詳細(xì)信息發(fā)送到消息隊(duì)列系統(tǒng),如Kafka或RabbitMQ。
為了使用戶體驗(yàn)流暢,我們需要壓縮視頻并為不同設(shè)備創(chuàng)建不同分辨率的視頻。視頻處理工作者將從消息隊(duì)列系統(tǒng)接收視頻詳細(xì)信息,然后從
云存儲(chǔ)中提取文件并進(jìn)行處理。處理完成后,這些新的視頻文件將發(fā)送到CDN。
如何訪問(wèn)壓縮的視頻文件?
現(xiàn)在您可能會(huì)想,應(yīng)用程序如何知道上述討論中壓縮的視頻的文件路徑?由于壓縮文件將存儲(chǔ)在分類文件夾中,因此可以根據(jù)分辨率和文件名輕松查找文件。
視頻發(fā)布API只會(huì)返回文件名,而要訪問(wèn)文件,應(yīng)用程序?qū)⒃赨RL本身中添加分辨率細(xì)節(jié),例如/media//。
當(dāng)訪問(wèn)此URL時(shí),它將經(jīng)過(guò)API網(wǎng)關(guān),并從URL中提取分辨率和文件名詳細(xì)信息。然后它將在緩存系統(tǒng)(Redis)中檢查,如果文件不可用,則將訪問(wèn)CDN并通過(guò)它獲取文件。然后將其添加到緩存中,以便如果再次請(qǐng)求相同文件,則不必從CDN獲取。
點(diǎn)贊和評(píng)論相關(guān)的服務(wù)
這是一個(gè)包含與視頻點(diǎn)贊和評(píng)論相關(guān)服務(wù)的服務(wù)。正如名稱所示,通過(guò)此服務(wù),我們可以為特定帖子更新點(diǎn)贊和評(píng)論。與上面討論的其他流程相同。

推薦服務(wù)
通過(guò)此服務(wù),基于用戶偏好推薦一系列帖子。幕后有很多其他事情正在進(jìn)行。讓我們看看幕后運(yùn)行的流程。

然后,創(chuàng)建一個(gè)帖子后,它將被發(fā)送到消息隊(duì)列系統(tǒng),然后消費(fèi)者將提取數(shù)據(jù)并將數(shù)據(jù)更新到大數(shù)據(jù)(Hadoop)中。
將為機(jī)器學(xué)習(xí)服務(wù)(如PyTorch和Tensorflow)設(shè)置單獨(dú)的服務(wù)器,在這里它將從大數(shù)據(jù)中提取數(shù)據(jù)并訓(xùn)練模型。推薦服務(wù)將使用此AI模型為給定用戶推薦帖子。
結(jié)論
這是類似于TikTok的應(yīng)用程序的基本級(jí)別的系統(tǒng)設(shè)計(jì),根據(jù)需求可以添加許多其他內(nèi)容,如跟蹤用戶行為(用戶參與的帖子,用戶關(guān)注的帖子)。基于此,可以改進(jìn)AI模型,為用戶推薦帖子。