This sounds related to a thread I started a couple weeks ago:
https://groups.google.com/d/topic/google-appengine/rAmZi6a8ZaI/discussion
If I understand my results correctly, every request to a backend has
an extra 100+ms added to it in transit (before your code starts
executing). It could actually be considerably worse; doing a urlfetch
from a frontend to a backend (no-op) typically takes hundreds of
milliseconds. Combined with doing actual work per request, this could
explain low throughput numbers.
It would make sense that the task queue is overloading the backend and
therefore failing a lot of requests. These failures will cause the
task queue to back off, producing the longer delays you see.
This really isn't a good application for a backend. If you want to
split logs out, put your processing on a separate frontend version.
Alternatively, you could convert your backend push-queue to a
pull-queue... but it really sounds like a job for a properly scaled
and load-balanced frontend. If you are worried about spinning up too
many instances, throttle the queue with max-concurrent-requests.
Jeff