11
votes

Java Backend et Rails frontales

J'ai une startup envisageant de construire un backend Java et un frontend de rails. Le backend Java s'occupera de créer une couche de mise en cache pour la base de données et d'offrir d'autres services supplémentaires. Les rails avant-coureurs seront principalement destinés à créer les outils WebApp et de surveillance.

Quelles start-up / sociétés utilisent ce type de configuration? Quels sont certains Gotchas en termes de vitesse de développement, de déploiement, d'évolutivité et d'intégration?

(Qu'est-ce qui serait utile pour moi est une expérience personnelle ou des études de cas informelles. J'aimerais que les réponses de priorités répondent à des alternatives telles que Grails ou Jruby, à moins que cela soit une grande partie de l'équation)

merci!


5 commentaires

Qu'attendriez-vous être dans le backend et comment le frontend doit-il communiquer avec le backend?


@Thorbjorn: En ce qui concerne la communication, je me penche vers Json. Bien que je ne suis pas convaincu de la bibliothèque à utiliser ou des compromis annexés comme la maintenance. Les pensées?


Twitter fait cela. Leur frontend est des rails et leur backend utilise Scala. Je pense que vous faites la bonne chose: en utilisant le bon outil pour le bon travail.


Sonne amusant, embauchez-vous? :)


@Ian quelle était votre décision finalement?


6 Réponses :


2
votes

Peut-être que je déclare l'évidence ici, mais le plus grand gotcha est le fait réel que vous combinez deux technologies. Non seulement le développement sera plus lent - les rails et tous les cadres Java s'attendent à avoir une application complète Ruby / Java - mais pour les autres problèmes que vous mentionnez (déploiement, évolutivité, intégration), les outils et les solutions existants ne fonctionneront pas, ni du moins pas très bien.

Si vous avez une raison convaincante de combiner les deux, allez-y, mais attendez-vous à dépenser plus de temps sur ces problèmes qu'avec une solution technologique unique. Si vous ne le faites pas, choisissez des rails ou Java.


2 commentaires

Peut-être évident mais cela aide que vous en donnez une emphase supplémentaire, merci. Ma pensée est que chaque langue est probablement meilleure à faire certaines tâches que l'autre. Par exemple, au moins personnellement, les rails sont beaucoup plus rapides au prototypage d'une webApp. Comment quantifier / qualifier le compromis comme celui-ci entre le temps gagné et le temps perdu avec le déploiement, l'évolutivité et l'intégration.


@Jeen: Je suis en désaccord avec ce que vous avez déclaré. C'est une décision arquitecturale. Je ne peux pas dire des rails, mais les frameworks Java ne s'attendent pas à une application Java complète. C'est complètement l'oposite que nous voyons de nos jours. Il n'y a pas de balle d'argent et nous devons choisir la technologie qui répond le mieux à chaque problème. Si vous construisez une énorme application SOA, cette séparation claire des préoccupations est peut-être la voie à suivre (Twitter par exemple).



4
votes

J'ai utilisé une paire similaire pour l'un de mes projets, mais au lieu de ROR, j'ai utilisé Python. Je ne pense pas qu'il y ait une grande différence.

