Hi Waleed, It's impossible to say what the cause of the latency might be without more details. You say you spent a lot of time investigating it; can you show us some of the data you gathered? Did you use appstats?
-Nick Johnson On Wed, Nov 16, 2011 at 11:37 AM, Waleed Abdulla <wal...@ninua.com> wrote: > I just switched one of my apps to Python 2.7 and the average latency went > up from 125ms to about 1.3 seconds (about 10x). My app is 'not' CPU-bound. > It has a mix of different use patterns (some requests use urlfetch, others > load data from datastore or memcache). That variety should make it a good > candidate to benefit from multi-threading, but that doesn't seem to be > working as expected. While the number of instances went down from 9 > instances to 6, the 10X increase in latency is not acceptable. > > I spent a lot of time investigating it, and finally changed threadsafe to > false and that fixed the problem (and, of course, raised my instance count > to it's original level). Like the original poster, I was hoping that > multithreading will reduce my instance cost, but that plan failed. > > Am I doing something wrong? Or is multi-threading not ready for live > traffic yet? > > Waleed > app id: bitpixelshr > > > > > > On Tue, Nov 15, 2011 at 3:10 AM, Jeff Schnitzer <j...@infohazard.org>wrote: > >> Dunno about the Python library, but the standard Java jBCrypt library >> uses a random salt per-user by default. >> >> I'm also very suspicious of this idea that the attacker doesn't have the >> source code. Python is trivially easy to decompile. Also, where do you >> keep your source code? In Github? Opens up a whole new set of attack >> vectors, including disgruntled Github employees. >> >> Jeff >> >> On Mon, Nov 14, 2011 at 10:52 PM, Brandon Wirtz <drak...@digerat.com>wrote: >> >>> Nick,**** >>> >>> ** ** >>> >>> I agree, that my threat model assumes they didn’t get my source code. >>> That “Somebody else’s problem” works under the assumption people are going >>> to get my data, not my source code because I don’t ever write my own DB >>> server code I am stuck using someone else’s which means the vulnerability >>> that I am most likely to face is that somebody else’s screw up will be >>> where my problem lies.**** >>> >>> ** ** >>> >>> Granted this is a better strategy if you are running compiled code, >>> since my code lives on the Google Server I’m at the mercy of Google’s >>> Security, where as if I were running compiled code it would be less likely >>> someone would get the code.**** >>> >>> ** ** >>> >>> I would say that unique salt per user, is a good thing. The most common >>> way to attack a large password database is to look at the most common >>> entries and compare against the most common passwords from other sources. >>> If you know the 15 most used passwords and the 15 most often occurring >>> database results you are a long ways towards knowing what those 15 values >>> are and calculating the salt. You aren’t crunching millions of >>> combinations you are crunching 1000’s and once you have the salt, you take >>> your already deciphered list of the most common passwords and you calculate >>> the top 5k using bcrypt and you now have about 50% of the data in fewer >>> than 10k operations.**** >>> >>> ** ** >>> >>> Compare that with my scenario. You have data. You don’t have the source >>> code. The UserID or other “spoiler” is in every salt so the reoccurrence of >>> a hash doesn’t correspond to a duplicate password, and now the computation >>> is nearly impossible even if you have the source code, because you have to >>> calculate every value for every user anyway.**** >>> >>> ** ** >>> >>> Would Brcypt(Pass+UserID+Salt) be the best? Yes. But >>> MD5(Pass+UserID+Salt) is going to still going to be orders of magnitude >>> more difficult than Bcrypt(Pass+salt), because I can’t use knowledge of >>> frequency tables to predict likely outcomes or detect duplicate passwords. >>> **** >>> >>> ** ** >>> >>> -Brandon**** >>> >>> ** ** >>> >>> ** ** >>> >>> ** ** >>> >>> *From:* google-appengine@googlegroups.com [mailto: >>> google-appengine@googlegroups.com] *On Behalf Of *Nick Johnson >>> *Sent:* Monday, November 14, 2011 6:21 PM >>> >>> *To:* google-appengine@googlegroups.com >>> *Subject:* Re: [google-appengine] Help resolve massive performance >>> regression in 2.7 vs 2.5 runtime**** >>> >>> ** ** >>> >>> Hi Brandon,**** >>> >>> ** ** >>> >>> What you say is fine if your threat model only includes "script kiddies" >>> who don't have your source code. If either of those is not true - you have >>> an adversary with some level of independent skill, or your source code is >>> compromised - any method that relies on obscurity for its security will >>> fare very poorly.**** >>> >>> ** ** >>> >>> One thing to bear in mind is that if your app is ever compromised, your >>> password database and/or source may be posted publicly; at that point, you >>> no longer have to worry about just the initial attacker, but anyone with >>> sufficient motivation.**** >>> >>> ** ** >>> >>> Of course, using federated login like OpenID or the Users API obviates >>> the need to store passwords at all, making it Someone Else's Problem. :) >>> **** >>> >>> ** ** >>> >>> -Nick**** >>> >>> On Tue, Nov 15, 2011 at 1:07 PM, Brandon Wirtz <drak...@digerat.com> >>> wrote:**** >>> >>> If I know your salt, I can “De-Hash” bcrypts faster than I can any of >>> the “weird” combinations. Because there are libraries for doing so on ATI >>> cards.**** >>> >>> **** >>> >>> If you do something weird a script kiddie can’t just pull code off the >>> web and attack it. **** >>> >>> **** >>> >>> You want to see who can offline crack a set of 1M users? Your bcrypt >>> list vs my “Weird” You don’t even have to give me the salt I’ll have 10k >>> of those cracked in the first 72 hours. 10 to 1 odds you won’t get through >>> mine without my source code in my life time.**** >>> >>> **** >>> >>> -Brandon Wirtz**** >>> >>> **** >>> >>> PS >>> I don’t usually do the “trust me I’m far more evil” but FBI, Homeland >>> Security, and the CIA have been to my doorstep for things I have defeated, >>> documented, or built to keep from being defeated. The first time I was in 3 >>> rd grade.**** >>> >>> **** >>> >>> *From:* google-appengine@googlegroups.com [mailto: >>> google-appengine@googlegroups.com] *On Behalf Of *Nick Johnson >>> *Sent:* Monday, November 14, 2011 3:56 PM**** >>> >>> >>> *To:* google-appengine@googlegroups.com >>> *Subject:* Re: [google-appengine] Help resolve massive performance >>> regression in 2.7 vs 2.5 runtime**** >>> >>> **** >>> >>> No! Please, please don't do this. Obscurity is no substitute for >>> security.**** >>> >>> **** >>> >>> 1) Bcrypt or similar is not 'overkill' no matter who you are. Users >>> reuse passwords, and they're entitled to the best protection you can >>> reasonably provide them.**** >>> >>> 2) Bcrypt is not there to protect against online attacks, it's there to >>> protect against offline attacks, where an attacker obtains your hashed and >>> salted passwords.**** >>> >>> 3) Doing "something weird" is security through obscurity. Do not base >>> your security on your attacker not knowing what you did. Really, really >>> don't just concatenate salts to the beginning or end of the password.*** >>> * >>> >>> 4) Both MD5 and SHA1 are merkle-damgard construction hashes ( >>> http://en.wikipedia.org/wiki/Merkle%E2%80%93Damg%C3%A5rd_construction). >>> As a result, the concatenation of several hashes is no more secure than the >>> most secure of the individual hashes.**** >>> >>> **** >>> >>> -Nick Johnson**** >>> >>> **** >>> >>> On Sun, Nov 13, 2011 at 2:58 PM, Brandon Wirtz <drak...@digerat.com> >>> wrote:**** >>> >>> Unless you are protecting Medical records bcrypt is overkill if you do >>> some >>> reasonably smart things like "Failed logins from IP >9" >>> >>> Or, if you just do something weird to the password BEFORE you SHA it. >>> Like >>> interleave the user name in the password, Salt1 + UpSaEsRsNwAoMrEd + >>> Salt2 >>> >>> Or Pick 2 Hash's SHA(pass) + Md5(pass) >>> >>> Don't want to store all that string length? Odd Characters from >>> Sha(Pass+salt) + Even Characters from MD5(Pass+Salt) >>> >>> Uniqueness of the method is more important than the method. >>> >>> >>> >>> -----Original Message----- >>> From: google-appengine@googlegroups.com >>> [mailto:google-appengine@googlegroups.com] On Behalf Of Brian Quinlan >>> Sent: Saturday, November 12, 2011 6:58 PM >>> To: google-appengine@googlegroups.com >>> Subject: Re: [google-appengine] Help resolve massive performance >>> regression >>> in 2.7 vs 2.5 runtime**** >>> >>> >>> Hi Pol, >>> >>> On Sun, Nov 13, 2011 at 1:48 PM, Pol <p...@everpix.net> wrote: >>> > Hi, >>> > >>> > Since switching to 2.7 runtime, logging in to http://www.everpix.com >>> > went from about a second to anywhere from 15s to 60s. I tracked it >>> > down to this single password checking line: >>> > >>> > from bcrypt import bcrypt >>> > bcrypt.hashpw(password, self.password_hash) == self.password_hash >>> >>> What value are you using for "threadsafe" in your app.yaml? >>> >>> How large is self.password_hash? >>> >>> Cheers, >>> Brian >>> >>> > This comes from "a native Python implementation of the py-bcrypt >>> > package from http://www.mindrot.org/projects/py-bcrypt/" grabbed from >>> > here: https://github.com/erlichmen/py-bcrypt. >>> > >>> > So what's happening here and how can we fix this? >>> > >>> > Thanks, >>> > >>> > - Pol >>> > >>> > -- >>> > You received this message because you are subscribed to the Google >>> Groups >>> "Google App Engine" group. >>> > To post to this group, send email to google-appengine@googlegroups.com >>> . >>> > To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> > For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en. >>> > >>> > >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en. >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en.**** >>> >>> >>> >>> **** >>> >>> **** >>> >>> -- >>> Nick Johnson, Developer Programs Engineer, App Engine**** >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en.**** >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en.**** >>> >>> >>> >>> **** >>> >>> ** ** >>> >>> -- >>> Nick Johnson, Developer Programs Engineer, App Engine >>> >>> **** >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en.**** >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google App Engine" group. >>> To post to this group, send email to google-appengine@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-appengine+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-appengine?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To post to this group, send email to google-appengine@googlegroups.com. >> To unsubscribe from this group, send email to >> google-appengine+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/google-appengine?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to google-appengine@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > -- Nick Johnson, Developer Programs Engineer, App Engine -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.