Diskusi topik tentang
Meteor jarang terlihat di antara penutur Rusia (dinilai oleh saluran di kereta dan VK publik, Habr). Pertukaran pengalaman mungkin dilakukan, tetapi sebagian besar di forum meteor resmi.
Untuk waktu yang lama tidak ada artikel tentang Habré di Meteor, oleh karena itu saya ingin berbagi cerita kami.

Saya akan memberi tahu Anda tentang proyek kami, bagaimana kami datang ke Meteor dan bagaimana kami terbang di atasnya. Saya akan mencoba untuk tidak masuk ke detail atau hal-hal yang sangat spesifik - saya akan meninggalkan mereka untuk diskusi, atau artikel terpisah.
Tentang proyek
Kami memiliki sekolah pemrograman online untuk anak-anak.
PolinaV telah menulis
artikel tentang cara kami melakukan ini secara online. Pada awal 2018, kami mulai aktif mengembangkan sistem kami - Gena.
Kami membutuhkan gen karena beberapa alasan:
- sejumlah besar alat yang berbeda - unggul, layanan untuk mempertahankan jadwal, formulir, dll.;
- bekerja dengan alat secara terpisah tidak nyaman.
Untuk versi pertama, kami menyoroti fungsi utama:
- manajemen jadwal;
- manajemen siswa / pelatih;
- manajemen tugas internal.
Kami menghitung jumlah pengguna, serta jumlah data yang akan dihasilkan. Informasi ini dan rencana pengembangan yang kasar telah membantu kami meletakkan arsitektur Gen di masa depan.
Gene dan Meteor
Saya mencoba Meteor pada tahun 2016 ketika saya perlu membuat beberapa prototipe sederhana. Pada saat itu, saya memiliki keterampilan C # (tetapi bukan ASP), PHP, dan sedikit JS.
Saya ingin memiliki satu bahasa untuk bagian depan dan belakang, agar tidak menyulitkan proyek dan tidak menduplikasi logika (mungkin saya berbohong sedikit tentang prototipe sederhana :)). Oleh karena itu, saya memutuskan untuk memilih hanya JS, dan NodeJS dan MongoDB untuk itu.
Bagi saya, dan juga pahlawan dari artikel
ini , pengembangan web adalah sekelompok nama yang tidak dikenal. Dan karena sudah ada pengalaman pengembangan, saya mengerti bahwa ada solusi siap pakai yang memungkinkan Anda untuk "hanya melakukan pekerjaan" tanpa mengkhawatirkan sisanya.
Saya tidak ingat bagaimana Meteor ditemukan, tetapi menyuap saya dengan beberapa hal:
- Mudah dipasang / dikonfigurasi. Satu perintah di konsol - dan itu milik Anda;
- saluran transfer data siap pakai (WebSocket + DDP );
- built-in database - MongoDB (+ minimongo );
- alat sederhana untuk menulis UI - Blaze ;
- dokumentasi yang baik dan artikel / video terkait.
Setelah menerapkan beberapa prototipe, saya mulai mengikuti pengembangan Meteor, mempelajari bagian dalam dan melihat proyek-proyek kecil untuk saya sendiri.
Dan sekarang tiba saatnya untuk memilih alat untuk implementasi Gen. Saya akan menghilangkan rincian pencarian instrumen lain, saya akan meninggalkan argumen yang mendukung meteor:
- seperti yang saya tulis di atas - semua dalam satu kotak;
- Kami dapat mengorbankan kinerja dan konsumsi sumber daya dengan imbalan kemudahan pengembangan;
- kami ingin cepat mendapatkan fitur baru, sehingga nantinya dapat ditingkatkan atau dibuang;
- dimungkinkan untuk periode waktu yang singkat (2-3 hari) untuk menghubungkan JS pengembang ke proyek;
- Ada database paket yang sudah jadi.
Saya akan secara terpisah mengatakan tentang
Blaze - Saya sengaja mengambil solusi yang lebih sederhana agar tidak membuang waktu mempelajari React / Vue yang lebih kompleks (ya, mereka tidak melompat ke kereta hype).
Untuk mempertahankan tugas dan dokumentasi, kami menggunakan Jira + Confluence. Kode diselesaikan di Bitbucket.
Akibatnya, ada pendapat seperti itu:
- jika Anda memiliki sesuatu yang sangat sederhana, ambil JS / CSS / HTML mentah dan lakukan (pendaratan, misalnya);
- jika ada persyaratan khusus untuk kinerja, sumber daya, fungsi - mencarinya;
- dalam kasus lain - ambil kerangka kerja yang sudah jadi, misalnya, Meteor. Jika Anda memasak dengan benar, maka seharusnya tidak ada masalah.
Proses pengembangan
Setelah memilih alat, fase implementasi rencana dimulai. Kami tidak selalu memikirkan persyaratan sampai akhir, jadi terkadang kami harus mengulang fitur beberapa kali. Kami juga memiliki banyak ide, dan kami mencoba untuk meluncurkan dan mengujinya pada pengguna nyata sesegera mungkin.
Struktur proyek (struktur folder dan file) membantu menghindari pertanyaan tentang apa dan di mana seharusnya. Ini ditulis dalam
dokumentasi . Menulis kode yang mudah didukung dan extensible lebih mudah ketika ada pemisahan yang jelas. Fungsionalitas UI dibagi menjadi beberapa komponen, yang memungkinkan Anda mengisolasi blok fungsi dan menggunakannya kembali, dan ketika refactoring Anda tidak merusak lantai proyek :).
Ada banyak
paket siap pakai yang memecahkan masalah tertentu. Misalnya, di luar kotak, Meteor menyediakan manajemen akun (pendaftaran, otorisasi, dll.), Mengirim Email. Pihak ketiga menyelesaikan masalah lain. Beberapa dari mereka adalah lapisan untuk paket
npm , sehingga basis data dari solusi siap pakai sangat besar.
Kesalahan saya adalah menolak tes. Keputusan ini untuk menghemat waktu, karena "pelanggan tidak melihat tes." Namun, mengamati situasi dengan bug yang muncul di Jire, saya menyadari bahwa sudah waktunya untuk mengubah pendekatan. Mereka mengembalikan tes dan mulai menulis pada TDD. Selain itu, setelah kode masuk ke cabang pengembangan, mereka mulai menjalankan tes melalui
CircleCI untuk memastikan bahwa tidak ada yang memecahkan apa pun.
Untuk mempertahankan Gaya Kode, ESLint +
lebih cantik telah dikonfigurasi . Ini menghindari koreksi gaya dan kesalahan konyol pada tahap pertimbangan PR (permintaan tarik). Dan agar kode "buruk" tidak mencapai git,
Husky dikonfigurasikan - alat yang dapat melakukan tugas yang diperlukan pada tahap komit (dan tidak hanya). Jadi, sebelum kode masuk ke komit, ia melewati pemeriksaan melalui eslint dan lebih cantik.
Perlu disebutkan secara terpisah tentang minus penting - kecepatan membangun proyek. Pertama kali perakitan membutuhkan waktu sekitar 30 detik, tergantung pada setrika. Selanjutnya, ketika mengubah kode, prosesnya memakan waktu sekitar 5-10 detik. Pada setrika yang lemah, jumlahnya bisa lebih besar. Saya menggunakan MacBook pro mid 15, i7, 16gb, saya baik-baik saja.
Mereka memutuskan untuk meluncurkan gen di Digital Ocean. Ada satu alasan - harga.
Hosting resmi untuk meteor sayang. AWS lebih murah, tetapi lebih rumit daripada DO. Ada alternatif lain, tetapi memutuskan untuk DO.
Penerbangan
Saat ini, kami dapat secara bersamaan memiliki hingga 100 pengguna yang terhubung ke Gene. Ini tidak banyak, tetapi kami juga memiliki margin keselamatan yang besar. Kami berharap dapat menahan 1000CCU pada konfigurasi saat ini.
Sejauh ini, dua server $ 10 + $ 5 proksi sudah cukup untuk kita (untuk menyeimbangkan). Setiap server adalah aplikasi simpul + MongoDB. Server untuk pemantauan diluncurkan secara terpisah. Kami telah memperkirakan pertumbuhan lalu lintas, jadi kami akan punya waktu untuk menyebarkan server baru (naikkan tetesan dan tambahkan garis ke hulu).
Mencurahkan Gen versi baru adalah suatu kesenangan. Untuk melakukan ini, sebuah skrip kecil ditulis yang mengumpulkan proyek dalam tar (dengan perintah
meteor build ), mengunggahnya ke server, membukanya, menjalankan
npm i dan memulai daemon. Biasanya butuh 1 menit.
Jika Anda menghilangkan detail, maka sesuatu seperti ini (jika menarik, saya akan mempersiapkan intinya):
Kami mengamati Gena melalui
Kadira (gambar di awal posting). Saya harus menari sedikit dengan rebana untuk berlari di fasilitas saya, tetapi itu sepadan. Semuanya jelas dan bisa dimengerti.
Belum ada masalah dengan stabilitas. Kecelakaan atau kebocoran memori yang tidak disengaja tidak diamati.
Kesimpulan
Kami meluncurkan gen setengah tahun setelah dimulainya. Tim telah tumbuh, seperti halnya Gene. Kemungkinan besar, kami akan melampaui monolith dan akan ada layanan microser, antrian, paket individu, dll. Tapi ini adalah kisah yang sangat berbeda ...
Meteor berubah. Bagi yang sudah mencobanya di versi 1.4 dan di bawah, saya sarankan melihat
daftar perubahan . Saya harap Anda akan terkejut.
Daftar bahan yang berguna di Meteor:
Siapa yang bekerja dengan meteor atau tertarik -
bergabunglah dengan ruang obrolan kami di telegram.
Saya minta maaf jika saya tidak mengungkapkan topik penting, saya akan mencoba menjawab di komentar.