PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Littlewing : Observabilité et Circuit Breaker avec Spring

lundi 26 juillet 2021 à 11:53

Il y a quelques mois déjà, je discutais avec un collègue d’ observabilité, opentracing, … avec Quarkus. On est tombé sur un super exemple réalisé par Antonio Concalves. Ce projet démontre les capacités de Quarkus sur les sujets suivants:

Et la on peut se demander quid de Spring? Je me doutais que ces fonctionnalités étaient soient disponibles par défaut soient facilement intégrables vu la richesse de l’écosystème.

J’ai donc réalisé un clone de ce projet basé sur Spring Boot/Cloud. Je ne vais pas détailler plus que ça les différentes fonctionnalités, vous pouvez vous référer au fichier README. Il est suffisamment détaillé pour que vous puissiez exécuter et les mettre en œuvre.

Architecture de l’application

Vous trouverez ci-dessous un schéma d’architecture de l’application au format C4.


Circuit Breaker

Lors des appels entre le bookstore et le booknumberservice, il peut être intéressant d’ implémenter un circuit breaker pour pallier aux indisponibilités de ce dernier.
Avec Spring, on peut utiliser Resilience4J au travers de Spring Cloud. Tout ceci se fait de manière programmatique

Il faut tout d’abord configurer les circuit breakers au travers d’une classe Configuration.

   @Bean
    public Customizer createDefaultCustomizer() {
        return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(timeoutInSec)).build())
                .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
                .build());
    }

    /**
     * Creates a circuit breaker customizer applying a timeout specified by the booknumbers.api.timeout_sec property.
     * This customizer could be reached using this id: slowNumbers
     * @return the circuit breaker customizer to apply when calling to numbers api
     */
    @Bean
    public Customizer createSlowNumbersAPICallCustomizer() {
        return factory -> factory.configure(builder -> builder.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(timeoutInSec)).build()), "slowNumbers");
    }

Grâce à ces instanciations, on référence les différents circuit breakers.

Maintenant, on peut les utiliser dans le code de la manière suivante:

public Book registerBook(@Valid Book book) {
        circuitBreakerFactory.create("slowNumbers").run(
                () -> persistBook(book),
                throwable -> fallbackPersistBook(book)
        );

        return bookRepository.save(book);
    }

Maintenant, il ne reste plus qu’à créer une méthode de « fallback » utilisée si un service est indisponible. Cette dernière nous permettra, par exemple, de mettre le payload dans un fichier pour futur traitement batch.

Observabilité

L’observabilité est sans contexte la pierre angulaire (oui, rien que ça…) de toute application cloud native. Sans ça, pas de scalabilité, de redémarrage automatique,etc.
Les architectures de ce type d’applications sont idempotentes. On a donc besoin d’avoir toutes les informations à notre disposition. Heureusement, Spring fournit par le biais d’ Actuator toutes les informations nécessaires. Ces dernières pourront soit être utilisées par Kubernetes (ex. le livenessProbe) ou agrégées dans une base de données Prometheus.

Pour activer certaines métriques d’actuator, il suffit de :

Ajouter la/les dépendance(s)

    dependencies {
[...]
        implementation 'org.springframework.boot:spring-boot-starter-actuator'
        implementation 'io.micrometer:micrometer-registry-prometheus'
     [...]
    }

Spécifier la configuration adéquate:

management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        include: '*'
    jmx:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
      enabled: true
      probes:
        enabled: true
    shutdown:
      enabled: true
    prometheus:
      enabled: true
    metrics:
      enabled: true
  health:
    livenessstate:
      enabled: true
    readinessstate:
      enabled: true
    datasource:
      enabled: true
  metrics:
    web:
      client:
        request:
          autotime:
            enabled: true

OpenTracing

Sur les applications distribuées, il peut s’avérer compliqué de concentrer les logs et de les corréler. Certes, avec un ID de corrélation, on peut avoir certaines informations. Cependant, il faut que les logs soient bien positionnées dans le code. On peut également passer à travers de certaines informations (ex. connexion aux bases de données, temps d’exécution des APIS,…). Je ne vous parle pas des soucis de volumétrie engendrées par des index Elasticsearch/Splunk sur des applications à forte volumétrie.

Depuis quelques temps, le CNCF propose un projet (encore en incubation) : OpenTracing. Ce dernier fait désormais partie d’OpenTelemetry.
Grâce à cet librairie, nous allons pouvoir tracer toutes les transactions de notre application microservices et pouvoir réaliser une corrélation « out of the box » grâce à l’intégration avec Jaeger.

Pour activer la fonctionnalité il suffit d’ajouter la dépendance au classpath:

implementation 'io.opentracing.contrib:opentracing-spring-jaeger-cloud-starter:3.3.1'

et de configurer l’URL de Jaeger dans l’application

# Default values
opentracing:
  jaeger:
    udp-sender:
      host: localhost
      port: 6831
    enabled: true

Une fois l’application reconstruite et redémarrée, vous pourrez visualiser les transactions dans JAEGER:

Conclusion

Je ne vais pas exposer l’implémentation des tests unitaires et d’intégration. Si vous voulez voir comment j’ai réussi à mocker simplement les appels REST à une API distante, vous pouvez regarder cette classe pour voir une utilisation du MockServer.
Aussi, n’hésitez pas à cloner, tester ce projet et me donner votre retour. J’essaierai de le mettre à jour au fur et à mesure de mes découvertes (par ex. OpenTelemetry).

Gravatar de Littlewing
Original post of Littlewing.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #29

lundi 26 juillet 2021 à 00:01

