Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2783 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'architecture...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'architecture...

n°404057
Mara's dad
Yes I can !
Posté le 22-05-2003 à 12:22:21  profilanswer
 

Bonjour,
 
Je me permets de solliciter votre avis sur la solution que j'ai imaginé pour résoudre mon problème.
 
Le Problème :
Notre équipe développe une application web en PHP / Oracle 8.1.7.
Nous utilisons des connexions Oracle permanentes car le temps de connexion est rédhibitoire.
Notre problème, c'est que le serveur Oracle n'accepte pas plus de 100 connexions, ce qui nous oblige à limiter à 100 le nombre de clients.
C'est un problème, car toutes les requêtes HTTP n'ont pas forcément besoin d'Oracle, ce qui fait qu'on arrive rapidement à des messages d'apache nous demandant d'augmenter 'MaxClients'.
 
Ce qu'il nous faudrait, c'est un système capable de gérer un pool de 100 connexions Oracle à la disposition de 250 clients Apaches potentiels.
 
La Solution :
 
J'ai imaginé une architecture avec 2 serveurs Apache.
SRV-1 pour le web avec 250 clients Max.
SRV-2 pour le SRV1 avec 100 clients max.
 
Quand SRV-1 à besoin de données, il fait une requête HTTP vers SRV-2 avec en POST tous les paramètres nécessaires.
Les requêtes Oracles (Uniquement des appels de procédures stockées ) sont réalisés par SRV-2 qui renvoie la réponse sous la forme d'un XML.
SRV-1 reçoit donc une réponse HTTP dont le corps contient du XML.
 
Ce changement d'architecture est presque Gratuit en terme de développement car dans la situation actuelle, tous les appels Oracles sont centralisés, et les réponses sont déjà en XML.
 
Voilà.
 
Je suppose que ce genre de chose se fait couramment, j'ai entendu parler de RPC, SOAP...
J'ai cherché sans succès des solutions existantes capable de s'intercaler "facilement" entre PHP et Oracle.
Je me doute que j'ai une fois de plus réinventé la roue, mais dans notre cas, le concept et sa mise en oeuvre sont très simples.
 
Me trompe'je ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 22-05-2003 à 12:22:21  profilanswer
 

n°404517
Mara's dad
Yes I can !
Posté le 22-05-2003 à 15:45:45  profilanswer
 

Bon, ben si personne est contre, c'est que çà doit être bon !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404527
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 22-05-2003 à 15:49:42  profilanswer
 

('scuse, j'avais pas vu ton post :D)
Tu peux pas plutôt implémenter un système de file d'attente ? Passke la soluce que t'as trouvée monopolise 2 serveurs au lieu d'un donc bofbof.
T'as moyen de récupérer le nombre de connectés au serveur Oracle ? Passke si oui, le système de gestion de file d'attente peut se faire carrément bien, je pense.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°404542
dropsy
et bonne chance surtout...
Posté le 22-05-2003 à 15:53:01  profilanswer
 

salut
il y a qques temps j'avais cherché des solution de pool de connexion oracle/php, mais j'avais rien trouvé.
Ton idée a l'air pas mal, et je me permets de la graver dans un coin de ma mémoire ;)

n°404589
zion
Plop
Posté le 22-05-2003 à 16:03:30  profilanswer
 


Pourquoi tu fais pas une extension qui gère les 100 connections?
Qd un script demande l'accès à la DB il lui réserve et tu le relibères pour un autre script à la fin du script... Comme ca t'as pas un deuxième serveur  :D  
 


---------------
Informaticien.be - Lancez des défis à vos amis
n°404909
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:16:35  profilanswer
 

A tout de même ... :whistle:  
 
Taiche : Heu, c'est super ton truc là, mais je n'ai pas le début de la moindre petit idée de comment implémenter çà sur un serveur Apache/PHP. Tu pourrais préciser ?
Ma soluce ne monopolise pas 2 serveur. Le deuxième serveur http est installé physiquement sur la même machine qu'Oracle. Comme çà c'est pas du SQL/NET qui passe entre les machines, mais du bête HTTP.
 
