Spring Cloud Config – czyli jak ułatwić sobie zarządzanie scentralizowaną konfiguracją.

Swego czasu pracowałem w projekcie gdzie była architektura “pseudo mikroserwisowa”. Jeden z centralnych komponentów do którego odwoływaliśmy się z kilku konsumentów był zdeployowany na odseparowanym boxie, a ponieważ wdrożenie service discovery z punktu biznesu nie przynosiło nowych funkcjonalności to adres tego komponentu był utrzymywany w postaci parametru w pliku konfiguracyjnym. W efekcie ta sama wartość często była używana/zapisana w kilku miejscach. Jakie rodziło to problemy ? Wystarczyło że któryś z tych parametrów(url, port itp) się zmienił i trzeba było poświęcić sporo czasu na zmianę we wszystkich węzłach co było bardzo czasochłonne. Jak można było tego uniknąć ? Sposób jest wiele. Ktoś zadecydował o użyciu puppeta do automatycznego budowania konfiguracji dla tomcatów, jetty, jbossa itd. Minusem tego było “składanie” środowiska na czas rekonfiguracji co zaprzeczało założeniom zero downtime.

Problem można było rozwiązać znacznie mniejszym nakładem pracy bez angażowania zespołu ops’ów. Wystarczyłby Spring Cloud Config.

Dlaczego tak zachwycam się tym rozwiązaniem ?

bo jest naprawdę niesamowite!

Out of box dostajemy rozwiązanie serwerowe i klienckie do centralizacji naszej konfiguracji. Dzięki temu możemy zapomnieć o duplikowaniu parametrów, monotonnej i czasochłonnej rekonfiguracji.

Wystarczy przygotowanie plików konfiguracyjnych dla naszych aplikacji-klientów na serwerze konfiguracyjnym. Jedyna rzecz która interesuje naszą aplikację to miejsce w naszej sieci gdzie znajduje się ten server.

Server konfigurację może przechowywać na różne sposoby: jako pliki na lokalnym dysku lub w git’owym repozytorium co daje nam dużą elastyczność.

Ogromnym plusem jest to że rozwiązanie nie jest zamknięte tylko na środowisko developerów korzystających z Springa. Klientem może być dowolna aplikacja napisana w dowolnym języku. A to dlatego ze server udostępnia nam konfigurację w postaci plain textu ( klasyczny properties dobrze znany każdemu javiście), w jsonie oraz w yaml’u. Dzięki temu każdy znajdzie coś dla siebie. Przykładowa reprezentacja konfiguracji zwracanej przez serwer poniżej:

YAML

JSON

Aby zacząć korzystać z Spring Cloud Config nie potrzebujemy zbyt wiele. Już większość z nas zdążyła się przyzwyczaić do Starterów Spring Boot’owych, tak i dla tego modułu powstał odpowiedni. Wystarczy trochę “programowania adnotacjami” 😉 a dokładnie jedną:

Dzięki niej Spring automatycznie uruchomi server, na podstawie domyślnych ustawień, które oczywiście są w pełni customizowalne. Aby skorzystać z wsparcia dla plików przechowywanych w lokalnym storage musimy ustawić właściwość jak na poniższym listeningu:

Teraz pozostaje umieszczenie plików w odpowiednim miejscu:

Należy pamiętać tutaj o konwencji nazewniczej NAZWA_APLIKACJI-PROFIL.

Co nam daje takie podejście? Możemy używać jednego config servera dla wielu środowisk, od developerskich przez testowe do produkcyjnych dzięki zastosowaniu różnych profili.

Podstawowa konfiguracja serwera to zaledwie kilka minut, a czy po stronie klienta potrzebujemy więcej zabiegów ? Otóż… Nie 😉 Wystarczy wskazanie w pliku konfiguracyjnym nazwy aplikacji, domyślnego profilu oraz lokalizacji config servera:

W momencie startu aplikacji, Spring odpyta o potrzebne właściwości serwer konfiguracyjny.

A dostęp do nich po stronie klienta jest poprzez dobrze znaną adnotację:

 

Jak widać bardzo małym nakładem pracy można oszczędzić ogrom czasu stosując mądre rozwiązania. Przykładowa aplikacja jest dostępna na githubie, a zainteresowanych tematem zachęcam do lektury dokumentacji i zadawania pytań na dole strony;)

 

Pozdrawiam i do następnego.

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *