J'ai participé à ISUCON10! Ce fut une expérience très enrichissante car c'était la première fois que je participais à un tel concours (programmation de concours)! Dans cet article, je voudrais présenter ma propre expérience et ce qu'est ISUCON.
Concours pour bien accélérer (test ** I ** ikanjini ** S ** peed ** U ** p ** CON **) Abréviation de **, c'est une bataille de réglage ** qui vise à accélérer le service Web en question dans la limite de la réglementation spécifiée.
Les participants n'accélèrent le système Web donné comme thème que pour un temps limité (** 8 heures !! **) Nous nous engageons à ** comment lire, comprendre et améliorer les performances de l'ensemble du système **.
Il est divisé en tour de qualification et en course principale, et seules 30 équipes sur le total remporteront le tour de qualification, qui est l'avant-poste! ** ** Récemment, avec la participation d'étudiants, il a été divisé en créneaux généraux et créneaux étudiants. ** Général 25 équipes **, ** Étudiants 5 équipes ** seront sélectionnés.
** Le prix gagnant est de 1 million de yens! C'est un tournoi généreux appelé **.
Il a eu lieu 10 fois au total jusqu'à présent, et cette fois c'était la 10ème fois pour commémorer: applaudissez:
Ratio de langue éligible en ligne
Le classement général des taux d'utilisation est le suivant.
Go 276 paires 59.0%
Rubis 81 paires 17.3%
Python 47 paires 10.0%
Nodejs 29 paires 6.2%
PHP 18 paires 3.8%
Rouille 8 paires 1.7%
Perl 7 paires 1.5%
Elixir 1 set 0.2%
original-rubis 1 set 0.2%
Nous travaillerons sur le problème en formant une équipe de 1 à 3 personnes.
Configurations orthodoxes telles que les applications, l'infrastructure, l'analyse et la commande
Utilisez votre propre benchmark pour mesurer votre score
Tous les moyens peuvent être utilisés, la clé est donc de calculer le score le plus élevé avec le repère ci-dessous. * Ne pas jouer avec le repère.
Ce numéro a reçu un site Web appelé issumo où vous pouvez rechercher ** des chaises et des propriétés, et acheter et demander des matériaux **. Les principales fonctions étaient les suivantes.
etc...
Cette fois, il n'y a pas eu de traitement tel que la connexion, donc Je pense que c'était un problème purement de déterminer quel était le goulot d'étranglement du système. Personnellement, la recherche a été incroyable, notamment en traçant! L'interface utilisateur qui affiche les informations de propriété dans la plage de latitude et de longitude de la plage tracée était bonne ...!
Contrôle initial du fonctionnement de l'application
J'étais en charge de la partie application, donc après le début du concours, vérifiez d'abord le fonctionnement de l'application
Cette fois, je ne pouvais accéder que via le serveur de la plate-forme et je ne pouvais pas bien me connecter, alors j'ai décidé de continuer.
ensuite
Les coéquipiers de l'infrastructure ont fourni la sauvegarde du code source et la gestion git, donc ssh dépend de vous.
Je lisais le code source, commentais chaque fonction et écrivais des points de terminaison.
DB (autour de mysql)
J'ai trouvé que la base de données était comme un goulot d'étranglement, j'ai donc mis un index dessus et répété la mesure avec expliquer.
Cependant, même si je mets un index, le résultat n'a pas changé, et je me demandais ce qui s'était passé: sans expression:
Consulté l'équipe et remplacé ce qui fonctionnait à l'origine avec mysql5.7 par mysql8 >> Le résultat a été que le score initial a été divisé par deux: scream:
J'avais peur que tourner le marqueur de banc initialise les données et que l'index disparaisse, alors j'ai suggéré de l'ajouter à la définition de la table dans schema.sql.
Amélioration SQL et réponse
SQL amélioré qui est négligemment COUNT (*)
et SQL qui est SELECT *
J'ai changé pour mettre la requête qui est chargée à chaque fois sur la page de destination dans Redis et l'obtenir à partir de là.
J'étais en train de réécrire la requête qui concaténait 5 conditions OR avec union, mais en conséquence j'ai abandonné parce que le banc n'a pas réussi ...
Si vous le composez de cette manière, vous pouvez clairement voir que je ne pouvais pas du tout bouger ce jour-là. Bien que je travaille habituellement exclusivement pour le front-end, j'ai réalisé que je manquais massivement de connaissances et d'expérience liées au back-end. Pour être honnête, je suis vraiment déçu.
En y repensant plus tard, je l'ai trouvé en commentant ** Partie comme recherche ** et ** Partie semblable à N + 1 ** (recherche de trace) ** J'ai été enterré dans d'autres travaux **, ce qui est un point de réflexion. De plus, ** je ne pouvais pas penser à un moyen d'améliorer la requête, et j'étais stupéfait **, donc s'il n'y en avait pas Je pense que je pourrais bouger un peu plus ma main. Je ne touche généralement pas à Go, donc ce pourrait être une bonne idée de créer un serveur backend avec Go. En tout cas, ISUCON était parfaitement conscient de son manque de capacités. Mais c'était vraiment amusant! C'était une bonne occasion d'acquérir des connaissances et des langues variées que je ne touche généralement pas. Il y avait aussi une implémentation dans Deno, donc j'ai pensé qu'il serait fourmi d'utiliser du tapuscrit dans le backend.
Cette fois, il n'y avait que des propriétés et des chaises, et il n'y avait pas de SQL qui se rejoignaient, donc certaines équipes faisaient un travail difficile d'allouer des bases de données à chacune! Les idées que je peux proposer sont déjà incroyables. .. .. !!
Je pensais que la direction qui rassemblait les choses qui se tenaient habituellement les samedis et dimanches le samedi et traitait 500 groupes de participants était vraiment incroyable. Merci beaucoup: sourire:
Il est publié sur http://isucon.net/archives/55025156.html!
Recommended Posts