Praktik terbaik untuk menangani sejumlah besar file konfigurasi / properti terstruktur

15

Bayangkan sebuah sistem yang memiliki sejumlah besar server. Masing-masing dari mereka memiliki sejumlah pengaturan:

  • Beberapa khusus untuk server
  • Beberapa spesifik untuk wilayah tersebut
  • Beberapa hal umum terjadi pada mereka semua
  • Mungkin Anda dapat memiliki beberapa pengelompokan khusus, seperti grup server ini hanya untuk membaca
  • dll.

Praktek saat ini yang ada dalam benak saya adalah struktur properti sederhana dengan kemampuan mengungguli.

Mari kita ambil server Google untuk tujuan contoh. Masing-masing dari mereka memiliki daftar pengaturan untuk memuat.

Misalnya, server London mungkin memiliki:

rootsettings.properties, europesettings.properties, londonsettings.properties, searchengine.properties, Dll

Di mana setiap file berisi sekumpulan properti dan urutan pemuatan memungkinkan Anda untuk menimpa properti, semakin jauh Anda pergi.

Misalnya: rootsettings.propertiesmungkin accessible=falsesebagai default, tetapi diganti searchengine.propertiesdenganaccessible=true


Masalah yang saya alami dengan struktur ini adalah sangat mudah untuk lepas kendali. Sama sekali tidak terstruktur, artinya Anda dapat mendefinisikan properti apa pun di tingkat mana pun dan banyak item dapat menjadi usang.

Lebih jauh lagi, mengubah level menengah menjadi tidak mungkin seiring pertumbuhan jaringan, karena Anda sekarang memengaruhi sejumlah besar server.

Last but not least, setiap instance individu mungkin memerlukan 1 properti khusus, artinya pohon Anda diakhiri dengan konfigurasi untuk setiap server, menjadikannya solusi yang tidak terlalu optimal.

Saya akan sangat menghargai jika Anda memiliki saran / ide arsitektur manajemen konfigurasi yang lebih baik.

SDekov
sumber
1
Hal pertama: catat semua properti yang dimuat saat startup, setidaknya Anda tahu nilai yang digunakan.
Walfrat
@Stoyan, apakah Anda mencari pendekatan "konfigurasi perangkat lunak" atau "konfigurasi server"?
Yusubov
Gagasan aneh, tidak terlalu baik: apakah ada yang menggunakan sistem "seperti CSS" untuk hal seperti ini? Alih-alih (atau sebagai tambahan) nama file yang terstruktur, data di dalamnya adalah.
user949300
Saya membangun aturan seperti sistem manajemen konfigurasi terpusat berbasis CSS. Ini gratis untuk digunakan dan open source. Lihat jawaban saya di bawah ini untuk lebih jelasnya.
bikeman868
Sepertinya pendekatan yang masuk akal bagi saya.
dagnelies

Jawaban:

5

Saya pikir Anda perlu bertanya pada diri sendiri beberapa pertanyaan pertama, dan mengklarifikasi beberapa poin, maka Anda bisa lebih baik memutuskan bagaimana menyelesaikan masalah Anda.

Pertama: siapa yang akan memiliki kontrol atas server?

  • Apakah itu administrator tunggal yang akan mengendalikan ratusan server? Maka Anda perlu memusatkan konfigurasi sebanyak mungkin.

  • Atau apakah setiap server berpotensi di bawah kendali admin individu, yang tidak ingin pengaturannya ditolak atau dikendalikan oleh konfigurasi terpusat? Maka Anda harus fokus pada konfigurasi terdesentralisasi. Jika setiap admin memiliki beberapa server untuk dikelola secara maksimal, ini masih dapat dikelola secara manual.

Kedua: apakah Anda benar-benar membutuhkan banyak opsi konfigurasi, atau bisakah Anda mempertahankan jumlahnya? Daripada membuat semua dan semua dapat dikonfigurasi "berjaga-jaga", lebih baik batasi diri Anda sendiri untuk opsi yang Anda tahu benar-benar dibutuhkan sistem Anda. Ini dapat dilakukan, misalnya oleh

  • membuat perangkat lunak Anda sedikit lebih pintar (misalnya, apa yang dapat ditentukan oleh program secara otomatis dengan menanyakan lingkungan)?

  • mengikuti "konvensi konfigurasi" secara kaku - misalnya, dengan menetapkan konvensi penamaan tertentu, atau dengan menurunkan beberapa opsi sebagai default dari opsi lain

Ketiga: apakah Anda benar-benar ingin tingkat konfigurasi hierarkis di-hardcode ke dalam perangkat lunak? Bayangkan Anda tidak tahu sebelumnya berapa banyak server yang akan ada, apakah hierarki seperti pohon benar-benar merupakan struktur terbaik untuk mereka, atau berapa banyak tingkatan yang harus dimiliki pohon. Solusi paling sederhana yang dapat saya pikirkan adalah dengan tidak menyediakan konfigurasi terpusat sama sekali, hanya satu file konfigurasi per server, dan biarkan administrator server yang bertanggung jawab memutuskan sendiri bagaimana mereka memecahkan masalah mengelola konfigurasi beberapa server.

Misalnya, admin dapat menulis skrip generator yang mendistribusikan file konfigurasi pusat ke sekelompok server yang berbeda dan membuat beberapa modifikasi kecil untuk setiap salinan. Dengan begitu, Anda tidak perlu membuat asumsi tentang "topologi distribusi server" sebelumnya, topologi dapat disesuaikan kapan saja dengan persyaratan dunia nyata. Kekurangannya adalah, Anda perlu administrator dengan beberapa pengetahuan tentang cara menulis skrip dalam bahasa seperti Perl, Python, Bash atau Powershell.