Pour la 29ème semaine de l'année 2021, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Daria : Transformez votre blog WordPress.com en podcast avec Anchor.

mercredi 21 juillet 2021 à 12:08

Vous bloguez sur WordPress.com pour partager votre voix unique. À partir d’aujourd’hui, vous pouvez faire entendre cette voix sur une autre plateforme : Anchor. Après avoir partagé quelques trucs et astuces pour démarrer un podcast sur WordPress.com, c’est un plaisir pour nous de vous faire connaître cette possibilité supplémentaire.

Produit de la famille Spotify, Anchor est à l’origine de 80 % des nouveaux podcasts sur Spotify, avec des outils gratuits de création, de diffusion et de rentabilisation faciles à utiliser, quelle que soit la façon dont vous enregistrez. Cela inclut le podcasting avec votre blog WordPress.com !

La création d’un podcast Anchor à partir de votre site est simple et gratuite. Après tout, vous disposez déjà d’un blog entier de contenu écrit à utiliser. Avec Anchor, il ne vous reste plus qu’à convertir vos mots en audio, ce qui peut être aussi simple que d’utiliser votre blog pour enregistrer rapidement une version en synthèse vocale.

Conversion du blog en podcast, les avantages

La création d’un podcast à partir de votre blog donne un nouveau souffle au travail que vous faites déjà. Vous pouvez littéralement faire entendre la voix unique de votre blog ! En convertissant votre blog en podcast, vous exploitez la puissance de l’audio pour développer votre marque, votre audience et vos revenus, sans aucun travail supplémentaire. Des centaines de millions d’auditeurs (toujours plus nombreux !) consomment des podcasts au quotidien, et ils sont constamment à la recherche de nouvelles voix et de points de vue novateurs. Que vous ayez déjà ou non un public sur WordPress.com, une extension audio de votre blog représente un autre moyen de vous faire connaître, que ce soit auprès de vos abonnés actuels ou de nouveaux abonnés. Enfin, il y a aussi l’aspect monétaire : Anchor Sponsorships vous permet de lire des publicités avec votre propre voix pendant une pause dans votre podcast ; la fonction Listener Support d’Anchor, quant à elle, permet à vos plus grands fans de soutenir votre travail en faisant un don mensuel.

Une version podcast de votre blog WordPress.com permet de faire découvrir votre travail à un public entièrement différent et de libérer les auditeurs pour qu’ils puissent faire ce que les lecteurs ne peuvent pas faire : être multitâches !  Il y a, bien sûr, de nombreux avantages à ce que les lecteurs s’immergent complètement dans le contenu écrit d’un blog.  Mais l’audio permet aux auditeurs de consommer votre travail tout en effectuant des activités quotidiennes, comme se promener, conduire, cuisiner, se détendre… ou simplement explorer quelque chose de nouveau.

Laissez parler vos textes.

Connectez votre site à Anchor et vos articles de blog existants seront importés en tant que brouillons d’épisodes.

Votre blog peut presque littéralement parler à votre place grâce à la synthèse vocale directe, qui correspond à la version audio d’un article.  Il s’agit d’une très bonne solution pour les blogs qui dépendent moins d’une mise en page complexe que du contenu lui-même, par exemple des articles de fond sur l’actualité, le sport, les textes d’idées ou les histoires de vécu. Grâce à la synthèse vocale, votre blog peut être prêt pour le podcast en quelques minutes.

La conversion d’un article de blog en fichier audio prêt à être podcasté et la diffusion de votre nouvelle émission ne prennent que quelques minutes.

Bien entendu, si vous souhaitez créer un podcast à partir de votre voix réelle, vous pouvez l’enregistrer en lisant une transcription de votre article de blog, qui sera importée directement dans Anchor pour un accès facile.
Vous pouvez également opter pour un format original en utilisant votre blog comme point de départ pour animer une discussion audio sur le sujet du blog. Ou encore vous inspirer de votre blog pour créer un podcast plus traditionnel, dans lequel vous accueillez et interrogez des invités, enregistrez des segments scriptés et bien d’autres choses encore, de manière amplifiée par l’audio !

Créez un podcast dès aujourd’hui.

Il existe plusieurs façons de transformer votre blog WordPress.com en podcast.  La quantité de travail nécessaire peut être étonnamment minime, mais vous pouvez mettre la main à la pâte si vous le souhaitez. Que vous souhaitiez créer une version audio de votre blog, étendre le concept de votre blog à une autre plateforme ou simplement vous faire la main (et la voix) sur un nouveau support, il existe une structure de podcast pour vous.  Plus important encore, votre travail écrit signifie que vous ne partez pas de zéro.

Voici un guide étape par étape pour créer un podcast sur Anchor à partir de vos articles existants sur WordPress.com

Veillez à créer un nouveau compte Anchor à lier à votre compte WordPress.com. Les comptes Anchor existants ne peuvent pas être liés pour le moment. Vous pouvez également convertir tous vos nouveaux articles publiés sur WordPress.com en podcasts.

Si vous êtes en quête d’inspiration, TheDesignAir est un bon exemple, avec un blog sur le design d’aviation et l’actualité des produits. Découvrez leur podcast en synthèse vocale sur Anchor :

Envie de transformer votre blog en podcast Anchor gratuitement ? Commencez par créer un nouveau compte Anchor. Bon podcasting !

Gravatar de Daria
Original post of Daria.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #28

lundi 19 juillet 2021 à 00:01

Pour la 28ème semaine de l'année 2021, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #27

lundi 12 juillet 2021 à 00:01

Pour la 27ème semaine de l'année 2021, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires