Categories Uncategorized

maestro atteint une version stable | R-blogueurs

[This article was first published on data-in-flight, and kindly contributed to R-bloggers]. (Vous pouvez signaler un problème concernant le contenu de cette page ici)


Vous souhaitez partager votre contenu sur R-bloggers ? cliquez ici si vous avez un blog, ou ici si vous n’en avez pas.

maestro est officiellement passé à la version stable avec la version 1.0.0 en janvier 2026 et maintenant sa dernière version 1.1.0. Cela marque un engagement à maintenir une API stable et à recourir davantage à l’utilisation de maestro en production. Rien que dans notre environnement, maestro a orchestré des millions d’exécutions de pipelines au cours d’une année, ce qui en fait le cœur de l’ensemble de notre pile de données.1

Si vous n’avez pas entendu parler de maestro, c’est un package d’orchestration de pipeline. Vous pouvez en savoir plus ici.

Obtenez-le du CRAN :

install.packages("maestro")

Voici quelques-unes des principales nouvelles fonctionnalités et modifications apportées par les versions 1.0.0 et 1.1.0 :

Temps de création et d’exécution de planification plus rapides

De nombreux efforts ont été déployés pour améliorer les performances des fonctions principales build_schedule et run_schedule. La construction est particulièrement plus efficace, environ 2 à 4 fois plus rapide pour les projets comportant un nombre décent de pipelines. Par exemple, notre projet maestro le plus lourd, qui compte plus de 50 pipelines, a vu un temps de construction moyen de 2 secondes tomber à 0,5 seconde. Cela rend plus réalisable l’exécution de Maestro à des fréquences d’orchestrateur étroites.

Les horaires sont plus portables

Un problème avec l’ancienne façon dont Maestro construisait les plannings était que la mise en cache et la réutilisation d’un objet de planning (au lieu de le reconstruire à chaque fois) entraînaient finalement l’expiration du planning.2. Depuis maestro 1.1.0, les plannings peuvent être mis en cache et réutilisés en toute sécurité, évitant ainsi d’avoir à exécuter build_schedule à chaque exécution de l’orchestrateur. C’est aussi simple que de courir saveRDS selon un calendrier prédéfini, puis en utilisant readRDS pour le charger dans le cycle de production.

Mises en garde lors de la mise en cache d’un planning

Il est important de noter que la mise en cache d’une planification ne prendra pas en compte les modifications apportées à la configuration du pipeline ni l’ajout/suppression de pipelines. Par conséquent, il est recommandé de reconstruire et de mettre en cache une fois le déploiement, puis d’utiliser la planification prédéfinie à chaque exécution. Un modèle CI/CD est utile pour garantir que les modifications apportées à la configuration du pipeline déclenchent la reconstruction d’une planification.

La mise en cache d’un planning en tant que .rds au lieu de le reconstruire à chaque exécution peut réduire d’une seconde le temps d’exécution en production, ce qui est important si maestro est utilisé à une cadence serrée. Pour les projets exécutés à une fréquence inférieure (par exemple, 15 minutes ou moins souvent), cela n’en vaut probablement pas la peine.

Nouvelle fonction get_run_sequence

Il est souvent utile de connaître les heures futures d’exécution de vos pipelines. À cette fin, nous avons ajouté le get_run_sequence fonction qui renvoie un data.frame des heures d’exécution planifiées. Cela peut être utile pour la planification et le suivi :

#' ./pipelines
#' @maestroFrequency hourly
hourly <- function() {
  
}

#' @maestroFrequency daily
#' @maestroStartTime 02:00:00
daily <- function() {
  
}

#' @maestroFrequency 3 hours
#' @maestroStartTime 01:00:00
every_3_hours <- function() {
  
}
library(maestro)

schedule <- build_schedule(quiet = TRUE)

get_run_sequence(schedule) |>
  head(n = 10)
# A tibble: 10 × 3
   pipe_name     scheduled_time      is_primary
   <chr>         <dttm>              <lgl>     
 1 hourly        2026-04-20 00:00:00 TRUE      
 2 hourly        2026-04-20 01:00:00 TRUE      
 3 every_3_hours 2026-04-20 01:00:00 TRUE      
 4 hourly        2026-04-20 02:00:00 TRUE      
 5 daily         2026-04-20 02:00:00 TRUE      
 6 hourly        2026-04-20 03:00:00 TRUE      
 7 hourly        2026-04-20 04:00:00 TRUE      
 8 every_3_hours 2026-04-20 04:00:00 TRUE      
 9 hourly        2026-04-20 05:00:00 TRUE      
10 hourly        2026-04-20 06:00:00 TRUE      

Des temps d’ancrage plus intuitifs pour les pipelines hebdomadaires/mensuels

Avant la version 1.1.0, les pipelines qui fonctionnaient à une fréquence inférieure à la fréquence quotidienne nécessitaient une date d’ancrage spécifique comme heure de début. Celles-ci semblaient arbitraires et rendaient difficile de savoir quel était le véritable point d’ancrage.

Abréviations des jours de la semaine

Prenez un pipeline qui est censé fonctionner chaque semaine à 04h00:00 le lundi. Avant la version 1.1.0, vous deviez choisir une date arbitraire du lundi comme heure de début, comme ceci :

#' Old pre 1.1.0 method for scheduling a weekly pipeline on a Monday
#' @maestroFrequency weekly
#' @maestroStartTime 2026-04-13 04:00:00
weekly_pipeline <- function() {
  
}