Doc Brown
sumber
Meskipun ini tidak memberikan solusi secara langsung, itu masuk akal bagaimana menangani situasi yang sudah buruk. Khususnya membuat perangkat lunak Anda sedikit lebih pintar .
SDekov
2

Saya pribadi tidak pernah menyukai warisan file konfigurasi. Anda menyebutkan memiliki urutan pemuatan, tidak yakin bagaimana itu didefinisikan atau diturunkan. Mungkin ini membantu untuk membuat urutannya jelas dengan memantulkannya dalam struktur direktori tempat Anda meletakkan file atau memasukkannya ke dalam nama file.

rootsettings.properties
rootsettings.eurosettings.properties
rootsettings.eurosettings.londonsettings.properties

Ini agak akan bekerja sampai pada titik di mana Anda memiliki agregat nilai konfigurasi yang tidak sejajar dengan suatu wilayah. Jadi, Anda harus mempertimbangkan poros organisasi yang Anda pilih.

Apa yang saya suka lebih adalah mengisolasi agregat nilai konfigurasi ke dalam file mereka sendiri dan memiliki file konfigurasi (daun) ke satu.

Sebuah contoh:

bigcity.searchsettings.properties
regional.searchsettings.properties

Di dalam londonsettings.propertiesAnda dapat memiliki nilai seperti:

searchsettings:bigcity.searchsettings.properties

Ini memungkinkan lebih banyak derajat kebebasan atau tambahan.

Joppe
sumber
2

Saya memiliki masalah yang sama dan open source solusi saya. Anda dapat menemukan kode sumber di sini https://github.com/Bikeman868/Urchin

Saya menggunakannya untuk sistem besar dengan banyak server, dengan beberapa aplikasi di setiap server, dan beberapa lingkungan. Ini termasuk UI yang ditulis dalam Dart untuk mengelola konfigurasi.

Anda dapat menghubungi saya secara langsung jika Anda perlu bantuan untuk turun.

Solusi yang saya terapkan adalah berdasarkan aturan. Anda biasanya memulai dengan satu aturan yang berlaku untuk semua konfigurasi, lalu menambahkan Anda dapat menambahkan aturan seperti "semua mesin di lingkungan ini membuat file log ke jalur UNC ini". Aturan dapat spesifik untuk suatu lingkungan, aplikasi, mesin atau contoh aplikasi. Aturan juga bisa lebih spesifik, karena hanya instance spesifik aplikasi ini yang berjalan di server spesifik ini.

Aturan diterapkan dalam urutan yang paling tidak spesifik untuk yang paling spesifik, dan aturan yang lebih baru dapat menggantikan nilai yang ditentukan dalam aturan sebelumnya. Ini berarti misalnya Anda dapat membuat aturan yang berlaku untuk aplikasi tertentu, lalu menimpanya dengan nilai yang berbeda untuk mesin tertentu, atau contoh spesifik dari aplikasi tersebut dll.

Server memiliki antarmuka REST + JSON sehingga berfungsi dengan sebagian besar sistem pengembangan, dan juga memiliki perpustakaan klien yang nyaman untuk aplikasi .Net.

bikeman868
sumber
1

Pengaturan semacam ini adalah mimpi buruk untuk dikelola. Yang terbaik untuk mencoba dan menguranginya sebanyak mungkin dengan meminta komponen perangkat lunak Anda menangani semua kasing.

yaitu alih-alih mengatur server api untuk suatu wilayah, berikan wilayah tersebut dengan panggilan api dan biarkan pengaturan server tunggal menangani semua wilayah.

Namun, mengingat Anda berada di negara Anda. Saya akan menyarankan agar tidak menyiapkan sistem untuk menghasilkan pengaturan konfigurasi. Itu hanya menambah kompleksitas pada masalah yang sudah kompleks.

Sebagai gantinya, simpan pengaturan di alat penyebaran Anda per jenis server. (pengaturan penyebaran gurita, penulisan ulang file tim, dll) Ini memungkinkan Anda memastikan Anda menggunakan pengaturan konfigurasi yang sama seperti yang Anda lakukan terakhir kali ketika memutakhirkan perangkat lunak dan memberi Anda kendali penuh atas perubahan.

Anda tidak ingin berada dalam situasi di mana Anda membuat perubahan pada file meta-config Anda dan kemudian harus menguji file konfigurasi apa yang dihasilkan di berbagai wilayah / server / pengelompokan khusus Anda

Ewan
sumber
0

Tidak ada penelitian; semua pendapat pribadi, 30+ pengalaman IT. Kedengarannya seperti struktur data yang rumit, yang dapat berubah / dimodifikasi dengan cepat, dengan sejumlah besar pengguna.

Pertimbangkan repositori basis data (mis. SQL) untuk menyusun data, dengan proses ekstrak kustom yang menghasilkan file konfigurasi individual untuk setiap pengguna. Anda bisa menggunakan kueri basis data untuk menentukan dampak perubahan sebelum diterapkan; temukan duplikat kejadian, dll. File flat individu adalah bagian dari masalah. Plus Anda bisa mendapatkan log perubahan dan dukungan pemulihan / membangun kembali. Dengan kontrol basis data, Anda mungkin dapat menghilangkan masalah pewarisan konfigurasi. Jenis solusi itu akan membutuhkan struktur basis data tambahan. Struktur kunci komposit yang benar sangat penting.

Itu saran saya.

Anda mungkin melihat beberapa sistem keamanan dan sistem kontrol vendor yang sangat mahal yang menerapkan jenis layanan ini. Pertimbangkan mereka. Secara umum mereka akan bergantung pada lingkungan.

just.a.guy
sumber