[PYTHON] Teilnahme an der ersten ISUCON mit dem Team "Ranchu" # ISUCON10 Qualifying

TL;DR Die Implementierung der Rostreferenz ist schnell Überwältigend dank New Relic.

Vielen Dank für Ihre harte Arbeit im ISUCON10-Qualifying

localhost_8080_.png

Endergebnis war "722 (Referenzwert)". isuumo, ich denke es war ein interessantes Thema. Vielen Dank an das Management, das sich während der Vorbereitung auf den Tag um uns gekümmert hat, und an die Mitglieder, die zusammen gekämpft haben! Danke für deine harte Arbeit!

Ranchu

Es ist ein Team von 3 Studenten von M1-Senioren (Masapyon, koba) und B3-Diener (Hiroya_W) derselben Universität. Zu diesem Zeitpunkt hörte ich, dass sich die ISUCON10-Qualifikationsquote wahrscheinlich sofort füllen würde, also habe ich mich eilig für die Teilnahme allein angemeldet. Danach rekrutierte ich Mitglieder und wurde gebeten, mitzumachen!

image.png

"ISUCON Summer Course 2020 Lecture & Mokumokukai" Ich habe zum ersten Mal von ISUCON erfahren und seit ich sowohl an der Vorlesung als auch am Mokumokukai teilgenommen habe, habe ich tatsächlich teilgenommen. Lass uns teilnehmen! Ich dachte. Zuerst fragte sich der Mokumoku-kai, ob jeder von ihnen das Problem lösen würde.

Als ich jedoch tatsächlich daran teilnahm, war es ein Treffen, bei dem alle vorbereitet waren und jeder zusammenkommen und mir beibringen konnte, wie man Schritte unternimmt. Ich denke, es war ein sehr guter Kurs, da er nur für diejenigen gedacht war, die in der Vergangenheit noch nie an ISUCON teilgenommen haben.

Vorbereitungen

Ich hatte vor, an Go teilzunehmen, weil ich Go in einem anderen Fall verwendet habe und es viele Leute gibt, die an Go teilnehmen. Also habe ich zunächst "A Tour of Go" vorerst berührt. Von dort aus dachte ich, ich würde Go's Web Framework-Tutorial ausprobieren, aber ich tat es nicht.

Dies liegt daran, dass ich an einem Webinar von New Relic teilgenommen habe "So verwenden Sie New Relic schnell mit ISUCON, weil es kostenlos ist". Bei der Installation von New Relic's Agent in Go

Als ich das erfuhr, hatte ich den Eindruck, dass es hier stecken bleiben würde. Im Vergleich dazu werden Python und Ruby einfach als Pakete in Ihrer App installiert und in den meisten Fällen müssen Sie sie nicht selbst schreiben. In diesem Fall kann jeder mit Vertrauen in Python lesen, daher möchte ich sicherstellen, dass New Reilc verwendet wird! Ich wechselte zur Richtlinie.

Von dort bis zur tatsächlichen Leistung habe ich [^ 1] nur für das ISUCON9-Qualifying verwendet, um das erforderliche Wissen zu erwerben. Wenn Sie ISUCON9 Online Qualifying Related Entry Summary von Anfang an lesen und einzeln üben, ISUCON Environment with Vagrant / matsuu / vagrant-isucon) wurde erstellt, und als sich die Mitglieder versammelten und übten, erstellte ich eine ISUCON-Umgebung in GCP und übte.

Ich habe nur aufgeschrieben, was ich als Artikel auf esa.io versucht habe, und schließlich habe ich die Elemente im Wiki des GitHub-Repositorys organisiert. Es tut mir leid, dass ich den Lizenzschlüssel von New Relic nicht veröffentlichen kann, da er im Klartext [^ 2] geschrieben ist.

image.png

Ich denke, dass die Grundlagen wie das Erstellen von Protokollen wie Makefile [^ 3] und New Relic, geheime Sauce und das Einrichten von INDEX um DB im Mittelpunkt stehen. Ich habe es zusammengefasst, damit es als Zusammenfassung von Artikeln verwendet werden kann, die bei der Fehlerbehebung hilfreich sein können.

An dem Tag