zion : Tu parles d'une extention de quel genre ? Un truc en C à greffer sur Apache et/ou PHP ? Un module multi-threads qui gérerait les connexions ?
Ben en fait, si un serveur Apache/PHP peut le faire, je ne vois pas pourquoi je devrai en écrire un :??:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404914
zion
Plop
Posté le 22-05-2003 à 18:21:04  profilanswer
 

Mara's dad a écrit :


zion : Tu parles d'une extention de quel genre ? Un truc en C à greffer sur Apache et/ou PHP ? Un module multi-threads qui gérerait les connexions ?


 
un module en C a greffer à PHP oui, un peu de mémoire partagée et au boulot  [:banzai]


---------------
Informaticien.be - Lancez des défis à vos amis
n°404915
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:21:12  profilanswer
 

En fait j'ai trouvé un truc qu'à l'air de faire ce genre de choses : http://db.apache.org/torque/
 
Ca m'a tout l'air d'une grosse uzine à gaz à tout faire en Java. Bref le genre de truc que je fuis vu ce que çà doit bouffer en ressources.
 
C'est comme le XML. Au début, c'est Oracle qui le générait avec XSU. Maintenant je le fait en PHP pour le tiers du temps !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404938
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:39:07  profilanswer
 

zion a écrit :


 
un module en C a greffer à PHP oui, un peu de mémoire partagée et au boulot  [:banzai]  


 
Super !
En gros je reprends le module Oci8 et je me tape le topic : 'implement connection pooling in ZTS mode' de la TODO list.
Ben j'avoue que j'aimerai beaucoup en être capable, mais c'est de très loin au delà de mes capacités de programmation en C. Les contraintes du projet ne me permettent pas de dépenser assez de temps pour le faire. Dommage  :sweat:  
 
Mais j'y pense http://forum.hardware.fr/icones/icon3.gif , y'a peut-être des candidats dans la salle ?


Message édité par Mara's dad le 22-05-2003 à 18:39:37

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404941
zion
Plop
Posté le 22-05-2003 à 18:41:17  profilanswer
 

Mara's dad a écrit :


Mais j'y pense http://forum.hardware.fr/icones/icon3.gif , y'a peut-être des candidats dans la salle ?


 
ché pas, tu paies combien  :whistle:  
 
Mais le ZTS mode c'est sous Windows ou Apache 2, enfin par défaut c'est pas le mode ZTS sur les installations de base Apache 1.x  :)


---------------
Informaticien.be - Lancez des défis à vos amis
mood
Publicité
Posté le 22-05-2003 à 18:41:17  profilanswer
 

n°404942
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:45:36  profilanswer
 

C'est pas grave, je suis en Apache 2 !
Oui je sais, il parait que çà ne se fait pas... Chuuuuut
 
Py ZTS mode, pour moi c'est du chinois ! J'ai écris ce que j'ai lu dans oci.c.


Message édité par Mara's dad le 22-05-2003 à 18:46:33

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404945
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:48:13  profilanswer
 

zion a écrit :


ché pas, tu paies combien  :whistle:  


 
Ben, tout ce que peut faire, c'est . . . Rien.
Y'a pas d'embauche dans ma boîte en ce moment :sweat:  


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°404947
zion
Plop
Posté le 22-05-2003 à 18:48:53  profilanswer
 

Mara's dad a écrit :

Py ZTS mode, pour moi c'est du chinois ! J'ai écris ce que j'ai lu dans oci.c.


 
C'est simple, c'est le mode threadé ou pas... En mode non ZTS chaque script est forké, en mode ZTS non mais le code de leurs fonctions sont tellement mal foutus que c'est pour ca que ca merde grave avec Apache 2 niveau perf (un bon truc OO aurait vraiment été nickel)... Enfin bon, je m'égare  [:ddr555]


---------------
Informaticien.be - Lancez des défis à vos amis
n°404961
Mara's dad
Yes I can !
Posté le 22-05-2003 à 18:59:37  profilanswer
 

Yes j'ai essayé la version threads, pas longtemps...
Donc pas de mode ZTS ! Donc pas de gestion de pool de connexions. On en revient à 2 serveurs.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°405165
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 22-05-2003 à 22:45:40  profilanswer
 

