--- title: Cloud Compute Project Demo Notes --- # 簡介 - 用來從markdown轉成各種格式的telegram bot - Master-worker架構 - Rationale - 把需要replicate的部分跟不需要的部分分開 - 把開發工作分開 - Master - 接Telegram bot API - 把request丟到message queue (此處簡稱MQ) - 從MQ收到轉好(或失敗)的檔案再傳回給使用者 - 沒有replica,因為Telegram bot API有限連線數量 - Worker - 從MQ接受檔案,開subprocess轉,丟回去 - 多個replica,因為XeLaTeX轉PDF很慢會block在單一個使用者的轉檔上 # 使用技術(?) - K8S - 借用了homework 2的cluster - 也有先用K3S(比較輕量化的K8S的distribution)在本地測試 - (わーい原來K8S裡面可以直接用service的名字來當DNS name用,真好) - RabbitMQ message queue - 沒什麼理由,就它看起來滿有名的,然後有library可以用 - Docker - 兩個project都有dockerfile - 用github actions自動build然後推到docker hub上 - Request是[編碼成BSON](https://zh.wikipedia.org/zh-tw/BSON)丟MQ的 - 因為JSON沒辦法直接放binary data,BSON可以 - Rust - 原本worker用javascript寫 - 但是因為library有bug(似乎只會在K8S上發生,根據 @kotatsuyaki 的一小時的debug) 所以一併改寫成rust了 - [lapin (Rust AMQP library)](https://github.com/amqp-rs/lapin) - [teloxide (Rust Telegram Bot library)](https://github.com/teloxide/teloxide) - Pandoc - 轉檔工作是外包的 # 連結 - Code - [`pandoc-bot`](https://github.com/kotatsuyaki/pandoc-bot) (including K8S files) - [`pandoc-bot-worker`](https://github.com/kotatsuyaki/pandoc-bot-worker) - Bot [`@pandoc_convert_bot`](https://telegram.me/pandoc_convert_bot)