Satu backend tunggal telah berkembang melebihi kapasiti oleh perniagaan kesihatan dan nutrisi yang semakin berkembang. Trafik AI chatbot, pengambilan data boleh pakai yang berat, dan permintaan API harian semuanya bersaing untuk sumber yang sama — menjadikan sistem sukar untuk diskalakan dan berisiko untuk digunakan. Kami menyusun semula ia menjadi perkhidmatan yang fokus, boleh digunakan secara bebas yang diatur di belakang satu API gateway, berjalan di AWS.
Cabaran
- Satu codebase mengendalikan semua tugas. Satu aliran kerja termasuk pengurusan pengguna, AI chatbot inferens, resipi, dan analitik data kesihatan. Peningkatan mendadak dalam mana-mana satu bidang merendahkan prestasi seluruh platform, dan setiap perubahan bermakna menggunakan semula keseluruhannya.
- Profil sumber yang sangat berbeza. Permintaan chatbot berkuasa LLM memerlukan banyak CPU dan memori serta bersifat 'bursty'; pengambilan data boleh pakai adalah berat penulisan dan berterusan; API CRUD teras adalah ringan dan berterusan. Menetapkan satu pelayan untuk ketiga-tiga ini bermakna membayar lebih untuk sesetengah beban kerja dan mengabaikan yang lain.
- Penskalaan dan penggunaan bebas. Pasukan itu perlu menskala beban kerja AI tanpa menyentuh API teras, dan menghantar perubahan kepada satu domain tanpa membahayakan yang lain.
Satu titik masuk yang selamat dan tunggal. Walaupun terdapat pelbagai perkhidmatan backend, pelanggan (mudah alih, web, admin) memerlukan satu permukaan yang konsisten dan disahkan untuk berkomunikasi — tidak membocorkan topologi perkhidmatan dalaman kepada dunia luar.
Penyelesaian Kami
Kami membahagikan platform kepada tiga perkhidmatan NestJS yang fokus di belakang AWS Application Load Balancer, dengan pelayan utama bertindak sebagai API gateway dan orchestrator. Ia memiliki pengesahan dan domain teras, dan menyerahkan kerja khusus kepada mikroservis chatbot dan kesihatan melalui REST yang disahkan. Lapisan data dan pemesejan kongsi memastikan perkhidmatan-perkhidmatan ini berpasangan longgar tetapi konsisten.

Seni Bina
- Pelayan Utama (NestJS) — API gateway dan orchestrator: pengesahan, pengguna, matlamat, resipi, penjadualan, dan pemberitahuan. Semua klien mempunyai satu titik masuk awam tunggal.
- Mikroservis Chatbot (NestJS) — Perkhidmatan perbualan AI dikuasakan oleh Azure OpenAI (GPT-4o) melalui LangChain/LangGraph, dengan RAG yang disokong Elasticsearch untuk pengambilan resipi dan pengetahuan.
- Mikroservis Kesihatan (NestJS) — mengambil dan mengagregat data kesihatan boleh pakai dan manual (Apple Health, Health Connect) serta menyediakan analitik.
- AWS ECS Fargate menjalankan tiga perkhidmatan terkontena, setiap satu dengan penetapan saiz CPU/memori dan polisi penskalaan sendiri.
- Application Load Balancer menamatkan HTTPS dan menghala lalu lintas berdasarkan laluan ke perkhidmatan yang betul.
- Lapisan data kongsi — MongoDB Atlas (storan utama), Redis (cache/sesi), Elasticsearch (carian), ActiveMQ (penghantaran pemberitahuan async).
CI/CD — Bina Docker multi-peringkat dihantar ke Amazon ECR, digunakan ke ECS sebagai kemas kini bergulir.
Ciri-ciri Utama
1. Corak orchestrator. Pelayan utama adalah satu-satunya perkhidmatan yang terdedah kepada klien. Ia mengesahkan setiap permintaan, kemudian membuat panggilan perkhidmatan-ke-perkhidmatan dalaman — jadi topologi backend kekal peribadi dan integrasi klien kekal mudah.
2. Panggilan perkhidmatan-ke-perkhidmatan yang disahkan. Komunikasi antara perkhidmatan adalah REST melalui klien HTTP kongsi, dijamin dengan kunci API bearer setiap perkhidmatan:
// Pelayan utama menyerahkan permintaan AI kepada mikroservis chatbot const reply = await this.microserviceClient.post( this.chatbotApiKey, // kunci bearer setiap perkhidmatan `${this.chatbotUrl}/chat`, { user, question, sessionId, attachment }, ); |
3. Penskalaan bebas bagi setiap beban kerja. Setiap perkhidmatan adalah definisi tugas Fargate yang berasingan dengan saiznya sendiri — perkhidmatan chatbot yang berat memori menskala secara bebas daripada API teras yang ringan, jadi lonjakan trafik AI tidak pernah melumpuhkan permintaan harian.
4. Perkhidmatan AI bersaiz tepat dengan ketahanan terbina dalam. Perkhidmatan chatbot berputar merentasi beberapa kunci Azure OpenAI, secara automatik gagal berfungsi apabila had kadar dicapai atau terdapat ralat — memastikan ciri-ciri AI responsif di bawah beban.
5. Pemberitahuan melalui pemesejan asinkronus. Kerana barisan tunda ActiveMQ memisahkan dorongan dan peringatan berdasarkan masa daripada aliran permintaan, penghantaran pemberitahuan tidak pernah menghalang atau melambatkan trafik API teras.
6. Penggunaan yang boleh diulang, terasing. Dari ECR ke ECS, setiap perkhidmatan dihantar sebagai imej Docker sendiri. Pengubahsuaian kepada perkhidmatan kesihatan hanya menggunakan semula perkhidmatan kesihatan—pelepasan pantas, berisiko rendah dengan kemas kini bergulir yang disemak kesihatannya.
7. Satu kontrak klien yang konsisten. Mudah alih (React Native) dan papan pemuka pentadbir semuanya berkomunikasi dengan satu titik masuk HTTPS yang seimbang beban — pembahagian dalaman kepada mikroservis tidak kelihatan kepada mereka.
Hasil
- Pada masa kini, beban kerja untuk AI chatbot, data kesihatan, dan API teras berskala secara berasingan; tiada tugas yang boleh merosotkan yang lain.
- Setiap perkhidmatan digunakan secara tersendiri, mengubah pelepasan platform yang berisiko menjadi kemas kini yang pantas dan terasing.
- Pengkomputeran bersaiz tepat bagi setiap perkhidmatan, menghapuskan penyediaan berlebihan pelayan satu-saiz-sesuai-untuk-semua.
- Satu titik masuk yang selamat dan seimbang beban menjadikan integrasi klien mudah manakala backend kekal peribadi dan modular.
Timbunan Teknologi
NestJS · TypeScript · Node.js 20 · Azure OpenAI (GPT-4o) · LangChain · MongoDB Atlas · Redis · Elasticsearch · ActiveMQ · AWS ECS Fargate · Application Load Balancer · Amazon ECR · Docker
Blog Lain
1. Bagaimana Kami Menskala Beban Kerja Pemprosesan Video dengan AWS ECS
2. Bagaimana Kami Menggunakan AWS ECR untuk Mengurus dan Menggunakan Imej Kontena
3. Bagaimana Kami Menggunakan AWS EC2 untuk Beban Kerja dalam Video Berprestasi Tinggi