Mara's Dad : bin pour le coup de la file d'attente, je voyais ça surtout en Java avec servlets et tout. Ca se ferait en 2 secondes. Après, c'est p'têt possible aussi en PHP, mais je sais pas. L'idée c'est en gros que tu stockes dans un tableau les sessions déjà connectées à ta DB. Quand y en a plus de 100, celles qui arrivent sont foutues dans un ôt tableau pis quand y en a une qui se libére, ba hop, tu dépiles.
Comme je disais, à faire en Java c'est tout facile. En PHP, je connais pas trop les mécanismes (je marche surtout au procédural et uniquement pour du PHP/MySQL/génération de pages ouaibe dynamiques et pis roule Raoul), donc je sais pas si c'est faisable, mais c'est p'têt à cresuer, qui sait.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°405190
mrbebert
Posté le 22-05-2003 à 23:07:58  profilanswer
 

Je sais pas si c'est réalisable dans ce cas, mais est-ce que le plus simple ne serait pas de séparer les apache qui ont besoin de la connexion au SGBD de ceux qui n'en ont pas besoin.
 
Faire 2 sites en quelque sorte. Un qui ne gère que des pages sans connexion SGBD et l'autre qui ne gère que des pages avec connexion SGBD [:proy]

n°405335
Mara's dad
Yes I can !
Posté le 23-05-2003 à 03:15:55  profilanswer
 

Quasiement toutes les pages ont besoin de la bdd, mais une page, c'est du html, des gifs, des css des javascript... tout çà n'a pas besoin d'oracle et pourtant, c'est le même serveur apache.
 
Taiche, ton serveur java ne fonctionne pas du tout sur le même principe qu'un serveur Apache en fork. En thread, je dis pas, mais comme vu avec zion les perfs ne sont pas là, et çà revient à modifier le module oci8  :pt1cable:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°405596
mrbebert
Posté le 23-05-2003 à 10:46:35  profilanswer
 

Les images par exemple, elles prennent une connexion à un serveur Apache. Si elles pouvaient être déplacés sur un Apache "dédié", ca limiterait la charge des Apache utilisant la connexion à la base :)

n°405718
Mara's dad
Yes I can !
Posté le 23-05-2003 à 11:36:58  profilanswer
 

J'ai trouvé çà : http://sqlrelay.sourceforge.net/ Quelqu'un connait ?
 
mrBebert : C'est pas con, mais en gros çà revient toujours à avoir 2 serveurs Apache, comme dans ma solution.
Question : est-t-il possible d'avoir 2 serveurs Apache sur la même machine qui écouterai des ports différents ? Je sais bien qu'un seul serveur peut le faire, mais çà ne règlerait pas le problème.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°405727
zion
Plop
Posté le 23-05-2003 à 11:47:14  profilanswer
 

Mara's dad a écrit :

Question : est-t-il possible d'avoir 2 serveurs Apache sur la même machine qui écouterai des ports différents ? Je sais bien qu'un seul serveur peut le faire, mais çà ne règlerait pas le problème.


 
oui c'est possible :D


---------------
Informaticien.be - Lancez des défis à vos amis
n°405745
Mara's dad
Yes I can !
Posté le 23-05-2003 à 12:08:45  profilanswer
 

Merci.
 
Je fais un essai avec SQL RELAY . . . et je reviens
 
PS: En fait notre appli PHP accède à 2 bases oracle, et aussi à 3 base postgres (sur le serveur web). J'avais un peu oublié mes bases postgres dans l'histoire. Bref si on veut monter à 250 clients, il n'est pas pensable d'utiliser 500 connexions Oracle et 750 connexion Postgres !
 
Mais comment y font les ZOTRES :??:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°405748
mrbebert
Posté le 23-05-2003 à 12:09:08  profilanswer
 

Mara's dad a écrit :

Question : est-t-il possible d'avoir 2 serveurs Apache sur la même machine qui écouterai des ports différents ? Je sais bien qu'un seul serveur peut le faire, mais çà ne règlerait pas le problème.

Oui, c'est tout à fait possible :)  
Ils peuvent aussi avoir chacun leur propre configuration si besoin.


