55 votes

Socket Unix vs TCP/IP host:port

Quelqu'un pourrait-il me décrire les avantages et les inconvénients de l'utilisation d'un fichier socket Unix par rapport à un tcp/ip localhost:port lors de la configuration de services sur un serveur (Ubuntu, FWIW) ?

Dans ce cas précis, il s'agit d'un serveur WSGI en Python (uWSGI), mais je m'intéresse à la question en général (par exemple, je sais que vous pouvez configurer MySQL de deux manières).

Je réalise que l'utilisation de tcp/ip signifie que les services peuvent être exposés à d'autres machines, mais je suis simplement intéressé de savoir s'il y a des compromis de performance lors de l'accès local aux services.

A la vôtre.

51voto

Benedikt Niessen Points 733

Les sockets Unix sont un peu plus rapides car vous n'avez pas la surcharge tcp. Si vous réalisez que cette perte de performance est une question de charge du serveur. Si vous n'avez pas une charge de serveur très élevée, vous ne la reconnaîtrez pas.

Si vous utilisez Jails (FreeBSD) ou une autre technologie de virtualisation pour séparer, par exemple, le serveur MySQL du serveur Web, vous utilisez souvent la configuration tcp/ip au lieu des sockets. Les règles du pare-feu doivent cependant restreindre l'accès.

Vous devez déterminer si votre système est soumis à une charge importante, de sorte qu'un socket est indispensable, ou si vous pouvez vous concentrer sur une bonne conception du système (séparation des services), une solution tcp/ip serait alors préférable.

Alors faites une réponse longue et courte :

Oui, il y a une différence de performance, les sockets sont plus rapides. Si vous ne souffrez pas d'une charge de serveur élevée, choisissez simplement ce qui convient le mieux à la conception de votre système.

16voto

Thomas Upton Points 958

Il s'agit essentiellement d'un compromis entre les performances et la flexibilité. Les sockets de domaine Unix vous donneront un peu plus de performance, tandis qu'un socket connecté à localhost vous donne un peu plus de portabilité. Vous pouvez facilement déplacer l'application serveur vers un autre système d'exploitation en changeant simplement l'adresse IP de localhost vers un nom d'hôte différent.

Un socket de domaine Unix utilise le système de fichiers local pour créer un mécanisme IPC entre les processus serveur et client. Vous verrez un fichier dans /var quelque part lorsque le socket de domaine Unix est connecté.

Si vous recherchez une solution purement performante, vous pouvez envisager une IPC à mémoire partagée. Mais, c'est un peu plus complexe.

6voto

Peter Green Points 3844

Les avantages des sockets de domaine Unix.

  1. L'accès peut être géré par le système de permissions des utilisateurs Unix, soit en définissant les permissions sur la socket elle-même, soit par le serveur qui lit le nom d'utilisateur du client qui se connecte.
  2. Moins de risques d'exposer par inadvertance la prise au monde extérieur. Par exemple, si le serveur exécute également un proxy web, celui-ci peut autoriser par inadvertance les connexions aux sockets sur localhost.

Inconvénients des sockets de domaine Unix

  1. Non portable aux systèmes non-unix.
  2. Peut être gênant avec les chroots, les prisons ou autres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X