En regardant ce code, il n’est pas évident que le pipeline soit censé fonctionner le lundi. Il faudrait revoir le calendrier.

Désormais dans la version 1.1.0, vous pouvez spécifier un jour de semaine pour les pipelines exécutés à une cadence hebdomadaire :

#' New, 1.1.0 intuitive way
#' @maestroFrequency weekly
#' @maestroStartTime Mon 04:00:00
weekly_pipeline <- function() {
  
}

Désormais, il n’y a plus de date de début arbitraire et la logique est plus claire. Cela fonctionne tant que vous utilisez l’abréviation à 3 caractères pour le jour de la semaine. Notez que cela s’applique également aux pipelines ayant une fréquence bihebdomadaire.

Dates du mois

De même, nous pouvons éviter l’arbitraire d’une date précise dans le cas de pipelines mensuels en spécifiant la date numérique comme ceci :

#' @maestroFrequency monthly
#' @maestroStartTime 2 04:00:00
monthly_pipeline <- function() {
  
}

Le pipeline ci-dessus se déclencherait tous les 2 jours du mois à 04:00:00.

Meilleure observabilité des pipelines DAG qui s’activent – révision get_status().

Dans la nomenclature DAG, le fan-in se produit lorsque plusieurs pipelines différents entrent dans un seul pipeline. Un bon exemple serait un pipeline générique « send_logs_to_storage » qui est réutilisé par chaque pipeline d’un projet en tant que pipeline. maestroOutputs. Avant la version stable, cette opération fonctionnait dans maestro, mais la sortie de get_status ne rendrait compte que du dernier appel, même s’il était appelé plusieurs fois.

Pour cette raison, nous avons modifié la sortie de get_status() pour inclure une ligne par appel de pipeline unique dans une seule exécution d’orchestrateur. La même logique devait être appliquée à get_artifacts(). Nous avons également donné à chaque invocation un caractère unique run_id pour mieux suivre l’exécution distincte d’un pipeline et quelle exécution a été entrée dans quel pipeline en aval.

Jetez un œil à l’exemple de fan-in trivial suivant où p1 et p2 entrent tous deux dans p3 :

#' ./pipelines
#' @maestroFrequency hourly
#' @maestroOutputs p3
p1 <- function() {
  1
}

#' @maestroFrequency hourly
#' @maestroOutputs p3
p2 <- function() {
  2
}

#' @maestro
p3 <- function(.input) {
  .input * 2
}
schedule <- build_schedule(quiet = TRUE)

output <- run_schedule(
  schedule,
  orch_frequency = "1 hour",
  n_show_next = 0
)
── [2026-04-20 14:01:36]
Running pipelines ▶ 
── [2026-04-20 14:01:37]
Pipeline execution completed ■ | 0.089 sec elapsed 
✔ 4 successes | ! 0 warnings | ✖ 0 errors | ◼ 4 total
────────────────────────────────────────────────────────────────────────────────
get_status(schedule)[, c("pipe_name", "run_id", "input_run_id", "lineage")]
# A tibble: 4 × 4
  pipe_name run_id input_run_id lineage
  <chr>     <chr>  <chr>        <chr>  
1 p1        KbGACI <NA>         p1     
2 p2        mbmNzx <NA>         p2     
3 p3        loyy2f KbGACI       p1->p3 
4 p3        Zs1Avj mbmNzx       p2->p3 
get_artifacts(schedule)
$p1
[1] 1

$p2
[1] 2

$p3
$p3$loyy2f
[1] 2

$p3$Zs1Avj
[1] 4

Fonctions obsolètes

Cette version marque la dépréciation de deux fonctions interactives moins utilisées.

suggest_orch_frequency est obsolète sans calendrier spécifique pour la suppression. Cette fonction était une aide à moitié cuite pour donner la meilleure estimation d’une fréquence idéale d’orchestrateur compte tenu de tous les pipelines du projet. La raison pour laquelle cela se produit est parce que c’est dangereux s’il est utilisé automatiquement et perpétue une mauvaise tendance consistant à choisir les fréquences de pipeline que vous voulez plutôt que d’encourager une réflexion approfondie sur la meilleure façon d’orchestrer les pipelines.

show_network est également obsolète et sera supprimé dans une future version 1.2.0. Il s’agissait d’un mince wrapper autour du package DiagrammR pour montrer le réseau graphique impliqué par un DAG. Mon problème était qu’il nécessitait une dépendance à DiagrammR pour une capacité de visualisation triviale. De plus, dans la plupart des projets, la visualisation produite était assez difficile à visualiser en raison de la nature de maestro étant principalement destinée à plusieurs pipelines indépendants.

Conclure

Il existe un certain nombre d’autres changements mineurs abordés dans les notes de version. Si vous êtes curieux de connaître maestro et la manière dont il peut être utilisé en production, consultez certains de mes autres articles ou envisagez de consulter la vignette sur le déploiement. Je suis également heureux de répondre aux questions via LinkedIn ou aux problèmes sur Github ici. En tant que fervent partisan de R en production, j’espère que maestro contribuera à dissiper les mythes autour de la faisabilité de R pour les charges de travail de production.

Comme toujours, bonne orchestration !


PakarPBN

A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.

In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.

The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.

Jasa Backlink

Download Anime Batch

Leave a Reply

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