En général, il n'y a rien de spécifique dans ce type de programmation. Deux choses les plus importantes que vous devez vous soucier:

  • bonne modularité;
  • Protocole bien pensé entre ROR et Java.

    première concerne la décomposition de fonctionnalité exacte entre les parties du système. Nous avons des problèmes de ne pas comprendre quelle partie d'un emploi doit être fait par Java et quelle partie de Python. En général, vous devez lier ensemble toutes les fonctions proches les unes des autres et la chose qui est loin dû être connectée dans un très peu de places. Je suppose que vous connaissez des règles de bonne modularité, mais en cas de composition de différentes langues, il faut penser beaucoup plus attentivement. Vous pouvez également vous intéresser à la création de plusieurs services Java distincts (par exemple une pour la mise en cache de base de données et une autre pour tout le reste) pour pouvoir les combiner librement ou même l'utiliser dans d'autres projets plus tard.

    second concerne la communication entre vos pièces. Je peux voir deux façons de communiquer: par la base de données et par le biais du protocole de réseau pur. De toute façon, les premiers ont besoin de la communication réseau, nous avons donc utilisé le protocole de réseau pur, sans autre moyen de connecter des pièces.
    Nous avions beaucoup expérimenté avec SOAP , mais cela a donné des centaines d'erreurs: ce protocole est tout à fait correct pour Connectez des services écrits dans une langue (ID Java à Java), mais terrible pour la connexion de services dans différentes langues - Les outils automatiques de génération de WSDLS ont donné des résultats différents pour Java et Python, et la création manuelle du schéma était dure et de la main-d'œuvre.
    Nous avons donc utilisé Rest . Il utilise toutes les fonctionnalités du protocole HTTP, telles que les quatre méthodes HTTP principales (post, obtenir, mettre, supprimer, supprimer des codes d'erreur et de nombreuses autres choses, il couvre presque tout ce que vous voudrez peut-être. La seule restriction avec le repos est qu'elle ne peut pas tenir l'état, vous devrez peut-être peut-être mettre en œuvre votre propre mécanisme de sessions.
    Si vous n'êtes pas très à l'aise avec repos et recherchez un exemple réel, voir API de graphique Facebook et pour Mise en œuvre de services de repos en Java Vous pouvez utiliser Restatilations .


3 commentaires

Grand commentaire sur la modularité et la communication, merci. Avez-vous pris une décision consciente d'utiliser le repos sur les alternatives JSON? Si oui, quel était votre train de pensée là-bas?


Voulez-vous dire pourquoi nous avons utilisé le repos au lieu de JSON? Nous n'avons pas fait. Le repos est juste une architecture, vous pouvez utiliser n'importe quelle représentation pour transférer des données. Nous avons dû utiliser XML (nous devions faire la disponibilité de notre service pour une autre équipe de développeurs), mais en général, il est une bonne pratique d'utiliser le modèle de repos avec JSON en tant que représentation principale. Par exemple, pour fonctionner avec FOO Tableau dans dB make URL / FOO / , utilisez la méthode mettre pour ajouter de nouveaux FOO instance, POST Pour mettre à jour, Supprimer Pour supprimer et obtenir pour récupérer - c'est le repos. Et les données réelles à toutes ces URL peuvent être représentées comme chaîne JSON. Lire des informations sur le repos;)


Et encore une fois, voir API de graphique Facebook - ils utilisent des objets de l'architecture de repos et des objets représentés JSON.



2
votes

Je vous exhorte fortement à envisager d'envisager d'avoir le frontage et le backend dans le même JVM pour des raisons de performance.

Pour les rails, Jruby peut exécuter des rails et vous pouvez l'avoir dans un conteneur Java EE fournissant une communication rapide entre les composants.

Avoir plusieurs architections qui ne s'exécutent pas dans le même processus nécessite de faire une communication basée sur les réseaux qui prend beaucoup plus de temps que de simplement transmettre une référence à un objet (je ne m'attends pas à utiliser que vous souhaitez utiliser une mémoire partagée). < / p>


5 commentaires

La communication et le succès de la performance associée sont définitivement une grande partie de la décision. Comment puis-je qualifier / quantifier cette performance frappé? Une webapp a déjà des appels réseau à des choses comme Memcached et, peut-être, Solr. Le succès de la performance Il n'y a pas été visible pour moi. Sera-t-il différent de passer des appels vers d'autres services Java?


En ce qui concerne Jruby, je vois que l'intégration avec le printemps 3 n'est pas trop lisse de regarder la documentation. En outre, le support communautaire comme les plugins pour Jruby n'est pas aussi étouffé. Je ne peux rien quantifier, mais juste un sentiment. Avez-vous des expériences avec cela?


Ørn Ravn Anderse: Chaque fois que vous sélectionnez Données de DB, vous effectuez une communication réseau, réfléchissez-y. Oui, il est plus lent puis transmettant une référence, mais pas aussi cruciale.


@Andrei, dépend de la mise en œuvre. Par exemple, Soldder Derby ne nécessite pas de réseau pour faire JDBC.