Die Senioren versammelten sich im Labor und ich nahm online von zu Hause aus teil. Ich habe einen Dienst namens wobei verwendet, weil ich die Arbeitsbildschirme aller Teammitglieder sehen wollte, aber es war sehr einfach zu verwenden [^ 4].

Da sich der Start auf 12:20 Uhr verzögerte, beschlossen wir, uns gegen 11:30 Uhr zu treffen, und bis dahin hatten wir eine leichte Mahlzeit.

image.png

Am Morgen konnte ich nur beobachten, dass die Operation echte ISUCON war. Ich denke, es war schwierig, sich auf das Problem vorzubereiten, aber nochmals vielen Dank.

Danach hat ** ISUCON10 eine Rust-Implementierung, was interessant ist - es scheint früh zu sein. Dies ist eine versteckte Linie. ** ** **

Aufteilung der Rollen

Im Zeitplan

Dank der Tatsache, dass ich mich tagsüber mit der Infrastruktur befassen konnte, war die tatsächliche Rollenverteilung jedoch

Mit diesem Gefühl habe ich mich auch ein wenig um die Infrastruktur gekümmert und in der Zwischenzeit Masapyon gebeten, mir mit der App zu helfen.

Von hier aus werde ich schreiben, was ich an diesem Tag getan habe und was die Mitglieder getan haben, soweit ich mich erinnern kann.

12:20 ~ 13:11 Ich konnte über SSH auf den Server zugreifen, und Masapyon hat ihn an GitHub gesendet. Außerdem überprüfte er die Konfiguration, und da es sich um Nginx und MySQL handelte, war ich ein wenig erleichtert, dass es mit dem ISUCON9-Qualifying identisch war.

In der Zwischenzeit lesen Hiroya_W und koba das Handbuch, fassen die wichtigen Punkte im Wiki zusammen und berühren die App.

Ich hatte jedoch Probleme, vorwärts zu portieren und die App im Browser anzuzeigen ... Das Handbuch enthielt Anweisungen zur Verwendung des Befehls, aber ich hatte ihn nie so verwendet, sodass ich mir Sorgen machte, weil ich nicht herausfinden konnte, wie ich die Argumente angeben sollte.

Als ich Google Sensei fragte, fand ich eine Geschichte über die Weiterleitung von SSH-Ports. Das war's. Jetzt, da wir wissen, dass wir zwischen den drei bestehenden Instanzen kommunizieren können, warum nicht SSH in Server 2 und von dort zu dem von Server 1 angegebenen Port streamen? ?? ?? Verstehe das

$ ssh -L localhost:8080:10.162.41.101:80 isucon-server2 

Ich war froh, verbunden zu sein. Es ist ungefähr 13:11 Uhr. Nach Abschluss wurde mir von einem anderen Teammitglied gesagt, dass ich SSH auf Server 1 und Port auf localhost weiterleiten soll: 80 von Server 1 aus gesehen. Dies wird sicherlich verbinden.

$ ssh -L localhost:8080:localhost:80 isucon-server1

Ich habe durch ISUCON [^ 5] wirklich etwas über SSH gelernt.

13:11 ~ 13:30 Ich habe die App irgendwie berührt, und im Gegensatz zu ISUCON in der Vergangenheit war isuumo nicht so schwer, wenn ich sie mit den Händen berührte, und ich konnte nicht sofort beurteilen, wo es langsam war, weil es keine sichtbar langsame Situation gab. Während ich sage, dass ich ohne Protokollierung nicht fortfahren kann, indem ich die Bank drehe, drehe ich die Bank in Python zuerst mehrmals, ohne nach Bestätigung zu protokollieren.

Ich habe mir htop auf der Bank angesehen, aber ist es wirklich mit CPU1-Kern und RAM2GB? ?? ?? ?? Ich habe gesagt. Die Umgebung, die ich praktizierte, hatte einige Maschinenspezifikationen, so dass ich das Gefühl hatte, dass es notwendig sein würde, die Parametereinstellung zu überprüfen.

Außerdem konnte niemand die Konfiguration mit zwei Einheiten üben, und ich befürchtete, dass sie beim Neustarttest fehlschlagen würde. Daher plante ich, diesmal mit einer Einheit abzustimmen. Als ich mir diese Spezifikation ansah, dachte ich jedoch, dass die Geschichte nicht weitergehen würde, wenn ich nicht mindestens zwei Einheiten konfiguriert hätte, und entschied daher leise, dass Hiroya_W sie unterstützen würde.

