---
# System prepended metadata

title: Cloud Compute Project Demo Notes

---

---
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)