Utiliser Elixir Phoenix dans un projet SaaS commercial

Linkly est écrit en Elixir.

J'ai toujours voulu découvrir l'écosystème Erlang, et Elixir est une voie facile.

Je ne couvrirai pas les avantages de BEAM ou Erlang directement ici, car cela a été écrit ailleurs. Au lieu de cela, je me concentrerai sur les aspects pratiques de l'utilisation d'Elixir Phoenix pour un vrai projet.

Je vais supposer que vous savez ce qu'est Ruby on Rails, car Phoenix, le framework web d'Elixir, est fortement inspiré de Rails.

Programmer réellement en Elixir Phoenix

Écrire en Elixir est une expérience joyeuse.

Il suit des paradigmes similaires à Rails, y compris MVC, et ressemble même à celui-ci.

Contrairement à Rails, le code est compilé avant d'être exécuté. C'est une étape utile car elle vous permet de détecter des erreurs que vous n'auriez peut-être pas repérées autrement.

Les modèles dans Phoenix sont regroupés en « Contextes ». Il s'agit d'un niveau d'abstraction supplémentaire, destiné à créer une séparation claire entre les parties des applications, par exemple Utilisateurs et Produits. Chaque contexte peut contenir n'importe quel nombre de modèles.

Performance

Beaucoup a été dit sur la performance dans d'autres blogs, je vais donc couvrir l'aspect pratique ici.

Pour un framework web complet, la performance est clairement beaucoup plus rapide que Rails, et nécessite beaucoup moins de matériel pour fonctionner.

Le temps de « démarrage » de l'exécution de mix phx.server par rapport à rails server est plus rapide. Même lors du développement sur un ordinateur portable, les pages se chargent nettement plus rapidement avec Phoenix.

Disponibilité des packages pour Elixir Phoenix vs Rails

Superficiellement, il semble qu'il y ait une différence ici. Rails a des milliers de gems contre le dépôt Hex d'Elixir.

En fait, presque tout ce que vous utiliseriez réellement est disponible dans le système de packages Hex d'Elixir - analyseurs JSON, clients HTTP, outils pour formater et analyser Markdown - tout est là, et la qualité des modules est exceptionnelle.

Dans Rails, il y a beaucoup plus de gems, mais vous ne les incluriez jamais dans un vrai projet, en raison de leur statut non maintenu ou du risque associé à l'intégration de trop de dépendances externes dans votre application.

Des plateformes comme Stripe et Recurly maintiennent leurs propres gems Rails pour interagir avec leurs APIs. Cela peut être pratique, et le support pour Elixir fait généralement défaut.

J'ai cependant constaté qu'il était très facile d'utiliser le package Tesla d'Elixir pour interagir avec les points de terminaison HTTP des services, et j'ai finalement fini par préférer travailler de cette façon, plutôt que d'utiliser des gems pré-empaquetés, car c'est plus léger et vous permet de comprendre ce qui se passe.

Abstraction de base de données - Ecto et ActiveRecord

Ecto n'est pas aussi complet qu'ActiveRecord.

Ce n'est pas son intention.

Ecto est un simple wrapper de base de données qui mappe les requêtes de base de données aux objets Elixir.

Au début, j'ai trouvé frustrant qu'il ne fonctionne pas exactement comme ActiveRecord.

Cependant, Ecto vous permet d'interagir avec la base de données de manière très simple, et facilite réellement la programmation d'applications web.

Avec ActiveRecord, une fois que vous commencez à créer des requêtes complexes, il faut plus de temps pour comprendre ActiveRecord que pour simplement écrire une requête en SQL.

Après avoir utilisé les deux, j'en conclus que l'utilisation d'un wrapper de base de données léger comme Ecto est plus facile que l'utilisation d'une abstraction lourde comme ActiveRecord.

Il vous donne la sécurité de l'utilisation d'un wrapper de base de données, sans le casse-tête et le poids d'une abstraction « trop intelligente ».

Les deux contiennent des fonctionnalités de migration et de rollback.

La base de données par défaut pour les projets Phoenix est Postgres.

Pour ceux qui utilisent des bases de données NoSQL, Ecto fonctionne avec Mongo.

Mieux encore, Ecto fonctionne avec les fonctionnalités NoSQL de Postgres, vous permettant de sauvegarder et d'interroger du JSON sans avoir besoin de Mongo.

Authentification des utilisateurs

C'est là qu'Elixir Phoenix fait défaut.

Rails a le module Devise. Phoenix a Coherence, mais il n'est actuellement pas maintenu.

Si vous voulez utiliser une connexion de base avec nom d'utilisateur et mot de passe, vous devrez construire chaque étape de cela. Cela inclut le hachage des mots de passe, la logique de réinitialisation du mot de passe, les paramètres « se souvenir de moi », etc.

C'est fastidieux et comporte un risque de sécurité substantiel.

J'ai opté pour Auth0, qui a fonctionné très bien avec Phoenix. C'est peut-être de toute façon une meilleure solution, mais il aurait été agréable d'avoir le choix.

Déploiement et hébergement

Le principal hébergeur d'applications Phoenix est Gigalixir, une petite entreprise américaine dirigée par des passionnés d'Elixir.

Gigalixir est hébergé sur Google Cloud, donc l'infrastructure sous-jacente est solide.

Le buildpack de Gigalixir facilite le déploiement et prend en charge toutes les stratégies de déploiement intelligentes d'Elixir (distillery, mix).

C'est plus cher que de « tout faire soi-même », mais la majeure partie du coût est liée à l'hébergement de la base de données Postgres.

Elixir Phoenix est si léger qu'il peut être exécuté sur de petits pods docker et gérer quand même un nombre très important de requêtes.

Malgré la majoration, cela vaut absolument la peine d'éliminer le casse-tête.

J'ajouterai simplement que leur service client est exceptionnel.

Disponibilité des programmeurs

Il y a beaucoup moins de programmeurs Elixir.

Elixir est un « langage de programmeur » - un langage vers lequel les gens viennent après avoir appris quelque chose d'autre.

Cela dit, ceux qui font de l'Elixir sont généralement de meilleurs programmeurs. C'est peut-être le choix conscient de choisir un meilleur langage.

Cela me rappelle les débuts de Rails, où il semblait que seules les « rockstars » l'utiliseraient (par rapport à PHP).

Tout bon programmeur Rails n'aura aucun problème à apprendre Elixir Phoenix, et sera opérationnel en quelques jours.

Utiliserais-je à nouveau Elixir Phoenix ?

Certainement.

J'ai travaillé avec beaucoup de langages, et Elixir est le plus facile et le plus puissant avec lequel j'ai travaillé.

J'ai hâte d'écrire en Elixir.

Suivez 500 clics mensuels avec toutes les fonctionnalités incluses.

Aucune carte de crédit requise