Ringkasan
Misalkan ada persyaratan sekarang:
Aplikasi kami digunakan pada 10 mesin. Ketika kami menyesuaikan parameter konfigurasi tertentu, kami tidak perlu memulai kembali mesin. 10 mesin dapat secara otomatis mendapatkan konfigurasi terbaru.
Bagaimana cara mencapainya? Ada banyak jenis, seperti:
1. Tempatkan konfigurasi dalam database, dan setiap kali aplikasi membaca konfigurasi langsung dari DB. Dengan cara ini, kita hanya perlu membuat perubahan DB dan memperbarui informasi konfigurasi terbaru ke database. Dengan cara ini, tidak peduli berapa banyak aplikasi, karena mereka semua mendapatkan informasi konfigurasi dari DB yang sama, mereka secara alami dapat memperoleh konfigurasi terbaru.
2. Setiap mesin menyediakan antarmuka UpdateConfig yang memperbarui informasi konfigurasi. Ketika diperlukan untuk memodifikasi konfigurasi, antarmuka UpdateConfig dari server disebut satu per satu.
3. Gunakan Redis untuk mengimplementasikannya dan menempatkan informasi konfigurasi pada Redis, tetapi dengan cara ini, Anda harus membacanya setiap saat, yang memiliki lebih banyak permintaan jaringan.
Tiga metode di atas adalah yang paling mudah dipikirkan dan mudah dilakukan, tetapi tentu saja ada banyak kelemahan. Meskipun ada banyak kekurangan, beberapa perusahaan tradisional melakukan ini.
Di perusahaan internet, pada dasarnya saya belum pernah melihat orang yang bermain seperti ini, mereka semua menggunakan pusat konfigurasi terdistribusi. Gunakan open source atau terapkan sendiri. Saat ini, ada banyak pusat konfigurasi terdistribusi sumber terbuka, dan konfigurasi cloud pegas adalah yang terbaik di antara mereka. Selanjutnya, kami akan menggunakan Spring Cloud Config untuk mengimplementasikan pusat konfigurasi terdistribusi.
Apakah akan menggunakan versi spring boot 2.0 terbaru
Saya dulu menggunakan Spring Cloud 2.0 terbaru untuk melakukan demo terdistribusi yaitu pusat konfigurasi. Saya pikir itu sederhana, tetapi butuh satu hari penuh untuk menyelesaikannya. Ada beberapa alasan:
1. Dokumen yang sesuai dari Spring Cloud belum sepenuhnya diperbarui, dan ada masalah dan tidak dapat ditemukan dalam dokumen;
2. Saat ini, ada beberapa perusahaan yang menggunakan versi 2.0, dan tidak ada artikel praktis khusus di Internet. Setelah masalah pecah, Baidu tidak dapat menemukan solusi. Pada dasarnya sulit bagi Google untuk menemukan solusi, yang semuanya merupakan fragmen pengetahuan sporadis;
3. Ada beberapa perubahan kecil dalam konfigurasi dan bus di versi 2.0, dan jika masih dilakukan sesuai dengan versi 1.5.x, itu tidak akan berhasil.
Berdasarkan alasan di atas, disarankan untuk menggunakan versi 1.5.x lebih dapat diandalkan. Artikel berikut akan diperkenalkan dalam versi berikut:
Spring Boot:
1.5.2.release
Cloud pegas yang sesuai menggunakan:
Dalston.Release
Bangun Server Konfigurasi Cloud Spring
Jika Anda hanya ingin mengelola konfigurasi secara seragam dengan konfigurasi Cloud Spring dan tidak ingin sangat tersedia di pusat konfigurasi untuk saat ini, Anda hanya perlu komponen konfigurasi dan bus. Namun, jika Anda ingin memastikan ketersediaan tinggi, Anda juga harus menggunakan komponen penemuan pendaftaran dari Spring Cloud.
Selain konfigurasi dan bus, kita juga perlu menggunakan git. Karena Spring Cloud Config menggunakan GIT untuk manajemen versi.
Sangat mudah untuk membuat pusat konfigurasi berdasarkan konfigurasi cloud pegas, ini dilakukan hanya dalam beberapa langkah kecil.
【1】 memperkenalkan komponen konfigurasi dan bus
<dependency> <GroupId> org.springframework.cloud </groupid> <ArTifactId> spring-cloud-config-server </t Artifactid> </dependency> <sependency> <RoupDid> org.sprramewework.cloud </ArtifactId> <ArtiFacTID> Spring-cloud-starter-bus-amqork
【2】 Kelas startup menggunakan anotasi @enableConfigServer
Paket spring.cloud.config; impor org.springframework.boot.springapplication; impor org.springframework.boot.autoconfigure.springbootApplication; import org.springframework.cloud.config.server.enableConfigServiger; ConfigApplication {public static void main (string [] args) {springApplication.run (configApplication.class, args); }}【3】 file application.yml Mengkonfigurasi repositori Rabbitmq dan Git
Server: Port: 8040spring: Aplikasi: Nama: Spring-cloud-config-server cloud: config: server: git: uri: https://gitlab.xxxxx.com/config/xxxxx.git Pencarian: host77.1.1117 Kata Sandi: GuestManagement: Keamanan: Diaktifkan: Salah
RabbitMQ dikonfigurasi karena komponen bus perlu menggunakannya untuk memberi tahu klien, dan perubahan konfigurasi dibuat. Juga, ingatlah untuk menggunakan
Manajemen: Keamanan: Diaktifkan: Salah
Verifikasi akan ditutup, dan operasi berikutnya akan selalu melaporkan kesalahan otorisasi.
Pusat Konfigurasi Server telah selesai. Sekarang Anda dapat melakukan percobaan kecil di server dan mengirimkan file demo-dev.properties. Konten file adalah sebagai berikut:
alamat = halo
Lalu gunakan
http: // localhost: 8040/demo/dev
Jika output
{"alamat": "halo"}Ini berarti bahwa interaksi antara spring cloud config dan git tidak apa -apa.
Pusat Konfigurasi Akses Klien
Tujuan kami:
Setelah informasi konfigurasi dimodifikasi dan dikirimkan ke GIT, semua klien yang terhubung ke Spring Cloud Config akan segera menerima pemberitahuan dan mendapatkan informasi konfigurasi terbaru.
Berikut ini menjelaskan cara mencapai tujuan ini.
Klien hanya perlu melakukan beberapa langkah kecil untuk menyelesaikan tindakan akses.
【1】 memperkenalkan dependensi
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-web </artifactid> </dependency> <dependency> <sroupDid> org.springframework.cloud </groupId> <ArtiFacTID> SPRING-COLLOD-CONFERFIG </ARTIFID <artifactId <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <artifactid> <t ArtiFacTid> <t ArtiFacTID> <artifactid> <GroupId> org.springframework.cloud </groupid> <ArTifactId> spring-cloud-starter-config </arttifactid> </gandening> <sependency> <groupid> org.springframework.cloud </groupid> <ArtifactId> Spring-cloud-starter-bus-amqp </Artifactid>
Pengenalan Spring-Boot-Starter-Web hanya untuk eksperimen.
【2】 Mengkonfigurasi RabbitMQ dan Perkenalkan URL di Pusat Konfigurasi
application.properties
spring.application.name = spring-cloud-config-client1server.port = 8042Management.security.enabled = falsespring.rabbitmq.host = 127.0.0.1spring.rabbitmq.port = 5672spring.rabbitmq.usname = germbit
bootstrap.properties
spring.cloud.config.name = demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http: // localhost: 8040/
Ada tiga poin yang harus diperhatikan:
1. Verifikasi Tutup: Management.Security.enabled = false
2. Konfigurasi yang terkait dengan konfigurasi cloud pegas harus ditempatkan di bootstrap.properties
3. Gunakan spring.cloud.config.uri untuk menentukan alamat pusat konfigurasi
Selain itu, untuk klien, kelas startup tidak perlu menambahkan anotasi yang terkait dengan konfigurasi dan bus .
Setelah sampai ke klien ini, kami dapat menggunakan pengontrol untuk mulai bereksperimen.
Paket springcloudconfig.client; impor org.springframework.beans.factory.annotation.value; impor org.springframework.cloud.context.config.annotation.Refreshscope; impor org.springframework.web.bind.annotation.request.request; org.springframework.web.bind.annotation.RestController;@restcontroller@refreshscopepubublic kelas HelloController {@value ("$ {alamat}") alamat string pribadi; @RequestMapping ("/address") Public String getAddress () {return this.address; }}Dengan asumsi HelloController di atas perlu menggunakan konfigurasi alamat, Anda hanya perlu menggunakan @refreshscope dan anotasi @Value.
@Refreshscopepublic class helloController {} @Value ("$ {alamat}") alamat string pribadi;Untuk memverifikasi apakah klien dapat memperoleh informasi konfigurasi terbaru, berikan a
@RequestMapping ("/address") Public String getAddress () {return this.address; }metode.
Mari kita ubah file demo-dev.properties dan ubah nilainya menjadi
Alamat = Hello Update
Dan mengirimkannya ke git. Saat ini, kami memanggil antarmuka getAddress
http: // localhost: 8041/alamat
Saya menemukan bahwa saya tidak mendapatkan nilai terbaru. Itu karena setelah aksi mendorong ke Git selesai, kami tidak memberi tahu Spring Cloud Bus. Anda dapat menggunakan tukang pos untuk membuat permintaan pos dan memanggil antarmuka berikut untuk memberi tahu Bus.
http: // localhost: 8040/bus/refresh
Setelah antarmuka ini berhasil disebut, BUS akan menggunakan RabbitMQ untuk memberi tahu semua klien bahwa konfigurasi telah diperbarui.
Perhatian Khusus:
Kami menelepon /bus /refresh antarmuka server, bukan antarmuka /bus /penyegaran klien.
Jika Anda harus menghubungi antarmuka /bus /penyegaran di server setiap kali Anda mengirimkan, maka ini terlalu merepotkan. Anda dapat menggunakan Webhook untuk membantu.
Jika Anda menggunakan GitLab baru, Anda hanya perlu mengklik [Pengaturan] di proyek, lalu klik [Integrasi] untuk mengatur webhook, seperti yang ditunjukkan pada gambar di bawah ini:
Isi URL ke Alamat Antarmuka /Bus /Refresh dari Server Pusat Konfigurasi, lalu klik [Tambahkan WebHook].
Perbandingan dengan Apollo CTRIP
Hal yang luar biasa tentang konfigurasi Cloud Spring adalah bahwa konfigurasinya disimpan dalam GIT, yang secara alami mengisolasi modifikasi konfigurasi, izin, versi, dan masalah lainnya. Desain ini membuat konfigurasi Spring Cloud secara keseluruhan sangat sederhana, tetapi juga membawa ketidaknyamanan.
Mari kita coba membuat ringkasan sederhana:
| Poin fungsional | Apollo | Konfigurasi Cloud Musim Semi | Komentar |
|---|---|---|---|
| Antarmuka konfigurasi | Satu antarmuka mengelola lingkungan yang berbeda dan konfigurasi cluster yang berbeda | Tidak ada, perlu beroperasi melalui git | |
| Konfigurasikan waktu yang efektif | waktu nyata | Restart mulai berlaku, atau refresh manual mulai berlaku | Konfigurasi Cloud Musim Semi Perlu Melewati Webhook Git, ditambah antrian pesan tambahan untuk mendukung efek waktu nyata |
| Manajemen Versi | Sejarah rilis dan tombol rollback disediakan langsung di antarmuka | Tidak ada, perlu beroperasi melalui git | |
| Rilis Grayscale | mendukung | Tidak didukung | |
| Otorisasi, audit, audit | Didukung langsung pada antarmuka, dan mendukung pemisahan izin modifikasi dan penerbitan | Perlu diatur melalui repositori git, dan tidak mendukung modifikasi dan melepaskan pemisahan izin | |
| Pemantauan konfigurasi instan | Mudah untuk melihat klien mana yang saat ini menggunakan konfigurasi mana | Tidak didukung | |
| Konfigurasi untuk mendapatkan kinerja | Cepat, akses melalui database, dan dukungan caching | Lebih lambat, perlu dibaca dari repositori git clone dan kemudian dari sistem file | |
| Dukungan klien | Dukung secara alami semua aplikasi Java dan .net, menyediakan API untuk mendukung aplikasi bahasa lainnya, dan juga mendukung anotasi pegas untuk mendapatkan konfigurasi | Mendukung aplikasi pegas dan memberikan anotasi untuk mendapatkan konfigurasi | Apollo memiliki rentang aplikasi yang lebih luas |
Saya pribadi merekomendasikan menggunakan Spring Cloud Config, yang sangat ringan dan aktif di komunitas. Sangat mudah untuk menemukan solusi saat menghadapi masalah. Selain itu, saya pribadi berpikir perbedaan antara Apollo dan Spring Cloud Config hanya bahwa tidak ada antarmuka. Antarmuka dapat dilakukan, dan kita bisa melakukannya melalui git, tetapi pengalaman pengguna tidak begitu baik.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.