Type de serveur pouvant traiter 1 million de requetes

WRInaute discret
Bonjour,

Je travaille sur le développement d'un service. (je ne peux pas en dire plus pour le moment)

Les clients utilisant le service vont générer environs 1 millions de requêtes mysql dans un premier temps.

Les requêtes sont toujours identiques et du type SELECT.

Je voudrais savoir s'il est possible de calculer le minimum niveau configuration du serveur dont j'aurai besoin pour autant de requêtes?

Je pense prendre mon serveur chez ovh.

Merci
 
WRInaute impliqué
Es tu certain d'avoir besoin d'autant de requêtes, que tu ne peux optimiser ces dernières? Utiliser un système de cache?
 
WRInaute discret
Je ne suis pas un spécialiste, c'est aussi pour cela que je demande vos points de vues et conseils :lol:

Mon service est un système de black listage tel rbl par exemple.

Le serveur du client se connecte sur mon serveur afin de vérifier si l'adresse ip de son utilisateur est listée dans la base.

Voila, c'est déjà tout...

Je voulais d"abord opter pour un système avec un fichier texte qui contiendrait les ip black listées, mais le problème est que la base étant mise à jour très régulièrement, cela ne permettrait pas au client d'avoir toujours la liste mis à jour en temps réel.

Le systeme de mise en cache ne devrait pas etre d'une trop grande aide vu que la requete n'est à priori jamais la même, vu que l'ip de l'utilisateur change pour chaque client :)

Merci
 
WRInaute impliqué
Salut,

1 million de requêtes en combien de temps? Par minute, par heure, par jour... ?

Plus la taille de ta base de données sera grande, plus un serveur avec beaucoup de mémoire RAM est conseillé (MySQL mettra des informations en cache dans la RAM si le serveur est bien configuré).
 
WRInaute accro
Re: Type de serveur pouvant traité 1 millions de requetes mi

joboy84 a dit:
Les clients utilisant le service vont générer environs 1 millions de requêtes mysql dans un premier temps.

Les requêtes sont toujours identiques et du type SELECT.

Je voudrais savoir s'il est possible de calculer le minimum niveau configuration du serveur dont j'aurai besoin pour autant de requêtes?

Un million de requêtes par jour, ça peut donner des choses très différentes en fonction de nombreux paramètres:
- répartition du trafic dans la journée: avec une répartition "classique", il faut compter une pointe à environ 3 à 4 fois la moyenne, donc 35 à 50 requêtes/seconde; avec une répartition beaucoup plus "concentrée" (avec une grosse pointe très courte), ça peut être beaucoup plus;
- complexité de la requête. Un "select chose from table where clef=valeur" (où valeur est numérique et clef est indexé) ça consomme évidemment beaucoup moins de ressources qu'un select complexe avec 12 jointures, quelques opérations multi-lignes (sum, count, avg, group by...) avec peu de possibilité d'indexation;
- taille de la base de données et de la partie "chaude" (la partie réellement accédée souvent... Il y a tout plein de bases de données qui font des tonnes de Go mais dont seulement quelques % sont réellement utilisées l'essentiel du temps)
- possibilité de mettre en place un cache
- éventuellement, les contraintes en termes de rapidité (les requêtes doivent-elles être services en ms, centaines de ms, secondes, dizaines de secondes...)?
- et probablement plein d'autres choses.

Dans ton cas, a priori:
- la répartition du trafic devrait être assez "normale"
- la requête est simple ("select 1 from table where ip=?"), facilement indexable (si tu as une proportion intéressante d'étendues d'adresses consécutives plutôt que d'adresses isolées il peut convenir de faire un "select 1 from table where ? between start and end")
- reste à savoir combien tu vas avoir d'entrées dans ta table; idéalement, il faut que l'ensemble de la table (+index) tienne en cache (de l'OS), donc que tu aies la quantité de RAM correspondante (+ de la place pour l'OS, le serveur mysql et le reste)
- tu peux avoir intérêt à utiliser un fichier d'index type Berkely DB, GDBM, CDB ou autre plutôt qu'une base mysql (ça va dépendre de la fréquence des mises à jour et du temps de mise en place): l'overhead par entrée (aussi bien en termes de place qu'en termes de CPU) sera nettement plus faible je pense.

Bref, pour quelques millions d'entrées une machine avec un 1 Go de RAM devrait largement faire l'affaire. Le reste (CPU, disque...) n'aura pas grande importance.

Jacques.
 
WRInaute discret
Bonjour,

Voici quelques précisions:

-La base contient entre 100000 et 200000 adresses ip, pour une taille de 5 à 10 MO au maximum.

-Les requetes étant effectuées par les clients, je pense avoir des nombres de requêtes importantes tout au long de la journée (le client n'a qu'un fichier php à ajouter sur son serveur et de faire un include sur les pages souhaitées...Puis le script se connecte à ma base de données pour vérifier si l'ip de l'utilisateur est listée ou non...)

- Concernant les mises à jour elles sont quasi effectuées en "non stop" car un script vérifie en permanence quelle ip réponds et quelle ip ne répond plus. Si elle ne réponds plus elle est supprimée de la base...Ceci afin d'éviter au maximum les faux positifs.

Concernant la structure de ma table, la voici:

Code:
CREATE TABLE `listeIpClient` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `adresseIp` varchar(15) default '0',
  `DateInsertion` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `adresseIp` (`adresseIp`)
) ENGINE=MyISAM

Concernant le script, c'est assez simple effectivement:

Code:
<?php 
$Extraction = mysql_fetch_assoc(mysql_query('SELECT dateValidite FROM websites WHERE pseudo=\'' . $pseudo . '\' AND url=\'' . $adresse . '\'') OR exit(mysql_error()) );

if(empty($adresse) || empty($pseudo) || $Extraction['dateValidite'] < $date)
    echo 'Erreur: Des parametre sont manquants.';

elseif (mysql_num_rows(mysql_query('SELECT adresseIp FROM listeIpClient WHERE adresseIP=\'' . $_SERVER['REMOTE_ADDR'] . '\'') OR exit(mysql_error()) > 0)
//Je pourrais aussi remplacer le code ci-dessus par:
//SELECT count(*) FROM listeIpClient WHERE adresseIP='$IPaVerif'
//Que me conseillez vous afin d utiliser le moins de ressources possibles?

    $resultat = present;
else
    $resultat = nonListe;

mysql_close();
?>
 
WRInaute impliqué
joboy84 a dit:
- Concernant les mises à jour elles sont quasi effectuées en "non stop" car un script vérifie en permanence quelle ip réponds et quelle ip ne répond plus. Si elle ne réponds plus elle est supprimée de la base...Ceci afin d'éviter au maximum les faux positifs.

Est ce bien pertinent, en effet, si elle ne répond plus suite à une panne temporaire du serveur, as tu mis en place un système de compteur, qui si elle ne répond plus sur une période donnée, alors elle est supprimée?

Euh, en relisant bien ton topic, de quelle IP parles tu? IP serveur mail, IP domaine, IP internaute...??
 
WRInaute discret
Bonjour,

Oui un système de compteur a été mis en place... :D

Concernant les ip, il s'agit d'adresses ip de serveurs proxy ou de pc zombies listées dans ma base.

Ensuite, le client peut vérifier si son utilisateur se connecte à partir d'un proxy ou non avec son adresse ip...(utile pour les proxy anonymes)
 
Discussions similaires
Haut