13:30 ~ 15:00 Wie auch immer, es ist ein Protokoll. Hiroya_W ist für die Protokollausgabe, -aggregation und -freigabe bei Slack verantwortlich. Zunächst haben wir anstelle von New Relic wsgi_lineprof eingeführt, einen Zeilenprofiler für Python [^ 6]. (Wie Sie später sehen werden, wurde das Protokoll aus irgendeinem Grund nicht ausgegeben.)

Ich bin mir jedoch sicher, dass ich den Benchmark hier aufgrund einer Fehlfunktion der Bank nicht ausführen kann und das Protokoll nicht abrufen kann.

Ich entschied mich, diese Zeit zu nutzen, um eine Entwicklungsumgebung vor Ort einzurichten. Wenn ich die App jedoch lokal ausführe und auf "http: // localhost: 1323" zugreife, wird 404 zurückgegeben. Flask ist nicht auf Gunicorn und Flask gibt nicht render_template zurück, na und? Es wird.

Ich habe nginx.conf gelesen und bestätigt, dass Nginx statische Dateien zurückgibt, die sich in / www / data / befinden. Die Bank schien auch für die API fertig zu sein, also entschied ich mich, sie lokal durch POSTing oder GETting mit Curl zu überprüfen. Um den Vorgang zu überprüfen, schneiden Sie den Zweig mit git ab und ziehen Sie ihn entsprechend auf den Server, um ihn zu testen.

15:00 ~ 15:40 Es scheint, dass der Benchmarker wiederbelebt wurde. Ich habe sofort versucht, das Protokoll mit wsgi_lineprof auszugeben, aber es wurde nicht gut ausgegeben. Derzeit werden die langsamen Abfragen von MySQL, die gleichzeitig ausgegeben wurden, "pt-query-Digest" aggregiert und auf Slack geteilt. Während ich mich bei Koba und Masapyon in der DB umschaute, wechselte ich sofort zu New Relic, ohne die Ursache zu untersuchen.

Um 15:40 Uhr sah New Relic schließlich die Protokolle und alle MySQL-Abfragen wurden angezeigt. Neues Relikt Großartig, ich kann alles sehen.

Die Punktzahl an dieser Stelle ist "353". Ich habe das Gefühl, endlich an der ISUCON-Startlinie gestanden zu haben. image.png

15:40 ~ 16:50 Von hier aus werden wir die Konfiguration von App und DB mit zwei Einheiten herausfordern.

Ich verlasse mich auf die Notizen, die ich nach dem Lesen des qualifizierenden ISUCON9-Eintrags geschrieben habe

Ich werde versuchen. Es gab einen Vorfall, bei dem ich eine Verbindung von Server001 zu Server002 herstellen wollte, aber ich konnte eine Verbindung von Server002 zu Server001 herstellen, aber es gelang mir, die Konfiguration mit zwei Einheiten abzuschließen. Hier steigt die Punktzahl leicht auf "435". image.png

16:50 ~ 18:33(koba, Masapyon) Von hier aus wenden wir die Korrekturen an, die koba und Masapyon vorgenommen haben. Aber wie Sie an den Bankergebnissen sehen können, geht nichts wirklich hoch. Selbst wenn ich es mehrmals drehe, verbessert es sich nicht. image.png

Das von koba erstellte INDEX-Commit sieht folgendermaßen aus (ich werde es später sehen, aber tatsächlich hat dies allein das INDEX-Festlegen nicht ausgeführt).

isuumo/webapp/mysql/db/3_IndexEstate.sql


CREATE INDEX idx_door_height ON isuumo.estate(door_height);
CREATE INDEX idx_door_width ON isuumo.estate(door_width); 

isuumo/webapp/mysql/db/init.sh


- cat 0_Schema.sql 1_DummyEstateData.sql 2_DummyChairData.sql | mysql --defaults-file=/dev/null -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER $MYSQL_DBNAME
+ cat 0_Schema.sql 1_DummyEstateData.sql 2_DummyChairData.sql 3_IndexEstate.sql | mysql --defaults-file=/dev/null -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER $MYSQL_DBNAME