Message édité par mrbebert le 23-05-2003 à 12:10:02
n°406000
Mara's dad
Yes I can !
Posté le 23-05-2003 à 14:28:09  profilanswer
 

YES !
 
Bon, ben Sql-Relay est bien parti pour être la solution de mon problème.
 
Installé sur linux avec support Oracle et Postgres et API PHP : It Rocks !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°408338
Mara's dad
Yes I can !
Posté le 26-05-2003 à 18:54:31  profilanswer
 

Bon, c'était trop beau...
 
Tout va bien, sauf qu'SQL Relay ne gère pas les Collections d'Oracle.
 
J'irrais bien mettre mes grosses paluches dans le code, mais C++, OCI8 et moi, çà fait 3 :sweat:
 
Ca tente quelqu'un de faire évoluer SQL Relay ?
 
Je demande à tout hazard, hein ! Je demande pas qu'on fasse mon boulot à ma place. J'essaye de m'y mettre de mon coté, mais je sens que c'est pas gagné.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°408617
dropsy
et bonne chance surtout...
Posté le 26-05-2003 à 23:34:02  profilanswer
 

Mara's dad a écrit :

Bon, c'était trop beau...
 
Tout va bien, sauf qu'SQL Relay ne gère pas les Collections d'Oracle.
 
J'irrais bien mettre mes grosses paluches dans le code, mais C++, OCI8 et moi, çà fait 3 :sweat:
 
Ca tente quelqu'un de faire évoluer SQL Relay ?
 
Je demande à tout hazard, hein ! Je demande pas qu'on fasse mon boulot à ma place. J'essaye de m'y mettre de mon coté, mais je sens que c'est pas gagné.


t'inquiète pas, je pense pas que quelqu'un vienne te le reprocher... on dirait que les polémiques qui trainent à droite à gauche sur prog sèment la panique chez les forumeurs  [:ddr555]  
 
euh sinon, ptites questions innocentes:

  • les collections c'est quoi :??:  
  • et à part ça, ça te permet de faire ton pool de connexion? :whistle:  


dsl, mais moi le c++... bah ça fait un certain temps que j'en ai plus fait [:proy]


Message édité par dropsy le 26-05-2003 à 23:34:40
n°408910
Mara's dad
Yes I can !
Posté le 27-05-2003 à 10:30:32  profilanswer
 

dropsy a écrit :


euh sinon, ptites questions innocentes:

  • les collections c'est quoi :??:  
  • et à part ça, ça te permet de faire ton pool de connexion? :whistle:  



 
Les collections, c'est un terme générique pour des types définis par l'utilisateur du genre :  
type AStype is table OF VARCHAR2(255);
 
En gros c'est des tableaux.
 
SQL Relay permet de gérer des pools de connexions vers toutes sortes de bases. Ces pools sont utilisables par toutes sortes d'application via des APIs.
 
Par exemple quand je l'ai installé sur mon serveur, le configure a automatiquement détecté le client Oracle et Postgres. Il a auusi détecté PHP, Perl, Python, C, C++...
 
Je n'ai donc plus besoin d'avoir un support Postgres et Oracle dans ma configuration PHP. Je le remplace par le module SQL Relay.
 
Le client et SQL Relay discute via un protocol réseaux, ce qui fait qu'ils n'ont pas besoin d'être sur la même machine. Ca permet donc aussi de pouvoir utiliser Oracle par exemple à partir d'un machine pour laquelle Oracle ne fournis pas de client, pourvu qu'un compilateur C++ soit disponible.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'architecture...

 

Sujets relatifs
Probleme pour modifier une colonne dans une table Postgres[débutant PHP] probleme lors du passage de parametre
REMOTE_ADDR problemeProblème RowFilter / ADO.net / Vb.Net
gtk-1.2 : probleme dans une boucle gtk_events_pending[JS] probleme compatibilite avec Mozilla
[DIV] Problème de div avec des vignettesProbleme avec define : comment recuperer la chaine de la constante ?
probleme de fichier INI??Architecture des MACHINES probleme
Plus de sujets relatifs à : Problème d'architecture...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR