

- Description
- Rivage d’un grand lac agité sous un ciel chargé, avec des arbres nus et des enrochements.
- Source
- SAF1999 · page d’origine
- Licence
- CC0 Domaine public
OneLake + applications mobiles en SaaS : difficultés et pièges
Vous saurez anticiper les difficultés structurelles : capacité (CU), throttling, quotas d'API, fraîcheur, identité, qualité terrain, multi-locataire, coûts cachés, gouvernance, verrouillage…
En bref
- Vous saurez anticiper les difficultés structurelles : capacité (CU), throttling, quotas d'API, fraîcheur, identité, qualité terrain, multi-locataire, coûts cachés, gouvernance, verrouillage, compétences.
- Vous disposez d'un catalogue de 36 pièges au format symptôme / cause / remède, numérotés P01 à P36, à recopier dans votre checklist (checklist de projet).
- Vous saurez diagnostiquer un incident de capacité et un écart de chiffres sans accuser le mauvais maillon.
- Contexte : vue d'ensemble et architecture. Faits volatils vérifiés en octobre 2026 (état 2026-10) ; les seuils exacts sont à revérifier dans la documentation avant tout dimensionnement.
Sur cette page
- 1. Capacité et CU
- 2. Throttling et smoothing
- 3. Direct Lake : repli et garde-fous
- 4. Quotas et contraintes des API SaaS
- 5. Latence et fraîcheur
- 6. Identités et consentements
- 7. Qualité des données de terrain
- 8. Multi-locataire et multi-clients
- 9. Coûts cachés
- 10. Gouvernance et verrouillage
- 11. Compétences et organisation
- 12. Catalogue des pièges
- 13. Diagnostic en situation
- 14. Notes de synthèse
- 15. Voir aussi
Niveau : 🟢→🔴
1. Capacité et CU#
🟢 Novice.
Fabric ne se facture pas à la requête mais à la capacité : une SKU « F » (F2, F4, F8… F8192) fournit un nombre de Capacity Units (CU) par seconde, partagé entre toutes les charges de l'espace : pipelines, Spark, dataflows, requêtes SQL, rafraîchissements, rapports, Copilot. Une F64 offre 64 CU.
Ordres de grandeur de tarification publics (état 2026-10, à revérifier dans votre région et votre devise) : environ 0,18 USD par CU et par heure en paiement à l'usage dans une région américaine de référence, facturation à la seconde avec minute minimale, soit environ 263 USD par mois pour une F2 en 24 h/24 ; une réservation d'un an abaisse le coût d'environ 40 %. Les capacités peuvent être suspendues (on ne paie pas le calcul pendant la pause, mais la consommation lissée déjà accumulée est facturée à la mise en pause, et le stockage reste facturé) ou redimensionnées (changement de SKU) quand la charge varie.
Autres repères :
- Le seuil F64 a une signification de licence : à partir de F64 (ex-P1), les lecteurs d'un contenu partagé n'ont pas besoin de licence Power BI Pro ; en dessous, chaque lecteur doit en avoir une (état 2026-10, à vérifier avec la politique de licences en vigueur — voir coût, licences et capacité).
- Les garde-fous Direct Lake dépendent de la SKU (mémoire maximale, nombre de fichiers, lignes par table) : F2–F32 : 300 millions de lignes par table ; F64 : 1,5 milliard (état 2026-10).
- Copilot et les agents de données sont utilisables à partir de F2 (disponibilité étendue à toutes les SKU payantes depuis le 30 avril 2025 ; état 2026-10) et consomment des CU.
Choisir la SKU sur la taille des données plutôt que sur la forme de la charge (pics de rafraîchissement, concurrence des utilisateurs). Un entrepôt de 200 Go consulté par 20 personnes demande peu ; 500 utilisateurs qui ouvrent un rapport à 8 h 30 demandent beaucoup.
2. Throttling et smoothing#
🟡 Praticien.
Smoothing : Fabric lisse la consommation dans le temps. Les opérations d'arrière-plan (rafraîchissements, pipelines, Spark planifié) sont lissées sur 24 heures ; les opérations interactives (requêtes de rapport) sur une fenêtre plus courte (de quelques minutes à une heure, selon la charge). On peut donc dépasser temporairement sa capacité sans conséquence immédiate, en « empruntant » du futur.
Throttling : quand la dette de consommation dépasse certains seuils, la plateforme retarde puis rejette des opérations. Ordre de grandeur de l'escalade (à revérifier dans la documentation « Throttling » de Fabric) : dépassement jusqu'à 10 minutes de capacité future : aucune sanction ; 10 à 60 minutes : les opérations interactives sont retardées ; au-delà, elles sont rejetées ; si la dette dépasse 24 heures, les opérations d'arrière-plan sont rejetées elles aussi.
Conséquences concrètes :
- Un gros notebook lancé à 8 h peut dégrader les rapports à 11 h : la facture arrive après.
- Une boucle de rafraîchissement défaillante (relances automatiques) peut consommer tout le crédit.
- Les rapports « lents le lundi matin » sont souvent un symptôme de dette héritée du week-end.
Outils : Fabric Capacity Metrics app (consommation par item, opération, utilisateur, dépassements), alertes de capacité, journaux de pipelines et Spark. Pas de supervision, pas de maîtrise (exploitation, supervision et capacité).
Séparez deux capacités : une « prod utilisateurs » et une « ingestion/ad hoc ». C'est la parade la plus efficace au voisin bruyant, souvent moins chère que de surdimensionner une seule capacité.
3. Direct Lake : repli et garde-fous#
🟡 Praticien.
Deux variantes coexistent (état 2026-10) : Direct Lake on OneLake, qui ne se replie jamais en DirectQuery et échoue franchement si un garde-fou est dépassé, et Direct Lake on SQL analytics endpoint, qui se replie en DirectQuery si la source est une vue SQL, si l'endpoint applique une RLS SQL, ou si un garde-fou de la SKU est dépassé (paramètre « Direct Lake behavior »). Le repli est silencieux pour l'utilisateur : le rapport devient simplement lent et charge la source SQL.
Causes typiques de lenteur ou d'échec : trop de petits fichiers Parquet (dépassement du nombre de fichiers), tables non optimisées (pas de V-Order, row groups mal dimensionnés), colonnes trop larges (chaînes très longues, limite de 32 764 caractères), mémoire maximale de la SKU dépassée (pagination excessive), types non supportés.
Compactez les tables du gold après chaque chargement important (OPTIMIZE), gardez des fichiers de taille raisonnable, évitez les vues non matérialisées en source d'un modèle, et surveillez le « reframing ». Voir la documentation Microsoft « Cross-workload table maintenance and optimization » (état 2026-10).
4. Quotas et contraintes des API SaaS#
🟡 Praticien.
Le goulet d'étranglement d'un projet SaaS n'est souvent pas Fabric mais l'éditeur :
- Quotas d'appels par jour/heure/minute, par organisation ou par utilisateur d'intégration ; erreurs 429/503 à gérer avec backoff exponentiel et reprise.
- Pagination : curseurs expirants, pages de 200 enregistrements, décalage entre pages si la donnée change pendant l'extraction.
- Fenêtres de maintenance et dégradation des API en journée de forte charge (début de mois, clôtures).
- Limites de volume par export, par requête, par objet ; champs calculés non filtrables côté serveur.
- Coûts d'API facturés par certains éditeurs au-delà d'un forfait.
- Dépréciation d'API : versions retirées, nouveaux jetons obligatoires ; lire le calendrier de fin de vie.
- Contrat d'interface : l'éditeur ne s'engage pas sur votre usage analytique ; clarifier le support contractuel.
Une SFA offre 100 000 appels par jour. Un objet « visite » en 200 par page = 5 000 appels par million de lignes pour un chargement complet. Un chargement complet quotidien de 5 millions de lignes = 25 000 appels : faisable, mais un rejeu complet de 12 mois d'historique pourrait épuiser le quota des autres intégrations. (Chiffres illustratifs.)
5. Latence et fraîcheur#
🟡 Praticien.
La fraîcheur est une somme de latences, et la plus longue décide :
Saisie terrain -> synchro mobile -> back-end SaaS -> API/export -> ingestion Fabric
(min…jours) (min…h) (s) (min…h) (min)
-> transformation silver/gold -> reframing du modèle -> cache de rapport
(min) (s…min) (min si tuiles)
Que faire : mesurer de bout en bout (un enregistrement test dont on suit chaque horodatage), afficher la date de dernière donnée dans le rapport, négocier le besoin réel (un directeur régional a-t-il besoin du temps réel ?), et réserver l'eventstream aux cas à valeur démontrée.
Symptôme : « le rapport est faux » le matin. Cause : les commerciaux n'ont pas encore synchronisé ; la donnée n'est pas fausse, elle est absente. Remède : indicateur de complétude (nombre de commerciaux ayant synchronisé / attendus) et message dans le rapport.
6. Identités et consentements#
🟡 Praticien.
- Compte de service : l'intégration SaaS ne doit pas dépendre du compte d'une personne (départ, rotation de mot de passe, MFA). Préférer un principal de service ou une identité d'espace de travail, avec secrets dans Key Vault.
- Consentement administrateur (OAuth) : les connexions à Dynamics, Salesforce ou Graph exigent des consentements d'application qui relèvent de l'administrateur du locataire ; prévoir le délai.
- Jetons expirants : refresh tokens révoqués si le compte change de statut ou si l'éditeur resserre sa politique.
- Identité de l'utilisateur final : le RLS repose sur l'adresse (UPN) de l'utilisateur ; or l'identité dans la SFA (code commercial) diffère de l'identité Entra : table de correspondance à maintenir.
- Invités externes (agents de distributeurs, prestataires) : licence, sécurité, partage inter-locataire, délégation (shortcuts délégués en preview, état 2026-10).
- Accès conditionnel / MFA : peut bloquer les appels automatisés si mal configuré.
7. Qualité des données de terrain#
🟡 Praticien.
La saisie mobile engendre des défauts spécifiques : doublons de client, formats libres (téléphone, adresse), dates fausses (horloge de l'appareil), coordonnées GPS à zéro, champs obligatoires contournés (« xxx »), produits saisis hors référentiel, photos illisibles, visites « fantômes » créées par erreur.
Principes : mesurer avant de corriger (taux de nuls, doublons, hors référentiel, par commercial et par jour), ne pas corriger silencieusement (journaliser et rendre visible), remonter à la source (le retour vers le terrain vaut plus que tout nettoyage en aval) et séparer erreur technique (pipeline) et erreur métier (saisie). Voir qualité des données et tests et fiabilité des chiffres.
Rapprochement de doublons, détection d'anomalies de saisie et normalisation d'adresses sont des usages à fort gain, à encadrer (voir fichier IA).
8. Multi-locataire et multi-clients#
🔴 Expert.
Deux dimensions de « multi » se superposent : celle du SaaS (l'éditeur est multi-locataire ; vous êtes un locataire parmi d'autres) et celle de votre produit (un seul socle Fabric pour plusieurs clients ou filiales).
- Isolation : espaces distincts par client, ou un espace avec RLS par client ; l'isolation par RLS exige une rigueur irréprochable (une table de sécurité erronée = fuite). L'espace séparé coûte plus cher en gouvernance mais simplifie l'audit.
- Paramétrage par client : champs personnalisés propres à chaque tenant SaaS → schéma silver commun avec table « clé/valeur » ou colonnes dynamiques ; le gold conserve les colonnes standard.
- Capacité partagée : un client lourd peut en priver d'autres ; envisager capacités par segment ou quotas internes.
- Régions et conformité : données dans la région du locataire, ou région contractuelle du client ; Direct Lake exige la même région pour la source et le modèle.
- Releases : un éditeur déploie sur tous ses clients ; le comportement de votre intégration peut changer un lundi sans que vous n'ayez rien fait.
9. Coûts cachés#
🟡 Praticien.
| Poste | Pourquoi il est oublié | Ordre de grandeur / remarque |
|---|---|---|
| Capacité 24 h/24 pour une charge de 4 h/jour | On oublie la pause ou le redimensionnement | Jusqu'à plusieurs fois le besoin réel |
| Capacité de dev/test | « C'est juste pour essayer » | Souvent 20–50 % du coût de prod, à piloter |
| Stockage OneLake (bronze long, versions Delta) | Les anciennes versions ne sont libérées qu'après VACUUM |
Croissance régulière, souvent peu visible |
| Sorties réseau (egress) et appels d'API payants | Facturés côté éditeur ou cloud tiers | À lire dans les contrats |
| Licences Pro/PPU pour créateurs, lecteurs sous F64 | Les licences Power BI ne disparaissent pas | Voir coût et licences |
| Copilot et agents (CU) | Consomment la capacité sans ligne dédiée | Peut peser sensiblement sur la consommation de pointe |
| Temps humain d'exploitation | Pas dans le budget outil | Souvent le premier poste |
| Formation et montée en compétence | Sous-estimée | Voir §11 |
| Rejeux et chargements complets | Un simple « on recharge tout » coûte des CU et des appels API | À mesurer |
Étiquetez (convention de nommage + espaces séparés) chaque projet pour pouvoir imputer la consommation, et révisez le dimensionnement chaque trimestre sur la base de l'application de métriques de capacité.
10. Gouvernance et verrouillage#
🔴 Expert.
Gouvernance : sans règles, un tenant Fabric devient un « libre-service sans responsable » ; chaque item a un propriétaire, un statut (certifié, promu, essai), une durée de vie. Voir gouvernance, catalogue et self-service et gouvernance des données. Les fonctions de lignage, de catalogue (OneLake catalog) et de gouvernance (Purview) aident mais ne remplacent pas la discipline ; certaines fonctions de découverte (API de recherche, outils MCP) sont en preview (état 2026-10).
Verrouillage : le format de stockage (Delta/Parquet) est ouvert ; ce qui enferme, c'est l'assemblage : pipelines Fabric, dataflows gen2, modèle sémantique Direct Lake, sécurité OneLake, capacités. Mesure de réversibilité : « si on quitte Fabric dans 18 mois, que garde-t-on tel quel ? » (données Delta, notebooks Spark, SQL de transformation ; à réécrire : orchestration, modèle de sécurité, semantic model). Plus le logiciel est « no-code », plus la sortie coûte. Comparez dans le comparatif OneLake vs SQL Server.
Cadence d'évolution : Fabric livre en continu ; une fonction « preview » peut changer ou disparaître. Règle : pas de dépendance critique à une fonction preview sans plan de repli et sans accord explicite de l'équipe.
11. Compétences et organisation#
🟡 Praticien.
Un projet OneLake + SaaS demande, pour une équipe de 3 à 6 personnes, quatre familles de compétences : ingestion/API (REST, OAuth, pagination), Delta/Spark/SQL (MERGE, optimisation), modélisation et DAX, exploitation de capacité (métriques, coûts). Une équipe issue du monde SQL Server maîtrise souvent le deuxième et le troisième par analogie, mais pas l'ingestion API ni la capacité.
Pistes : binôme senior/junior sur chaque brique, un référent capacité nommé, runbook d'incident, revue de code des notebooks, kata sur un petit périmètre avant le grand. Évitez le « héros » unique : le facteur camion de l'intégration API est très souvent égal à 1.
12. Catalogue des pièges#
🔴 Expert. Chaque piège : symptôme, cause, remède.
12.1 Capacité et exploitation#
| ID | Symptôme | Cause | Remède |
|---|---|---|---|
| P01 | Rapports lents ou refusés le matin | Dette de capacité du week-end (backlog de smoothing) ; un job lourd en fin de nuit | Étaler les charges, séparer capacités, alerter sur le taux d'utilisation, décaler les jobs |
| P02 | Capacité saturée sans raison évidente | Un pipeline ou notebook en boucle de relances | Limiter les relances, alerte sur la durée anormale, quota par espace |
| P03 | Facture supérieure au budget | Capacité allumée en continu, tests laissés actifs, Copilot activé largement | Pause automatisée, redimensionnement planifié, revue mensuelle |
| P04 | Dev et prod se perturbent | Même capacité pour tous | Capacités séparées ou au minimum espaces et horaires distincts |
| P05 | Aucun diagnostic possible après coup | Métriques non conservées, pas d'application Capacity Metrics | Installer l'application, journaliser en continu, historiser les incidents |
| P06 | Spark démarre lentement ou échoue | Pool/session non dimensionné, pic de concurrence | Pools de démarrage, files d'attente, limiter les sessions interactives |
12.2 Direct Lake et modèle#
| ID | Symptôme | Cause | Remède |
|---|---|---|---|
| P07 | Rapport soudain lent, source SQL très sollicitée | Repli DirectQuery (Direct Lake on SQL) : vue, RLS SQL, garde-fou | Passer à Direct Lake on OneLake, matérialiser les vues, optimiser, surveiller le comportement de repli |
| P08 | Rafraîchissement du modèle en échec | Dépassement d'un garde-fou (fichiers, lignes, mémoire) | Compacter, partitionner Delta, réduire les colonnes, monter de SKU |
| P09 | Erreur « valeurs dupliquées côté un » | Doublon de clé de dimension | Test d'unicité en gold avant publication ; quarantaine |
| P10 | Colonne absente ou type refusé | Type Delta complexe, GUID, binaire | Convertir en silver/gold |
| P11 | Nouvelles données non visibles | Reframing non déclenché, endpoint SQL non synchronisé | Activer les mises à jour automatiques ou déclencher le reframing par API en fin de pipeline |
| P12 | RLS contournée ou inopérante | RLS de l'endpoint SQL ignorée en Direct Lake on OneLake ; lakehouse lisible | Définir la RLS dans le modèle (identité fixe) ou OneLake security ; restreindre les rôles d'espace |
| P13 | Mesures de comptage différentes selon le rôle | Rétro-filtrage des faits vers les dimensions sous RLS | Documenter, tester, concevoir les mesures de comptage en conséquence |
| P14 | Déploiement Test→Prod lit toujours Test | Règles de re-liaison de source non supportées ou oubliées | Paramétrer, auto-binding, test de fumée post-déploiement |
12.3 Ingestion SaaS#
| ID | Symptôme | Cause | Remède |
|---|---|---|---|
| P15 | Lignes manquantes après synchronisation tardive | Watermark avançant sur la date d'ingestion | Recouvrement de fenêtre, date serveur, réconciliation par comptage |
| P16 | Fantômes : lignes supprimées dans l'appli encore présentes | Suppressions non exposées par l'API | Soft delete, flux de suppressions, réconciliation périodique des clés |
| P17 | Pipeline cassé un lundi | Champ ajouté/renommé par l'éditeur | Bronze souple, projection explicite en silver, test de contrat, alerte |
| P18 | Erreurs 429 en rafale | Dépassement de quota | Backoff, étalement, mutualisation d'un jeton, négocier un quota |
| P19 | Chargement de 12 mois impossible | Quota d'API insuffisant | Export en masse côté éditeur, échelonner, fichiers plutôt qu'API |
| P20 | Données incohérentes entre deux pages d'API | Mutation pendant la pagination | Pagination par curseur stable, extraction en fenêtre fermée, vérification par comptage |
| P21 | Jeton expiré, intégration morte un week-end | Compte personnel ou secret expiré | Principal de service, rotation planifiée, alerte d'expiration |
| P22 | Doublons de lignes après un rejeu | Ingestion non idempotente | MERGE sur clé naturelle, lot identifié, déduplication silver |
| P23 | Chiffres du jour qui changent le lendemain | Faits tardifs de la synchronisation hors-ligne | Afficher la complétude, stabiliser à J+N, double horodatage |
| P24 | Durées négatives, doublons d'une heure | Fuseaux et changements d'heure | UTC en stockage, conversion à l'affichage, tests sur les dates charnières |
12.4 Qualité, sécurité et conformité#
| ID | Symptôme | Cause | Remède |
|---|---|---|---|
| P25 | Clients en double dans les rapports | Saisie par plusieurs commerciaux | Table de correspondance, règles de rapprochement, revue humaine des ambigus |
| P26 | Positions GPS aberrantes | Appareil sans fix, valeurs par défaut | Règles de plausibilité, exclusion et signalement |
| P27 | Données personnelles conservées trop longtemps | Pas de rétention définie en bronze | Durées par table, effacement propagé à tous les niveaux |
| P28 | Un prestataire voit des données d'un autre client | Isolation par RLS mal testée en multi-client | Espaces séparés, tests de non-fuite automatisés |
| P29 | Photos ou fichiers volumineux ralentissent tout | Pièces jointes placées dans des tables | Fichiers hors tables + métadonnées |
12.5 Organisation et stratégie#
| ID | Symptôme | Cause | Remède |
|---|---|---|---|
| P30 | « On ne sait pas d'où vient ce chiffre » | Lignage absent, transformations dans le rapport | Logique en amont, lignage Fabric/Purview, glossaire des mesures |
| P31 | Chacun crée ses propres modèles | Self-service sans cadre | Modèle certifié, rapports minces, rôles de création |
| P32 | Perte de la connaissance | Intégration portée par une personne | Binômes, documentation, code versionné, runbooks |
| P33 | Dépendance à une fonction preview | Enthousiasme sans plan de repli | Registre des dépendances preview, revue trimestrielle, alternative GA |
| P34 | POC jamais industrialisé | Pas de critères d'entrée en production | Critères explicites (tests, supervision, sécurité, exploitation) |
| P35 | L'IA donne une réponse fausse avec aplomb | Modèle sémantique sans description, mesures ambiguës | Descriptions, synonymes, jeu de questions de test, revue humaine |
| P36 | Sortie de Fabric très coûteuse | Logique dans des outils no-code propriétaires | Logique critique en SQL/Spark versionnés, documentation des règles hors outil |
Ce catalogue n'est pas exhaustif ni hiérarchisé par probabilité ; les pièges P15, P16, P23 et P07 sont, d'expérience, les plus fréquents et les plus coûteux dans les projets de reporting sur données d'applications de terrain (appréciation, non statistique).
13. Diagnostic en situation#
🔴 Expert.
Arbre de décision pour « le chiffre est faux ou le rapport est lent » :
- Faux ou absent ? Comparez à la source (requête directe sur l'API ou export). Si la source diffère : problème d'ingestion (P15–P24). Si la source est identique : problème de modèle/mesure (P09, P12, P13).
- Lent ? Le rapport est-il en repli (P07), la capacité en throttling (P01) ou le modèle dépasse-t-il les garde-fous (P08) ?
- Récent ou ancien ? Changement d'éditeur (P17), déploiement (P14), dépassement de quota (P18), jeton (P21).
- Reproductible ? Pour un utilisateur seulement : RLS (P12–P13) ; pour tous : source ou capacité.
« Les visites de la semaine dernière ont baissé de 3 % depuis hier. » Hypothèses classées : (1) suppressions détectées par la réconciliation (P16, normal) ; (2) correction d'un doublon (P25, normal) ; (3) un lot rejeté en quarantaine (P17, anormal). On vérifie la table de journal : 412 lignes marquées supprimées, 28 doublons fusionnés, aucune quarantaine → la baisse est attendue, on documente.
Un journal d'exécution par lot (début, fin, lignes lues/écrites/rejetées, version du schéma, statut) permet de répondre en quelques minutes. Sans lui, chaque incident est une enquête.
14. Notes de synthèse#
Appréciations d'expert, contextuelles (cf. NOTATION). Note de gravité typique et de probabilité par famille ; contexte : équipe de 3 à 6 personnes, SFA SaaS, 100–500 utilisateurs.
| Famille de difficultés | Probabilité | Gravité | Difficulté de prévention | Commentaire |
|---|---|---|---|---|
| Capacité / throttling | 4/5 | 4/5 | 2/5 | Prévisible avec supervision et séparation des capacités |
| Repli et garde-fous Direct Lake | 3/5 | 3/5 | 2/5 | Évitable par optimisation Delta |
| Quotas d'API SaaS | 4/5 | 3/5 | 3/5 | Dépend de l'éditeur |
| Suppressions et schéma qui dérive | 5/5 | 4/5 | 3/5 | Les plus fréquents ; contrats et réconciliation |
| Fraîcheur ressentie | 5/5 | 3/5 | 2/5 | Surtout un sujet de communication |
| Identités et consentements | 3/5 | 4/5 | 2/5 | Anticiper avec l'administrateur |
| Qualité terrain | 5/5 | 4/5 | 4/5 | Se règle surtout à la source |
| Coûts cachés | 4/5 | 3/5 | 3/5 | Imputation et revue |
| Verrouillage | 3/5 | 3/5 | 3/5 | Dépend de la dose de no-code |
| Compétences | 4/5 | 4/5 | 4/5 | Longue à construire |
15. Voir aussi#
- Dossier : Vue d'ensemble · Architecture · IA · Pièges SQL Server en SaaS · Comparatif · Bonnes pratiques transverses · Checklist de projet
- Matrices : Développement BI · Performance et volumétrie · Sources et contrats de données · Exploitation et support
- Conduite de projet : Pièges et bonnes pratiques
- Termes : Glossaire
✻ Rédigé par Claude Sonnet 5.5