Die Funktion [^ 7], die "503 Service Unavailable" an die von Masapyon implementierte Bot-Kommunikation zurückgibt, sieht folgendermaßen aus.

app.py


bot_user_agent = re.compile(
    r'ISUCONbot(-Mobile)?|ISUCONbot-Image\/|Mediapartners-ISUCON|ISUCONCoffee|ISUCONFeedSeeker(Beta)?|crawler \(https:\/\/isucon\.invalid\/(support\/faq\/|help\/jp\/)|isubot|Isupider|Isupider(-image)?\+|(bot|crawler|spider)(?:[-_ .\/;@()]|$)/i')

app.py


def block_bot(request):
    user_agent = request.headers.get('User-Agent')
    if user_agent:
        if bot_user_agent.match(user_agent):
            return True
    return False

app.py


    #Lassen Sie es zuerst auf jedem Endpunkt laufen
    if block_bot(request):
        return jsonify({'message': 'Service Unavailable'}), 503

Die Punktzahl erhöht sich jedoch nicht ...

Ich habe es mit Curl versucht und bestätigt, dass es 502 richtig zurückgegeben hat, aber ich habe mich gefragt, weil ich das Protokoll, das 502 zurückgegeben hat, nicht auf die Bank bekommen konnte, aber die Last war zu schwach und es gab keinen Zugang zum Bot. Also hörte ich die Geschichte.

Außerdem ändert koba COUNT (*) in COUNT (id).

app.py


-    query = f"SELECT COUNT(*) as count FROM chair WHERE {search_condition}"
+    query = f"SELECT COUNT(id) as count FROM chair WHERE {search_condition}"
-    query = f"SELECT COUNT(*) as count FROM estate WHERE {search_condition}"
+    query = f"SELECT COUNT(id) as count FROM estate WHERE {search_condition}"

Masapyon entwickelte einen Ort, um zu überprüfen, ob der Stuhl durch die Tür ging.

app.py


     w, h, d = chair["width"], chair["height"], chair["depth"]
     query = (
         "SELECT * FROM estate"
         " WHERE (door_width >= %s AND door_height >= %s)"
         "    OR (door_width >= %s AND door_height >= %s)"
         "    OR (door_width >= %s AND door_height >= %s)"
-        "    OR (door_width >= %s AND door_height >= %s)"
-        "    OR (door_width >= %s AND door_height >= %s)"
-        "    OR (door_width >= %s AND door_height >= %s)"
         " ORDER BY popularity DESC, id ASC"
         " LIMIT %s"
     )
-    estates = select_all(query, (w, h, w, d, h, w, h, d, d, w, d, h, LIMIT))
+    estates = select_all(query, (w, min(h, d), h, min(w, d), d, min(w, h), LIMIT))

Anstatt in SQL mit / api / Estate / Search und / Api / Chair / Search zu zählen, können Sie in Python zählen,

app.py


    #Dies ist der Nachlassteil
    search_condition = " AND ".join(conditions)

    query = f"SELECT * FROM estate WHERE {search_condition} ORDER BY popularity DESC, id ASC"
    chairs = select_all(query, params)
    count = len(chairs)
    chairs = chairs[per_page * page:per_page * page + per_page]

    return {"count": count, "estates": camelize(chairs)}

Ich fand aus dem Festschreibungsprotokoll heraus, dass er es tat. Ich konnte nicht an dieser Verbesserungsdiskussion teilnehmen, aber ich bin dankbar, dass ich verschiedene Dinge ausprobiert habe, und ich fühle mich wieder, als ich einen Eintrag schreibe.

Es war sehr schmerzhaft, dass ich keine Verbesserung meiner Punktzahl sah.

18:33 ~ ?? Ich stelle fest, dass INDEX nicht gestreckt ist. Ich bin froh, dass ich es bemerkt habe ...

Selbst wenn ich das Protokoll mit New Relic überprüft habe, gab es keine seltsame Atmosphäre. Ist es also wirklich INDEX? Es ist eine solche Atmosphäre geworden. Als ich von MySQL gefragt wurde, ob INDEX mit einem Befehl eingerichtet wurde,

