Kami merancang sistem berdasarkan pada microservices independen (terhubung melalui bus RabbitMq). Kode akan (untuk komponen pertama setidaknya) ditulis dalam python (baik python2 dan python3). Kami sudah memiliki aplikasi monolit yang mengimplementasikan beberapa logika bisnis, yang ingin kami refactor sebagai layanan microser, dan diperluas. Satu pertanyaan yang membuat saya khawatir adalah:
Apa cara terbaik untuk berbagi kode antara berbagai layanan microser. Kami memiliki fungsi pembantu umum (pemrosesan data, pencatatan, konfigurasi parsing, dll), yang harus digunakan oleh beberapa layanan Microsoft.
Layanan mikro sendiri akan dikembangkan sebagai proyek terpisah (git repositori). Perpustakaan umum dapat dikembangkan sebagai proyek mandiri juga. Bagaimana cara berbagi perpustakaan ini di antara layanan microser?
Saya melihat beberapa pendekatan:
- salin di sekitar versi perpustakaan yang diperlukan untuk setiap layanan Microsoft, dan perbarui sesuai kebutuhan
- lepaskan pustaka umum ke PyPi internal, dan daftarkan pustaka tersebut sebagai dependensi dalam persyaratan microservice
- termasuk repositori perpustakaan sebagai submodule git
Saya ingin membaca lebih banyak tentang pendekatan yang disarankan, praktik terbaik, pengalaman masa lalu sebelum memutuskan bagaimana untuk melanjutkan. Apakah Anda memiliki saran atau tautan?
sumber
fib(n)
(implementasi seri fibonacci). Anda tidak ingin mengulangi implementasi itu di setiap layanan Microsoft. Itu milikutils
perpustakaan (versi, untuk fitur dan perbaikan bug). Itu bukan monolit terdistribusi, itu hanya lapisan fungsi umum. Pertanyaan saya adalah bagaimana menangani layer ini di level implementasi?Jawaban:
Pilihan kedua Anda jelas merupakan cara yang harus dilakukan. Bongkar perpustakaan umum dan instal ke server PyPi lokal Anda.
Opsi 1 mengerikan karena perbaikan pada perpustakaan akan sulit disebarkan ke orang lain yang bisa menggunakannya.
Opsi 3 mirip dengan opsi 1.
Pola umum adalah untuk mensetup Jenkins sehingga saat Anda mendorong untuk menguasai repo pustaka, ia melakukan pembangunan python dan mengunggahnya secara otomatis ke repo PyPi. Setelah Anda menulis skrip bangunan ini, Anda tidak perlu khawatir tentang pengemasan perpustakaan dan mengunggahnya secara manual ke PyPi. Dan dengan opsi ini, semua pembaruan perpustakaan akan tersedia secara instan untuk dapat ditingkatkan ke layanan microser lainnya.
Menyiapkan server PyPi Anda sendiri sangat mudah. Saya suka panduan ini
sumber
Bukan orang Python tetapi server PyPi tampaknya merupakan pilihan terbaik. Googling cepat memberikan tampilan yang analog dengan repo Nexus untuk toples Java tim.
Benar-benar selama itu sedang digunakan untuk semacam repositori pusat (ke kantor / tim) bahwa alat manajemen ketergantungan pilihan Anda dapat bekerja dengan (membaca dari dan menyebarkan ke) maka itu adalah pilihan yang baik.
Opsi 1 benar-benar yang terburuk, Anda tidak harus berurusan secara manual dengan dependensi. Ini menyakitkan. Di perguruan tinggi sebelum saya tahu tentang Maven dan ketika saya pikir Git terlalu rumit, kami melakukan semuanya secara manual, dari menggabungkan kode semua orang, mengatur jalur kelas, hingga meraih dependensi. Sungguh menyakitkan, saya benar-benar tidak ingin ada orang yang melewati sebagian kecil dari masalah itu, terutama di lingkungan kerja di mana efisiensi sangat penting.
Opsi 3 mungkin akan berfungsi dengan baik, tetapi tidak memiliki manfaat nyata di atas PyPi lokal (selain mungkin lebih mudah diatur, tetapi manfaat sistem manajemen ketergantungan nyata jauh lebih baik).
sumber
Pertama-tama, memecah monolit menjadi layanan mikro akan selalu sulit. Lihat Manajemen Data Terdesentralisasi - merangkum basis data ke dalam layanan mikro untuk mengetahui alasannya.
Konon, ada beberapa resep cara melakukannya yang relatif waras. Salah satunya adalah http://12factor.net/ . Yang akan mengatakan bahwa Anda harus memelihara setiap perpustakaan dan aplikasi secara mandiri, kemudian mengelola dependensi secara eksplisit. Jika Anda pergi dengan rute itu maka saya akan SANGAT menyarankan Anda memiliki perintah sederhana yang memperbarui semua dependensi ke apa pun saat ini, dan Anda menjalankannya secara teratur untuk setiap layanan mikro. Penting untuk memiliki proses rilis yang waras di mana Anda mengunci versi perpustakaan dalam produksi. Namun Anda benar-benar, benar-benar , benar-benar tidak ingin berada di posisi di mana dependensi mendapatkan basi dan Anda tidak tahu apa yang sudah ada.
Juga fokus untuk membuat perpustakaan dukungan Anda sekencang dan sefokus mungkin. Akan selalu ada daya tarik alami untuk mulai menambahkan hal-hal ke perpustakaan inti agar mudah dibagikan. Lakukan itu, dan Anda akan dengan cepat menarik seluruh bola spageti yang ada ke perpustakaan bersama dan secara efektif kembali ke kekacauan yang Anda miliki sekarang. Karena itu, lebih baik mengoreksi cara lain.
sumber
Anda harus dapat membuka server dengan menunjuk langsung dari file dependensi paket Python ke repo GitHub pribadi yang berisi pustaka. Pipenv dan Penyair sama-sama mendukung ini, saya percaya.
sumber