Tech Blog.

Thoughts, stories, ideas.

MSSQL sur Linux – les détails

11. April 2017

Quand on a su que Microsoft porta MSSQL à Linux, beaucoup d’administrateurs système ont probablement pensé que cela aboutirait à une catastrophe. Les fournisseurs d’entreprise n’ont pas encore réussi à faire briller les ports Linux – installer (et configurer) Oracle DB sur un serveur Linux est l’une des pires expériences qu’un administrateur puisse avoir. Chez Microsoft, il ressemble à ceci :

 

$ curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo | sudo tee /etc/yum.repos.d/mssql-server.repo

$ sudo yum update

$ sudo yum install mssql-server

 

Vous pouvez vous frotter les yeux dans l’émerveillement – Microsoft a en fait compris comment empaqueter des logiciels pour Linux. \o/

Mais à quoi ressemble MSSQL pour Linux de près ? Les ingénieurs de Adfinis SyGroup ont jeté un coup d’œil dans les coulisses.

Sous le capot

L’une des croyances les plus importantes lors du portage de MSSQL sous Linux est que le comportement de l’exécution ne change pas par rapport à Windows. Les applications ne devraient même pas remarquer quand un Tux est introduit dans le backend.

Ici, la question se pose immédiatement de savoir comment Microsoft résout un tel problème, après tout, il y a toujours des cas Edge Cases lorsque vous transférez une solution sur une plate-forme complètement différente. Ce sont précisément ces cas limites que l’on veut exclure d’une application centrale d’entreprise ; après tout, même la moindre régression dans une solution critique peut causer d’immenses dommages. Si vous regardez les nombreuses dépendances de MSSQL, vous verrez qu’un port incluant toutes les librairies et environnements comme CLR est une tâche monstre difficile à justifier. Dans de telles situations, il faut faire preuve d’inventivité et nous constatons que Microsoft a choisi une solution très créative.

Une chose doit être dite à l’avance, Microsoft utilise +/- les mêmes exécutables et bibliothèques sous Linux que sous Windows. La vue d’ensemble suivante explique comment cela fonctionne.

SQL OS

Déjà avec SQL Server 2005, Microsoft a commencé à combiner les parties dépendantes du système d’exploitation dans son propre module appelé SQLOS. L’objectif à l’époque n’était toutefois pas de soutenir d’autres plates-formes, mais de fournir des fonctions de surveillance et d’analyse plus approfondies. Cependant, cela a eu l’effet secondaire positif que la plupart des accès au système d’exploitation étaient centralisés. Ceci devint plus tard un gros avantage pour le portage sous Linux. Cependant, cette implémentation n’était bien sûr pas encore conçue pour supporter différents systèmes d’exploitation et de nombreuses spécificités Windows étaient encore clairement visibles pour les couches supérieures.

Avec cette couche, les appels système pourraient être portés de manière centralisée, mais les autres modules et bibliothèques utilisés par SQL Server n’en bénéficieraient pas encore. Heureusement, un autre département au sein de Microsoft avait lancé le projet Drawbridge pour implémenter une abstraction pour les processus Windows – à l’origine pour simplifier la virtualisation des systèmes Windows.

Drawbridge

Drawbridge est un projet de recherche Microsoft qui a vu le jour en 2011. Drawbridge visait essentiellement à réduire les coûts de virtualisation des systèmes Windows. Pour y parvenir, Microsoft avait besoin des composants suivants en quelques mots :

  • Isolement du processus
  • Mappage des couches de l’ABI Windows (kernel/syscalls)
  • Implémentation de l’espace utilisateur des APIs/Libs Windows (sous-système win32)
  • Pilote sur le système invité pour initialiser la mémoire de la VM

Ces ingrédients donnent déjà une image relativement claire de ce qui se passe à Drawbridge quand une VM est créée. Tout d’abord, le pilote du système invité lance la mémoire de la machine virtuelle. Dans cette étape, une couche est chargée qui couvre l’ABI Windows – ceci est fait avec un noyau User Space NT. En outre, une bibliothèque est chargée dans la mémoire de la machine virtuelle qui mappe les API Windows. Le noyau en mode utilisateur et la bibliothèque, qui mappe les nombreuses API, font partie de LibOS. Une fois la VM lancée avec LibOS, elle peut exécuter des binaires Windows et charger des bibliothèques Windows sans appel système ou API quittant la VM.

Selon nos informations, Drawbridge n’a jamais été intégré dans un produit, mais a montré comment faire “la virtualisation Windows légère”.

LibOS

Comme déjà mentionné, Drawbridge inclut une implémentation complète de l’espace utilisateur des appels système Windows et des API requises sous Windows. Cela signifie que Drawbridge a implémenté une sorte de version d’espace utilisateur du noyau NT (appelé NTUM – “user mode NT”) et une bibliothèque appartient à LibOS, qui mappe les API Windows dans l’espace utilisateur. Les deux éléments sont massivement plus fins que les implémentations réelles dans un environnement Windows normal, mais donnent un environnement d’exécution qui ne se comporte pas différemment d’un environnement Windows classique.

SQL PAL

Drawbridge et SQLOS en combinaison permettent d’exécuter MSSQL Server sous Linux, mais leur implémentation va parfois beaucoup trop loin et résout en partie les mêmes problèmes. Pour cette raison, l’équipe Microsoft a décidé d’extraire les parties pertinentes et de construire une nouvelle couche d’abstraction de plate-forme (PAL) à partir de Drawbridge, LibOS et la couche d’abstraction SQLOS. Il ne contient que l’ABI et les API pertinentes pour SQL Server et offre tout ce qui est nécessaire pour fournir un environnement d’exécution pour MSSQL. La couche inférieure est constituée d’un binaire Linux (dans l’espace utilisateur), qui initie le reste de l’environnement.

Ouvrir les Tâches concernant SOS et LibOS

L’état actuel est que MSSQL sous Linux fonctionne déjà bien, mais l’équipe Microsoft n’a pas encore fini de fusionner SOS et LibOS. Il existe actuellement deux versions de SOS / LibOS dans le SQL Server pour Linux, avec la version “supérieure” renvoyant les appels à SQL PAL, qui à son tour utilise la version plus récente de SOS pour envoyer des requêtes au noyau Linux via un pont hôte. Microsoft travaille actuellement intensivement à l’élimination de cette duplication et à l’unification des deux instances afin que l’abstraction entière puisse se faire en SQL PAL à la fin.

L’architecture finale en un coup d’œil

Comme mentionné, Drawbridge et SQLOS ont quelques chevauchements que Microsoft élimine. En général SQL PAL forme l’environnement d’exécution pour MSSQL et le package RPM/DEB fournit tous les exécutables ainsi que les bibliothèques Windows supplémentaires nécessaires pour exécuter MSSQL basé sur SQL PAL. Selon Microsoft, environ 81 Mo de bibliothèques Windows non compressées sont incluses (soit seulement environ 1 % d’une installation Windows complète), le binaire SQL PAL fait environ 8 Mo.

Le logiciel finit dans `/opt’ et est géré avec systemd. Microsoft livre tout ce qui est prêt à l’emploi, y compris les pages de manuel.

En général, le processus de démarrage de MSSQL sous Linux peut être décrit comme suit : le composant hôte (binaire Linux standard) démarre en tant que premier SQL PAL, ce qui lance le serveur MSSQL dans l’environnement Windows “émulé”.

L’architecture finale ressemble à ceci :

 

 

 

 

 

 

 

 

 

Le lecteur incliné aura probablement déjà remarqué que cette approche ressemble beaucoup à celle du Sous-système Windows pour Linux.

Premières expériences

En coopération avec l’un de nos clients, nous travaillons déjà sur la première migration d’une base de données MSSQL vers Linux.

Les premières expériences sont très bonnes et montrent que le concept fonctionne aussi dans la pratique.

Pour la gestion de la BD sous Linux, le CLI et le SSMS conviennent tous deux, mais ce dernier doit encore être exécuté sous Windows jusqu’à nouvel ordre. En tant qu’alternative indépendante de la plate-forme pour les administrateurs qui n’utilisent pas Windows, Microsoft propose l’extension officielle MSSQL pour Visual Studio Code, qui peut être utilisée sous Linux, Mac et Windows. Ce n’est pas un remplacement complet du SSMS, mais la solution fonctionne très bien et offre également un support IntelliSense.

Limites de MSSQL sous Linux

Microsoft communique très ouvertement sur les limitations actuelles de MSSQL sous Linux et les liste exactement dans les notes de publication.

Actuellement non encore disponibles sont par exemple :

  • Recherche plein texte
  • réplication
  • Authentification Active Directory

Des informations plus détaillées peuvent être trouvées dans les notes de publication officielles.

Prochaines étapes

Nous prévoyons plusieurs autres tests et si le temps le permet, nous aborderons l’un ou l’autre sujet dans ce blog. Nous sommes particulièrement intéressés par le clustering de MSSQL sous Linux, ainsi que par l’utilisation de MSSQL dans les conteneurs.

Conclusion

Vous devez enrouler une couronne de Microsoft pour la solution actuelle – ce que les ingénieurs de Redmond nous ont montré en termes d’implémentation technique nous laisse stupéfaits Techies.

Avec l’approche choisie, Microsoft ouvre également la voie au portage d’autres services Windows vers Linux. Enfin, SQL PAL peut également être utilisé pour Exchange, AD, IIS, etc. Nous ne serions pas surpris si Microsoft annonçait en 2017 qu’Exchange for Linux est maintenant aussi disponible.

Intérêt ?

Êtes-vous intéressé à faire voler MSSQL sous Linux ? Nous sommes heureux de vous aider et de vous soutenir grâce à notre expertise acquise dans le cadre d’éventuels projets de migration. Nous serions heureux de prendre contact avec vous, vous pouvez nous joindre à l’adresse suivante :info@adfinis.com.

Sources