Masapyon stellte fest, dass der INDEX-Teil nicht ausgeführt wurde.

app.py


@app.route("/initialize", methods=["POST"])
def post_initialize():
    sql_dir = "../mysql/db"
    sql_files = [
        "0_Schema.sql",
        "1_DummyEstateData.sql",
        "2_DummyChairData.sql",
    ]

Gibt es einen sql_files Typ ... Im ISUCON9-Qualifying mit "initialisieren"

subprocess.call(["../sql/init.sh"])

Wurde hingerichtet, also fragte ich mich, ob das der Fall war.

koba>INDEX Stretch Init.Ist es in Ordnung, in sh zu schreiben?
Hiroya_W, Masapyon>Ich denke es passt ~

Ich erinnere mich an ein Gespräch. Sie können es nicht dehnen ...

Dann stieg die Punktzahl zum ersten Mal leicht an. Ich ging zwischen 340 und 380 hin und her und freute mich, fast 400 zu sein.

image.png

Zu diesem Zeitpunkt bin ich endlich um 18:30 Uhr angekommen! Ich bin froh, dass ich froh bin! Ich habe gesagt. Bis jetzt konnte ich den INDEX nicht richtig darauf platzieren und ich konnte die Punktzahl nicht richtig überprüfen, also stellte ich den INDEX erneut auf und drehte die Bank, um ihn zu messen.

16:50 ~ ??(Hiroya_W)

Die Zeitleiste ging etwas zurück und Hiroya_W versuchte, ein Upgrade von MySQL 5.7 auf MySQL 8 durchzuführen, während koba und Masapyon die Korrekturen aufnahmen und die Bank drehten. Dies liegt einfach daran, dass ich die sehr grobe Information erhalten habe, dass "MySQL 8 schneller ist". Es gibt keine Möglichkeit zu wissen, dass die Funktionen in MySQL 8 in ISUCON 10 verwendet werden können.

Außerdem kann niemand in unserem Team lernen, wie 3 Einheiten konfiguriert werden, egal ob es sich um App, DB, DB oder App, App, DB handelt. Also habe ich einen zurückgelassen und mich entschlossen, die Herausforderung mit der Idee anzunehmen, dass ich sie brechen könnte.

Nach dem Upgrade auf MySQL8 und dem Drehen der Bank sieht es so aus.

image.png

Das Beenden mit 0 bleibt in der Integritätsprüfung der Anwendung stecken. Wenn Sie darüber nachdenken, erhält die Bank, die Sie unmittelbar danach betrieben haben, eine Punktzahl und wird schließlich storniert.

Außerdem scheint es nicht besser zu sein als MySQL 5.7 mit 100 Einheiten, selbst wenn es eine Punktzahl erhält. Ich habe es nicht richtig verstanden, ich habe nicht verstanden, warum die Prüfung der Anwendungskonsistenz nicht bestanden wurde, und ich wollte den zusätzlichen Test des Vorgangs nicht bestehen, weil die Bank instabil war, also habe ich das Upgrade auf MySQL8 aufgegeben.

Ich denke, dass es gut gewesen sein könnte, sich während der Produktion danach zu erkundigen. In Bezug auf MySQL8 ist dies ein Punkt, den ich gerne richtig überprüfen möchte.

?? ~ 20:20 Ich habe die geheime Sauce von MySQL und Nginx hinzugefügt, die ich vorbereitet habe.

koba stellt INDEX weiter auf,

3_IndexEstate.sql


  CREATE INDEX idx_door_height ON isuumo.estate(door_height);
- CREATE INDEX idx_door_width ON isuumo.estate(door_width); 
+ CREATE INDEX idx_door_width ON isuumo.estate(door_width);
+ CREATE INDEX idx_latitude ON isuumo.estate(latitude);
+ CREATE INDEX idx_longitude ON isuumo.estate(longitude);
+ CREATE INDEX idx_rent ON isuumo.estate(rent);
+ CREATE INDEX idx_popularity ON isuumo.estate(popularity); 

4_IndexChair.sql


CREATE INDEX idx_popularity ON isuumo.chair(popularity);
CREATE INDEX idx_price ON isuumo.chair(price);
CREATE INDEX idx_color ON isuumo.chair(color);
CREATE INDEX idx_height ON isuumo.chair(height);
CREATE INDEX idx_width ON isuumo.chair(width);
CREATE INDEX idx_kind ON isuumo.chair(kind);
CREATE INDEX idx_stock ON isuumo.chair(stock);
CREATE INDEX idx_features ON isuumo.chair(features); 

Masapyon übernahm die Änderungen und drehte die Bank herum. Führen Sie eine Reihe von Änderungen zu Master zusammen, drehen Sie die Bank und notieren Sie eine Punktzahl von 590, indem Sie den Stuhl mit INDEX wechseln. Jedes Mal, wenn ich es drehte, erhöhte sich die Punktzahl und ich finde es erstaunlich.

image.png

Die ersten drei Bänke waren das Ergebnis der Optimierung meines Betriebssystems, aber die Punktzahl sank, sodass ich mich entschied, sie nicht sofort wieder einzusetzen.

20:20 ~ 21:00 Es war weniger als eine Stunde nach dem Ende, also entschied ich mich für einen Neustart-Test, aber vorher fragte ich mich, wie viel die Punktzahl mit der Referenzimplementierung von Rust herauskommen würde, also entschied ich mich, die Bank zu leiten.

image.png

** Treffen Sie sicher die höchste Punktzahl. ** ** ** Es ist schneller als die optimierte Python-Implementierung [^ 8]! !! Es ist schon ein großes Lachen.

Da die Änderungen rund um die App für die Partitur nicht funktionierten, habe ich beschlossen, alle Änderungen der App zu verwerfen und zur Rust-Implementierung zu wechseln. Geändert, um auf MySQL einer anderen Instanz von dem Teil aus zuzugreifen, in dem INDEX of DB abgelegt ist, 20:30.

Drehen Sie nach dem Neustart die Bank, um das Endergebnis weiter zu aktualisieren und "722".

image.png

Starten Sie den Test fest neu. Probieren Sie App → DB, DB → App aus und vergewissern Sie sich, dass er ordnungsgemäß funktioniert, und klicken Sie auf Fertig stellen.

Reflexionen

Ich habe im ISUCON9-Qualifying über das effektive Upgrade von MySQL 5.7 auf MySQL 8 gelesen und bin daher der Meinung, dass ich es im Voraus hätte versuchen sollen. Von dort hätte ich die Funktionen von MySQL 8 verstehen sollen. Ich denke auch, dass es erstochen wurde, dass alle Mitglieder diesmal wenig Wissen über Nginx und MySQL hatten. Besonders dieses Mal habe ich den Eindruck, dass DB das Zentrum ist, und ich habe das Gefühl, dass ich mit App allein nicht aus der aktuellen Situation herauskommen konnte.

Impressionen

Aus diesem Grund habe ich INDEX nur für die Erstimplementierung von Rust und DB verwendet. Trotzdem war der Weg dorthin interessant, also ist es in Ordnung.

Unabhängig vom Ergebnis habe ich das Gefühl, dass ich in der Lage war, das Protokoll zu betrachten, nach dem langsamen Teil zu suchen und zu versuchen, den Teil nahe der richtigen Antwort zu korrigieren. Ich denke, dass es der erste schwierige Teil von ISUCON ist, die Umgebung vorzubereiten und auf diese Stufe zu bringen. Ich finde es gut, dass sie in der Produktion richtig gemacht wurde.

Außerdem bin ich beim Schreiben dieses Eintrags sehr dankbar, dass ich die Mitglieder, die verschiedene Dinge ausprobiert haben, aus dem Festschreibungsprotokoll sehen kann. Ich bin froh, dass ich es Ihnen überlassen habe, und im Gegenteil, ich möchte den Mitgliedern dafür danken, dass ich mich der Herausforderung gestellt habe.

Ich werde diese Erfahrung für die nächste ISUCON 11 nutzen und mich der Herausforderung stellen! Wir freuen uns auf ein Wiedersehen beim nächsten Mal!