Ørn Ravn Anderse: En général, c'est. Et en général, il est assez rapide de travailler avec la plupart des applications Web. De plus, j'ai fait des points de repère. Les résultats: Sélectionnez une sélection simple de 100 enregistrements dans MySQL DB - ~ 40 ms., Factorielle récursif (1000) - ~ 8 ms., Demande de réseau à localhost - ~ 1.2 msec. (Serveur Web de jetty, pas le plus rapide), demande réseau à Google.com - ~ 0.3 msec. Pensez-y.



6
votes

Je n'ai jamais fait de développement de rails, mais voici mes pensées. Pourquoi pas simplement utiliser des greils? J'ai fait une bonne quantité de développement de graps et cela fonctionne bien pour un prototypage rapide. Il offre également tout le pouvoir de Java, du printemps et de l'hibernate. Au lieu de traiter de la communication entre deux technologies différentes, vous pourriez tirer parti du fait que Grails utilise le printemps et hibernez sous les couvertures pour faire face à la mise en cache ainsi que toute autre exigence que ces technologies soutiennent. Si vous avez Java Developers Grails ne devrait pas être difficile à ramasser. L'histoire du plug-in Grails est décente. Tous sont stockés dans un endroit central et sont faciles à obtenir, mais la qualité diffère en fonction de l'auteur du plug-in. Vous devez également vous rappeler que, puisque Grails utilise Groovy qui est syntaxiquement similaire à Java et exécute sur la JVM, il est très facile d'utiliser le code Java existant, y compris la multitude de bibliothèques Java disponibles. Je ne sais pas cela pour certains, mais je suppose qu'il y a beaucoup plus de bibliothèques pour une utilisation avec Java et là-bas pour les greils, sont disponibles pour la langue et les rails de rubis. Je ne peux pas faire d'appel à une ressource pour vous, mais ma question serait de savoir combien de personnes avez-vous avec l'expérience de conception de systèmes de rails qui utilisent Java à l'arrière avec tous les gothas qui vont aller avec cela? Vous trouverez peut-être que vous n'avez que personne qui maîtrise le débogage lorsque quelque chose ne va pas dans la communication entre les deux technologies.


5 commentaires

Les greils ont définitivement un sens comme une alternative. C'est plus un dilemme des ressources humaines pour moi à ce moment-là. Nous avons des experts Java et des experts de rails. L'utilisation de GRAVES entraînerait des deux parties pour augmenter. Au moins de chaque côté, certaines personnes sauront que les petits gotchas plutôt que d'avoir tout le monde sur le nouveau territoire. La solution est parfaitement logique. Je ne me suis tout simplement pas convaincu du compromis. Les pensées?


Un autre aspect que je n'ai pas assez d'expérience pour faire appel à un appel de plugin / gemme pour les greils. Quel pourcentage de plugins / gemmes que je peux trouver dans Rails, je pourrai aussi trouver dans Grails? À peu près bien sûr.


@Lan, quel pourcentage de plugins de rails sont toujours compatibles avec la dernière version des rails? Presque aucun ...


@Kedare: noté. Personnellement, je n'ai pas eu trop de problèmes avec ça, Railsplugins.org/plugins . Avez-vous quelque chose à ajouter des plugins de Grails?


J'ai mis à jour ma réponse avec les réponses à votre question car elle devait être longue pour tenir compte d'un commentaire.




1
votes

Nous avons utilisé Ruby sur les rails pour l'API de SOAP de première extrémité et Java pour le backend. Cela a très bien fonctionné.

Le problème principal n'est pas avec la performance, mais avec les gens. Il est très difficile d'embaucher des experts dans Ruby sur des rails pour tout, à la place que vous embauchez peu ou vous pouvez facilement faillir pour apprendre simplement les rails d'interface utilisateur.

comme point de démarrage, c'est la meilleure stratégie. Tant de gens croient que ror est le meilleur pour les startups ... mais très peu le savaient parce que dans la plupart des MNC, nous utilisons Java, il y a donc une pression pour apprendre les rails et le code, ou embaucher très peu de développeurs Ror. Donc, au lieu de cela, vous pouvez utiliser ROR pour FRONTEND (seulement quelques personnes le font, ou il est facile d'apprendre) et d'utiliser des développeurs Java expérimentés pour les mises à jour de la DB et la logique commerciale.


0 commentaires