Ich habe eine Django-App (speziell Django-Rest). Wenn ich die lokale Kopie dieser Site ausführe, können meine Anfragen in 50-400ms bearbeitet werden.Azure "App Service" - Django und SQLite
Als Nächstes konnte ich den Microsoft Azure App Service bereitstellen. Jetzt, unter der teuersten Stufe, die ich kaufen kann, kommen Antworten im Bereich von 800-2000ms zurück.
Die App macht einfache Abfragen auf SQLite-Datenbank. Diese Datenbankdatei ist ungefähr 30 Megabyte mit der größten Tabelle 12000 Zeilen.
Ich sollte darauf hinweisen, alle Zugriffe auf die Datenbank ist schreibgeschützt, so dass keine Konflikte auftreten.
Konfiguration:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(PROJECT_ROOT, 'mydatabase.db'),
}
}
web.config:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="WSGI_ALT_VIRTUALENV_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\activate_this.py" />
<add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" />
<add key="PYTHONPATH" value="D:\home\site\wwwroot" />
<add key="DJANGO_SETTINGS_MODULE" value="myapp.settings" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<!-- Required for websockets. -->
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="Python273_via_FastCGI" />
<add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<rewrite>
<rules>
<rule name="Static Files" stopProcessing="true">
<conditions>
<add input="true" pattern="false" />
</conditions>
</rule>
<rule name="Configure Python" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
</conditions>
<action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Python-Version 2.7.
Ich habe es auf SQLite Leistung eingegrenzt. Statische Dateien und API-Index-Seiten kommen in ~ 60ms zurück, während die schwerste Abfrage in ~ 2000ms zurückkommt. Dies ist die Zeit bis zum ersten Byte und nicht die gesamten Antwortzeiten, und ich habe die Netzwerklatenz ausgeschlossen (was aufgrund der geografischen Nähe sehr gering ist). Dies ist auf P3 (Premium Tier) 4-Core, 7 GB RAM (wie Azure es nennt).
Auf localhost laufen die Antwortzeiten ~ 15ms für Indexseiten und ~ 380ms für die gleichen Anfragen auf meinem MacBook 2,2 GHz Intel Core i7 16 GB 1600 MHz DDR3.
App „warm-up“ ist nicht das Problem, da dies nach dem bereits „heiß“ (Timing auf ein paar Auffrischungen basiert)
Update: Ich installierte Django Ruhe Toolbar für weitere Informationen.
Auf macbook django DEV-Server (reiner Python?):
SQL time ~217ms
Total CPU time ~681ms
Resource Value
User CPU time 662.771 msec
System CPU time 18.415 msec
Total CPU time 681.186 msec
Elapsed time 681.326 msec
Context switches 1 voluntary, 95 involuntary
auf azur App Service IIS und FastCGI (siehe Config oben):
SQL time ~854ms
Total CPU time ~2282ms
No CPU extended breakdown available.
keine Einsicht schätzen!
Wie viele Instanzen hat Ihre Web-App? Sind die Daten nach der langen Antwortzeit korrekt? Wie stellen Sie Ihre SqlLite-Datenbank bereit? –
1 Instanz, nur ich traf die API. Die SQLite-Datenbank ist eine Datei, die über GIT (30 MB-Datei) bereitgestellt wird. – beiller
Wenn Sie vermuten, dass sqlite ist der Täter Blick auf die SQL-Registerkarte in der Debug-Symbolleiste und sehen, wie viele Abfragen dort angezeigt und was ist die langsamste – e4c5