[^ 1]: Ich habe andere Probleme ausprobiert, aber ich habe im ISUCON8-Qualifying aufgegeben, weil die Bank gefallen ist, als ich New Relic eingesetzt habe (die Ursache scheint browser_monitoring zu sein). Ich habe ISUCON9 aufgegeben, weil ich Docker nicht verstanden habe. Obwohl gesagt wird, dass es sich nur um das ISUCON9-Qualifying handelt, kann es richtig sein, nur das ISUCON9-Qualifying zu verwenden ** "**", da es Dinge gibt, die Sie tun und nicht wissen.

[^ 2]: Ich möchte es eines Tages veröffentlichen.

[^ 3]: Da ich kurz zuvor eine Make-Lernsitzung hatte, ["Ich habe am ersten Tag des ISUCON9-Qualifyings die höchste Punktzahl erzielt"](https://to-hutohu.com/2019/09/9 09 / isucon9-qual / #% E8% BE% 9E% E9% 80% 80% E3% 81% 97% E3% 81% 9F% E7% 90% 86% E7% 94% B1). Es war pünktlich.

[^ 4]: Ursprünglich hatte ich vor, Zoom zu verwenden, aber obwohl ich versucht habe, die Bildschirme aller mit Zoom zu teilen, habe ich aufgegeben, weil ich nicht wusste, wie ich den Bildschirm der anderen Partei sehen soll, während ich den Bildschirm teile. Unabhängig davon, ob dies der Fall ist oder nicht, scheint das Surfen während der Freigabe des Bildschirms und das Codieren mit VSCode die Grenze in den Spezifikationen meines PCs zu sein, und es wurde festgestellt, dass dies meine Arbeit behindern würde. Daher habe ich meinen Bildschirm von der Mitte aus freigegeben. Ist eine entsprechende Form geworden. CPU: Core i5 4210, RAM: 8 GB, aber die CPU-Auslastung blieb hängen und die CPU-Temperatur blieb bei 80 ° C, sodass ich den Lüfter für den Notebook-PC schnell herausnahm.

[^ 5]: Ich war im Voraus mit Problemen wie Schlüsselplatzierung, Autorität und Fingerabdrücken verstopft, sodass sich mein Wissen natürlich angesammelt hat.

[^ 6]: Als ich mit der Python-Implementierung des ISUCON9-Qualifyings eine New Relic-Geste machte, wurde das Abfrageprotokoll von MySQL nur mit set, commit, rollBack angezeigt, und ich konnte das wesentliche SELECT überhaupt nicht sehen. Ich bin froh, dass ich es für Recherchen im Explorer Hub von New Relic geschrieben habe. Als ich im ISUCON8-Qualifying die Bank drehte, hieß die DOM-Struktur ~ und die Bank fiel (die Ursache scheint browser_monitoring zu sein), und es wurde eine Geschichte über die Verwendung von New Relic, und es ist für diese Zeit anders. Ich habe die Methode von festgelegt.

[^ 7]: Ich dachte, es würde in einer Python-App implementiert, aber anscheinend kann es mit Nginx erreicht werden ... Ich wusste es nicht.

[^ 8]: Ich habe das Gefühl, dass ich die Punktzahl nicht gemessen habe, als New Relic in Python entfernt wurde.

Recommended Posts

Teilnahme an der ersten ISUCON mit dem Team "Ranchu" # ISUCON10 Qualifying
Ich habe an der ISUCON10-Qualifikationsrunde teilgenommen!
Was ich durch die Teilnahme am ISUCON10-Qualifying gelernt habe
TensorFlow 2.X & TensorRT ist der erste Schritt, um die Inferenz zu beschleunigen
Der erste Schritt von Python Matplotlib
Zeigen Sie Python 3 im Browser mit MAMP an
MongoDB mit Python zum ersten Mal
Melden Sie sich mit SSH bei einem Remote-Server an
[Python] Holen Sie sich die Dateien mit Python in den Ordner
12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt
Der erste Schritt im Problem der Erfüllung von Einschränkungen in Python
Bestimmen Sie die Zahlen in dem mit der Webkamera aufgenommenen Bild
Erkennen Sie Ordner mit demselben Bild in ImageHash
Die Geschichte, die zur Installation von Pip passt
Ich besuchte die Schule und nahm zum ersten Mal am SIGNATE BEGINNER Limited-Wettbewerb teil.