Organisasi saya mengalami ledakan layanan mikro. Saat ini kami tidak memiliki cara formal untuk mem-bootstrap proyek baru. Saya menemukan bahwa sebuah tim akan mendatangi saya dengan bug dalam penerapan atau proses pembangunan mereka, dan saya akan menghabiskan waktu hanya untuk menyadari bahwa saya sudah menyelesaikannya di proyek lain. Ada juga banyak ketidakkonsistenan antara proyek yang ingin saya lihat terstandarisasi.
Perubahan sering melibatkan file tunggal (mis. Serverless.yml atau Makefile) sehingga solusi yang melibatkan pustaka bersama misalnya submodules git tampaknya tidak dapat dijalankan. Setiap proyek akan memiliki set konfigurasi sendiri yang perlu dipertahankan, misalnya Dockerfiles atau serverless.yml, sehingga solusi manajemen konfigurasi terpusat untuk VM tidak benar-benar berlaku.
Bagaimana saya bisa memastikan bahwa layanan microsoft baru sesuai dengan standar organisasi dan menyertakan perbaikan bug / fitur dari proyek yang ada dengan cara yang mudah dan intuitif untuk pengembang yang ingin memulai proyek baru? Apa saja praktik terbaik untuk menyelesaikan masalah ini?
Alur kerja kami saat ini adalah meminta orang di sebelah Anda "proyek apa yang harus saya klon untuk digunakan sebagai templat?" dan kemudian hapus semua hal yang tidak perlu untuk proyek itu.
sumber
Gunakan manajemen konfigurasi / sistem penyebaran otomatis. Inilah yang dirancang untuk ini. Hal-hal seperti Kubernetes, Puppet, Chef, Ansible, dan Salt Stack dirancang untuk tujuan ini dan dapat digunakan dengan templat Golden Master, skrip kickstart, Amazon AMI atau hanya sebuah wadah Docker. Ini memungkinkan Anda untuk menggunakan templat basis default dan kemudian lapisan peran tambahan. Ini akan memastikan bahwa bangunan didokumentasikan secara lengkap (sebagai kode) dan akan cepat dan mudah digunakan untuk produksi, dan akan digunakan tepat secara identik dengan apa yang dirancang atau menggunakan contoh tambahan ketika kebutuhan untuk skalabilitas atau redundansi muncul atau ada sesuatu yang rusak. Perubahan / pembaruan juga dapat diintegrasikan dengan cara ini. Sama seperti Anda merilis pembaruan perangkat lunak, Anda dapat merilis pembaruan untuk konfigurasi Anda dan kode konfigurasi dapat dikelola sama seperti kode perangkat lunak Anda dikelola - dalam repo yang sama dan dengan alur kerja yang sama. Dan ketika waktu pemutakhiran tiba, tidak ada misteri bagaimana hal itu dibangun, lihat saja skripnya.
Salah satu cara sistem manajemen konfigurasi melakukan ini adalah melalui penggunaan templating yang berat untuk file konfigurasi Anda. Misalnya, umumnya ada banyak garis yang akan sama atau serupa di lingkungan Anda. SaltStack menggunakan templat jinja dan boneka menggunakan templat Ruby Tertanam . Menggunakan AWS sebagai contoh, Anda mungkin perlu mengatur, tombol api, peran IAM, wilayah (atau secara acak memilih wilayah dari daftar wilayah), VPC, dll yang semuanya sama di semua contoh. Tetapi kemudian Anda harus memiliki fungsi dan output yang unik. Atau lebih baik lagi Anda dapat menulis modul boneka atau formula garam yang mendefinisikan "kontrak" dan menggunakan kontrak tersebut (definisi api) untuk input dan output yang menyelamatkan Anda dari keharusan mengkonfigurasi layanan microsoft Anda dua atau tiga tempat.
SaltStack misalnya baru-baru ini mengadakan pertemuan untuk membahas skenario khusus ini . Selain itu, SaltStack juga dapat mengelola dan menggunakan wadah buruh pelabuhan secara asli . (Boneka juga memiliki modul untuk Docker ) Demikian juga Ansible memiliki buku pedoman dan dokumen untuk bekerja dengan penyebaran tanpa server dan wadah Docker .
Juga, jika Anda ingin melanjutkan tema / paradigma tanpa server Anda, Wayang , Anonim, dan Saltstack semuanya tidak memiliki master atau mendukung mode tanpa master, jika Anda ingin melanjutkan tema ini.
sumber
Pertanyaan ini luas sehingga jika jawaban saya sedikit tidak masuk akal jangan ragu untuk menambahkan konteks dan contoh spesifik sehingga saya memiliki pemahaman yang lebih baik.
Menggunakan gambar mesin seperti AMI AWS akan memungkinkan Anda untuk membuat gambar dasar atau emas, yang kemudian dapat Anda pelihara dan distribusikan atau terapkan dalam pengiriman berkelanjutan Anda. Dengan menggunakan arsitektur ini Anda memastikan bahwa setiap microservice dikerahkan pada perangkat keras yang konsisten dengan konfigurasi yang identik sehingga setiap masalah yang Anda hadapi terkait dengan konfigurasi microservice / aplikasi.
Anda dapat melanjutkan ketidakterbatasan ini dengan penambahan alat konfigurasi seperti Ansible dan Packer. Dengan menggunakan manajemen konfigurasi, Anda dapat menyediakan gambar mesin dengan apa pun yang Anda inginkan (termasuk aplikasi). Packer kemudian akan memungkinkan Anda untuk mengambil snapshot dari gambar mesin itu dan setiap penyebaran akan sama.
Dengan menggunakan contoh ini Anda dapat 'memanggang' AMI dasar dengan paket, pembaruan, dan konfigurasi yang benar yang diinstal dengan bantuan Ansible dan Packer. Selain itu, Anda bisa melihat 'Ansible-Pull' untuk menyelesaikan penyebaran dengan menarik kode aplikasi, membuat perubahan apa pun, dan menggunakan layanan Microsoft di atas gambar dasar itu.
Namun saran paling penting yang bisa saya berikan adalah hanya dengan memberikan solusi yang dapat didukung dan dipelihara oleh seluruh organisasi. Layak untuk mencoba membangun SDLC yang memecahkan serangkaian masalah khusus Anda, sesuai dengan budaya dan sikap kepemimpinan, dan merangkul praktik arsitektur modern.
Saya telah bersama tiga organisasi dan kami telah mengambil tiga pendekatan yang sangat berbeda.
Semoga berhasil!
sumber