--- tags: ARC, INSEE title: Architecture applicative et fonctionnelle de ARC --- # Architecture applicative et fonctionnelle de ARC --- ## Couverture fonctionnelle ### GSBPM ![](https://github.com/I3S-ESSnet/Documents/raw/master/final-meeting/presentations/arc_gsbpm.png) ### Diagramme de cas d'utilisation ![](https://github.com/InseeFr/ARC/raw/master/tutorial/img/user_use_cases_diagram.png) ### Couverture fonctionnelle détaillée [Document du kick off meeting ESSNET I3S](https://github.com/I3S-ESSnet/Documents/blob/master/ko-meeting/wp1/arc-service.md) ## Architecture applicative ### AS-IS ARC - java postgres - les différents composants arc-ws, arc-web, arc-batch, arc-database sont dockerisés et l'ensemble déployable sur kubernetes (packaging helm) - composant docker : postgres ```plantuml @startuml scale 1200 width scale 650 height ' IS2-RELAIS-ARC architecture AS-IS 2021-03-25 ' ' Using: ' - https://github.com/rabelenda/cicon-plantuml-sprites/blob/master/sprites-list.md for icons ' - http://plantuml.com/en/creole for formatting !define SPRITESURL https://raw.githubusercontent.com/rabelenda/cicon-plantuml-sprites/v1.0/sprites !includeurl SPRITESURL/tomcat.puml !includeurl SPRITESURL/postgresql.puml !includeurl SPRITESURL/java.puml title __**ARC architecture 2022-09-15**__ ' Users ---------- actor "ARC user" as ARCUSER ' nodes ---------- node "ARC-WEB\n <$tomcat> 9+ <$java> 11" as ARCWEB #lightblue { } node "ARC-BATCH\n <$java> 11+" as ARCBATCH #green { } node "ARC-WS\n <$tomcat> 9+ <$java> 11+" as ARCWS #red { } component "ARC-CORE\n <$java> 11+" as ARCCORE #yellow { } node "Keycloak\n <$java> 11+" as KEYCLOAK { } ' database ---------- database "ARC-Database \n <$postgresql> 11+" as DATADB { } ' folder ---------- folder "Shared file system" as SFS ' notes ---------- note left of DATADB #99FF99: Metadata schema\nSandbox schemas note right of SFS #99FF99: Sanbox directories ' webservice client apps ---------- node "Webservice client\n\tapp\n <$tomcat> 9+ <$java> 11+" as WSCLIENT database "Webservice client\n\tdatabase \n <$postgresql> 11+" as WSCLIENTDATADB { } ' batch executor ---------- 'agent "Batch executor" as BATCHEXEC ' files providers ---------- agent "Files providers\n(Machine, users, ...)" as FP ' links ---------- ARCUSER -[thickness=5]down-> ARCWEB #blue: 1.\nwrite\nrules\nfor\nsandbox ARCUSER --[thickness=5]down-> ARCWEB #red: 2\nupload\nexternal\nreferences\files ARCUSER --[thickness=5]down-> ARCWEB #orange: 3\nupload\nthe\nfiles\nto\nbe\nloaded\nin\nsandbox ARCUSER <--[thickness=10]down-> ARCWEB #green: 4\nexecute\nARC\nservices\non\nsandbox ARCUSER <--[thickness=5]down-> ARCWEB #purple: 5\ndownload\nfiles\nfrom\nsandbox ARCUSER <--[thickness=5]down-> ARCWEB #brown: 6\ndownload\nrules\nor\nprocessed\ndata\nfrom\nsandbox ARCUSER <..[dotted]-> ARCWEB: https ARCWEB <-[thickness=5]> KEYCLOAK : 1,2,3,4,5,6 KEYCLOAK <-[thickness=5]> ARCWS : 4 ARCWEB--ARCCORE ARCBATCH--ARCCORE ARCWS--ARCCORE ARCCORE -[thickness=5]down-> DATADB #blue: 1\nset\nrules ARCCORE --[thickness=5]down-> DATADB #red: 2\nset\nexternal\ntables ARCCORE <--[thickness=5]down-> DATADB #green: 4\nARC\nprocess\nSQL ARCCORE --[thickness=5]down-> SFS #orange: 3\nupload\nfiles\nin\nsandbox\nfilesystem ARCCORE <--[thickness=10]down- SFS #green: 4\nread files\nto\nbe\nprocessed ARCCORE <--[thickness=5]down- SFS #purple: 5\nretrieve\nfiles\nfrom\nsandbox ARCCORE <--[thickness=5]down- DATADB #brown: 6\nget\nrules\nor\nprocessed\ndata WSCLIENT <--[thickness=5]down-> ARCWS #green: 4\nexecute\nARC\nengine\non\nfiles\nand\nget\nresults\n**REST API** WSCLIENT <--[thickness=5]down-> ARCWS #brown: 6\nretrieve\nprocessed\ndata\nfrom\nsandbox\n**SERVLET** WSCLIENT <..[dotted]-> ARCWS: https WSCLIENT --[thickness=5]down-> WSCLIENTDATADB #brown: 6\nimport\nprocessed\ndata\nfrom\nsandbox ' batch links BATCHEXEC <--[thickness=10]down-> ARCBATCH #green: 4\nexecute\nARC\nservices\non\nsandbox ' FP -> SFS #brown: Provide files @enduml ``` --- #### Fonctionnement du pipeline Le pipeline d'accueil de fichier - est normalisé et découpé en phase (step) - est paramétrable et exécutable bac à sable par bac à sable (sandbox) - identifie chaque fichier pour savoir quelles règles lui appliquer - contrôle et filtre optionnellement les données des fichiers en entrée selon les règles utilisateurs - stocke les données des fichiers en entrée selon les règles utilisateurs et vers un ou plusieurs modèles de données définis aussi par l'utilisateur - utilise optionnellement des ressources externes ou des sorties issues de l'accueil d'autres fichiers - s'éxécute en production de la même manière que sur un bac à sable --- #### Diagramme d'état ![](https://github.com/InseeFr/ARC/raw/master/tutorial/img/pipeline.png) --- ## Interfaçage avec ARC --- ### En entrée - Dépot ou reception automatique de fichiers - ARC assure la cohérence du système de fichier en cas d'erreur - Ressources externes - l'utilisateur peut déposer dans ARC des données annexes (référentiel, nomenclature, tables de correspondaces, ...) - pour l'instant, ARC ne peut pas utiliser de données ou référentiels localisées hors de l'application ARC --- ### En sortie - ARC propose un webservice de récupération de données - multi-modèle et multi-clients - fonctionnalité d'export via l'IHM en fichier --- ### Fonctionnement de la récupération des données par un client > [TODO] --- ## (Ré)Utilisations internes à l'INSEE - SIERA : 3 instances de ARC pour le chargement de la DSN et le calcul du produit tout salarié - ESANE : intégration des liasses et de leurs données fiscales - SIRENE4 : service de contrôle de conformité des liasses - L'utilisation de ARC pour l'intégration des liasses dans le SI SIRENE4 est à l'étude - ISTAT : réutilisation par ISTAT (statistique Italie) dans le cadre du projet ESSNET I3S - reporting et production statistique --- <style> code.blue { color: #337AB7 !important; } code.orange { color: #F7A004 !important; } code.green { color: #049904 !important; } code.black { color: #000000 !important; } body { background-color:#ffffff !important; } ul, li, .reveal ul, .reveal li { color: #000000 !important; font-size:90%; } html, body, .reveal div, .reveal applet, .reveal object, .reveal iframe, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal p, .reveal blockquote, .reveal pre, .reveal a, .reveal abbr, .reveal acronym, .reveal address, .reveal big, .reveal cite, .reveal code, .reveal del, .reveal dfn, .reveal em, .reveal img, .reveal ins, .reveal kbd, .reveal q, .reveal s, .reveal samp, .reveal small, .reveal strike, .reveal strong, .reveal sub, .reveal sup, .reveal tt, .reveal var, .reveal b, .reveal u, .reveal center, .reveal dl, .reveal dt, .reveal dd, .reveal ol, .reveal fieldset, .reveal form, .reveal label, .reveal legend, .reveal table, .reveal caption, .reveal tbody, .reveal tfoot, .reveal thead, .reveal tr, .reveal th, .reveal td, .reveal article, .reveal aside, .reveal canvas, .reveal details, .reveal embed, .reveal figure, .reveal figcaption, .reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal output, .reveal ruby, .reveal section, .reveal summary, .reveal time, .reveal mark, .reveal audio, .reveal video { color : #000000; font-size:90%; } .hljs { background: #000000 !important; font-size:20px !important; } </style>