Technologie utilisé dans CatchCallenger

Manipulation du buffer réseau

0 copy

La technologie 0 copy technologie est un moyen pour ne jamais copier un buffer dans un autre (bien sur qu’en interne ont ne peu y échapper, par exemple pour transférer le buffer de la carte réseau jusqu’au programme). Vous déplacez seulement le curseur sur les données et vous controlez les données. Aprés vous pouvez:

  • Isolez le code principal et retournez les données comme une structure
  • Directement tout passer comme une structure

La structure de donnée est exclusivement de taille fixe car les tailles dynamique exige pointer et copie mémoire. (Et vous ne pouvez pas envoyé un pointeur au travers du réseau)

Si une donnée est supérieur à 8Bits, alors vous devez corrigez l’endianness, cela coute principalement des petites transactions mémoire.
Cela est pour envoyer des commandes avec des arguments temporaires. Les données persistantes ont besoin d’être stocker et donc n’autorise pas le 0 copy. Vous devez les garder quelque part car le buffer vas être purger.

SIMD

Sur Arm c’est neon, sur x86 c’est SSE-X, AVX-X. Pour en savoir plus, voir: http://en.wikipedia.org/wiki/SIMD
Ils permettent de copier un block mémoire avec une seuls instruction, c’est plus puissant qu’une boucle car cela exploite mieux le hardware sans avoir besoin d’utiliser les capacités de Vectorization du compilateur, voir: http://en.wikipedia.org/wiki/Vectorization_(parallel_computing)
Si une plage d’octet est valide, vous pouvez avoir un structure similaire as: 99x8Bits dans le buffer,  »’vous pouvez utiliser memcpy() pour transférer une plage d’octet directement depuis le buffer sur la structure »’.
Si une donnée est supérieur à 8Bits, alors vous devez corriger l’endianness, cela coute principalement des petites transactions mémoire. Voir le déserialiseur.
Cela est plus orienté pour le stockages des données mais peu être utilisé avec des données temporaire dans certains circonstances..

Déserialiseur

Cela est plus lent que le SIMD, mais cela est adapté pour les stockages d’informations qui doit être traités. Par exemple en chaine qui doit être transformer en pointeur + taille (mix avec les SIMD arrive souvent), vous devez changer l’Endianness pour la plus part des entiers, …
Priviligez de démarrer avec les adresses basses (buffer[0]) jusqu’au adresses haute (buffer[99]) pour améliorer les performances.

0 Allocation mémoire

La plus par du temps, n’ayez pas d’allocation mémoire, ou dans le pire des cas sur la stack. Grace à un protocole binaire, une taille fixe, un buffer permanent pour déserialiser les données est une bonne solution.
Toutes les opérations réseau lourdes comme le chargement du datapack peuvent être externalisé. Sur des serveurs hautes performances seul le trafic utile est envoyé et reçu, il y as donc de meilleur latences et un serveur plus légé, …

Binaire

Le texte peu être utile pour débugger, mais il utilise beaucoup de réseau et ressources.
Moins d’un accès sur un millards sur http est lu directement depuis le dump réseau (par des hackers, admin réseau, développeur -> vous devez avoir le niveau pour travailler avec, au même titre que manipuler des images/videos), cela veux dire que le reste du temps les ressources sont consommés sans raison, un protocole http binaire serai afficher de la même manière que le protocole http text dans un navigateur.
Pour utiliser les données « Data: 654654″‘ vous devez extraire « 654654 » (vérifier la longueur, faire une allocation dynamique) puis  »’le convertir en nombre »’. En binaire faite juste une copie (a=b;) et corriger l’endianness si besoin. ce qui est beaucoup plus puissant en binaire. La negociation du protocol en binaire été de 66 octets, en binaire elle est seulement de 5, avec un gain de 50x d’utilisation du cpu sur les opérations de lecture et comparaison.

Anti DDOS et cout de l’infrastructure

Toutes ces technologies et un bon usage du compilateur comme -march=XXX, permette d’être anti-DDOS par nature car cela permet de supporter un grand nombre de requêtes par seconde. Cela minimise le cout de l’infrastructure, autorise un jeu moins chère, plus de serveur pour les joueurs. Cela est donc plus dur à DDOS, C’est aussi plus facile à administré.

Epoll

Epoll est utilisé pour résoudre le problème C10K. Le serveur peu facilement supporter beaucoup de joueur sur un ordinateur de 25ans. Il ne saute pas la couche tcp du noyau pour fonctionner correctement en para-visualization, mais un bonne optimisation permet de résoudre le problème C10M sur un bon hardware.

Plugin

La plus par des parties standard comme la visibilité sur la map, base de données sont dans des classes et géré comme des plugin pour être changé, testé et benchmarké facilement.
Les plugins des bases de données en mode texte demande beaucoup de conversion du text vers des entiers (utilisation du cpu sur le serveur), la manipulation des chaines due à SQL prends aussi beaucoup de cpu/memoire/allocation mémoire aussi, et finalement la base de données sur le même serveur consomme aussi des ressources.
Inclut avec index et optimisé, la base de données est largement la partie la plus lente du serveur (tant coté cpu, memoire que IO disk), c’est pourquoi les requêtes sont asynchronisés.

Traduit de: http://catchchallenger.first-world.info/wiki/Technologies_used

Note: le protocole ftp en plus d’être text oblige de supprimer le contenu des dossiers pour supprimer ces dossiers. Vous passez donc de l’envoie de quelque octet et quelque ms 0 des Mo et des minutes heures pour supprimer les gros dossiers… Et vous contourner toutes les optimisations des FS sur la suppression des dossiers…