Untuk mengantisipasi Moscow Python Conf ++ kami, kami secara singkat berbicara dengan Oleg Churkin, teknisi startup fintech, tentang pengalamannya yang luas dengan Celery: setengah juta tugas latar belakang, bug, dan pengujian.
- Ceritakan beberapa detail tentang proyek yang sedang Anda kerjakan?Saat ini saya terlibat dalam startup
fintech Statusmoney , yang menganalisis data keuangan pengguna dan memungkinkan pelanggan untuk membandingkan pendapatan dan pengeluaran mereka dengan kelompok orang lain, menetapkan batas pengeluaran, menonton bagaimana kekayaan tumbuh atau turun di grafik. Sejauh ini, proyek ini hanya berfokus pada pasar Amerika Utara.
Untuk menganalisis informasi keuangan, kami mengunduh dan menyimpan semua transaksi pengguna dan berintegrasi dengan biro kredit untuk mendapatkan data tambahan tentang riwayat kredit.
Sekarang kami memiliki sekitar 200 ribu pengguna dan 1,5 terabyte berbagai data keuangan dari para pemasok kami. Sekitar satu juta transaksi
- Apa tumpukan teknologi?Tumpukan proyek saat ini adalah Python 3.6, Django / Celery, dan Amazon Web Services. Kami secara aktif menggunakan RDS dan Aurora untuk menyimpan data relasional, ElasticCache untuk cache dan untuk antrian pesan, CloudWatch, Prometheus dan Grafana untuk menyiagakan dan memantau. Yah dan, tentu saja, S3 untuk penyimpanan file.
Kami juga sangat aktif dalam menggunakan Seledri untuk berbagai tugas bisnis: mengirim pemberitahuan dan surat massal, pembaruan massal berbagai data dari layanan eksternal, API asinkron, dan sejenisnya.
Di ujung depan, kita memiliki React, Redux, dan TypeScript.
- Apa sifat utama dari beban dalam proyek Anda dan bagaimana Anda menghadapinya
apakah kamu mengatasinya?Beban utama dalam proyek ini terletak pada tugas latar belakang yang dilakukan Selery. Setiap hari kami meluncurkan sekitar setengah juta tugas yang berbeda, misalnya memperbarui dan memproses (ETL) data keuangan pengguna dari berbagai bank, biro kredit dan lembaga investasi. Selain itu, kami mengirim banyak pemberitahuan dan menghitung banyak parameter untuk setiap pengguna.
Kami juga telah mengimplementasikan API asinkron, yang "memutarkan" hasil dari sumber eksternal dan juga menghasilkan banyak tugas.
Saat ini, setelah menyetel infrastruktur dan Seledri, kami dapat mengatasi tanpa masalah, tetapi sebelum itu terjadi, saya pasti akan memberi tahu Anda tentang hal itu dalam laporan saya.
- Bagaimana Anda mengukur semuanya dan memberikan toleransi kesalahan?Untuk penskalaan, kami menggunakan Grup Penskalaan Otomatis, kotak alat yang disediakan oleh platform cloud AWS kami. Skala Django dan Seledri baik secara horizontal, kami hanya menetapkan batas sedikit pada jumlah maksimum memori yang digunakan oleh pekerja uWSGI / Seledri.
- Dan monitor dengan apa?Untuk memantau penggunaan cpu / memori dan ketersediaan sistem itu sendiri, kami menggunakan Cloud Watch di AWS, kami mengumpulkan berbagai metrik dari aplikasi dan dari pekerja Seledri menggunakan Prometheus, dan membuat grafik dan mengirimkan peringatan ke Grafana. Untuk beberapa data di Grafana kami menggunakan ELK sebagai sumber.
- Anda menyebutkan API asinkron. Ceritakan sedikit tentang bagaimana Anda memilikinya.
diatur.Pengguna kami memiliki kesempatan untuk "menautkan" rekening bank mereka (atau keuangan lainnya) dan memberi kami akses ke semua transaksi mereka. Kami menampilkan proses "menautkan" dan memproses transaksi secara dinamis di situs, untuk ini kami menggunakan kumpulan hasil saat ini dari backend, dan backend mengambil data, memulai pipa ETL dari beberapa tugas berulang.
- Seledri adalah produk yang kontroversial. Bagaimana kamu tinggal bersamanya?Menurut perasaan saya, hubungan kami dengan Celery sekarang berada pada tahap "Penerimaan" - kami menemukan cara kerja kerangka kerja di dalam, mengambil pengaturan untuk diri kami sendiri, memilah-milah penyebaran, "overlay" dengan pemantauan dan menulis beberapa perpustakaan untuk mengotomatisasi tugas-tugas rutin. Beberapa fungsi tidak cukup bagi kami "di luar kotak", dan kami menambahkannya sendiri. Sayangnya, pada saat memilih tumpukan teknologi untuk proyek tersebut, Celery tidak memiliki banyak pesaing, dan jika kami menggunakan solusi yang lebih sederhana, kami harus menambahkan lebih banyak.
Kami belum pernah menemukan bug di versi keempat dari Selery. Sebagian besar masalah terkait baik dengan kurangnya pemahaman kita tentang bagaimana semua ini bekerja, atau dengan faktor pihak ketiga.
Saya akan berbicara tentang beberapa perpustakaan yang ditulis dalam proyek kami dalam presentasi saya.
- Pertanyaan favorit saya. Bagaimana Anda menguji semua musik ini?Tugas seledri diuji dengan baik dengan tes fungsional. Kami menguji integrasi dengan bantuan pengujian otomatis dan pengujian manual pada QA-stand dan staging. Saat ini, kami belum memutuskan beberapa masalah dengan pengujian tugas berkala: bagaimana membiarkan penguji menjalankannya dan bagaimana memverifikasi bahwa jadwal untuk tugas ini benar (memenuhi persyaratan)?
- Dan tes untuk frontend dan tata letak? Apa rasio manual ke
pengujian otomatis?Di depan, kami menggunakan Jest dan menulis hanya unit test untuk logika bisnis. 55% dari kasus-kasus kritis bisnis kami saat ini dicakup oleh swa-uji Selenium, saat ini kami memiliki sekitar 600 tes di TestRail dan 3.000 tes di backend.
- Tentang apa laporan Anda tentang Moscow Python Conf ++?Dalam
laporan itu saya akan memberi tahu Anda secara rinci tugas apa dan bagaimana Anda dapat menggunakan Seledri, dan membandingkannya dengan pesaing yang ada. Saya akan menjelaskan cara menghindari berbagai garu saat merancang sistem yang kompleks dengan sejumlah besar tugas: pengaturan mana yang harus ditentukan segera, dan mana yang bisa dibiarkan nanti, cara menggunakan versi kode yang baru agar tidak kehilangan tugas saat beralih lalu lintas, saya akan berbagi perpustakaan tertulis untuk tugas pemantauan dan meledak.
Saya juga akan menyentuh pada topik menerapkan pipa ETL pada Seledri dan menjawab bagaimana menggambarkannya dengan indah, kebijakan coba lagi apa yang akan digunakan, bagaimana cara membatasi jumlah tugas yang dilakukan dalam kondisi sumber daya terbatas. Selain itu, saya akan menjelaskan alat apa yang kami gunakan untuk menerapkan pemrosesan batch tugas, yang secara ekonomis mengkonsumsi memori yang tersedia.
Secara umum, jika Anda menginginkan detail untuk semua poin di atas, datanglah. Saya harap laporan saya bermanfaat dan menarik.