<div dir="ltr">Thank you Alex, for the detailed response, I will keep that info in mind while testing.<div><br></div><div>If I can convenience the team to <font face="arial, sans-serif">increase the "<span style="color:rgb(30,30,30)">auth_param basic credentialsttl" to around 60</span></font></div><div><font face="arial, sans-serif"><span style="color:rgb(30,30,30)">minutes, we should have absolutely no problem, please correct me if I am wrong.</span></font></div><div><font face="arial, sans-serif"><span style="color:rgb(30,30,30)"><br></span></font></div><div><font color="#1e1e1e" face="arial, sans-serif">As per my understanding, even if the DB server is all the way across the world, and we have an added</font></div><div><font color="#1e1e1e" face="arial, sans-serif">response time of 1 second that occurs only once </font><span style="color:rgb(30,30,30);font-family:arial,sans-serif">every 60 minutes, that would have almost 0 impact</span></div><div><span style="color:rgb(30,30,30);font-family:arial,sans-serif">on the </span>performance<span style="color:rgb(30,30,30);font-family:arial,sans-serif"> and resources used by Squid.</span></div><div><span style="color:rgb(30,30,30);font-family:arial,sans-serif"><br></span></div><div><span style="color:rgb(30,30,30);font-family:arial,sans-serif">My only concern is for 407s, do users that get 407 are also cached?</span></div><div>In case that they do get cached, that would mean that if I send one request</div><div>using some username, it gets 407, and then I add the username to the DB,</div><div>it will still not work for 60 minutes.</div><div><br></div><div>However, if it is not cached, that could potentially cause big resources usage as well,</div><div>since every 407 request takes around 1 second to resolve, and we have a lot of those.</div><div><br></div><div>Anyway, it seems that no matter if 407 are cached or not, it will cause some issues</div><div>if the DB response takes around 1 second unless I am overestimating the resource </div><div>use of these requests.</div><div><br></div><div>I would love to hear your thoughts on that solution,</div><div>Thanks,</div><div>Roee</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Aug 28, 2021 at 10:33 PM Alex Rousskov <<a href="mailto:rousskov@measurement-factory.com">rousskov@measurement-factory.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 8/28/21 2:59 PM, roee klinger wrote:<br>
<br>
> I have multiple Squid servers installed in different data centers across<br>
> different cloud providers, and they all need to authenticate users using<br>
> a single database (MySQL) on a separate server, which is also on a<br>
> different cloud provider on a different data center.<br>
> <br>
> I have already written an external authentication script that reads from<br>
> MySQL and everything is working fine, however, I have some<br>
> performance concerns, since the DB is located externally and in a<br>
> different region of the world from the Squid server.<br>
> <br>
> I made some speed tests to see how long it takes to query the DB as<br>
> Squid would:<br>
> <br>
> if the database is located on the same machine as Squid:<br>
> 1.067-millisecond average query<br>
> <br>
> if the database is located on the same datacenter as Squid:<br>
> 2.67-millisecond average query<br>
> <br>
> if the database is located on a different datacenter than Squid<br>
> (different country as well): 38.9-millisecond average query<br>
> <br>
> <br>
> Now I am wondering, is 36-millisecond average added query time a big<br>
> deal when dealing with HTTP/S traffic? how significant is this added<br>
> time to Squid and will performance get hurt drastically?<br>
<br>
* When you look at a single HTTP transaction, adding 36ms is usually not<br>
a big deal: Humans are incapable of discerning such delays and<br>
automatons that need true real-time performance are unlikely to go<br>
through your Squids.<br>
<br>
* Additional 36ms added to mean transaction response time create<br>
significant perceived delays for sites/services that load lots of<br>
resources _sequentially,_ especially if such a site/service has lighting<br>
fast response times without those extra delays. For example, without<br>
authentication caching and similar optimizations, a cumulative extra<br>
delay of 100 sequential transactions (that would normally take, say,<br>
300ms total) would be 3.6 seconds -- something many humans will be<br>
annoyed with!<br>
<br>
* Additional 36ms added to mean transaction response time can kill<br>
performance of a Squid instance that is operating at the limit of some<br>
resource capacity.<br>
<br>
For example, imagine that, without authentication delays, your Squid<br>
transactions have 10ms mean response time, and your Squid instance is<br>
dealing with 10'000 requests per second load. That combination results<br>
in just 100 concurrent requests (10'000r/s * 0.01s = 100r). If you add<br>
36ms to that 10ms response time, your Squid would have to deal with 460<br>
concurrent requests (10'000r/s * 0.046s = 460r) -- a 360% increase in<br>
concurrency levels and associated resource consumption. Such an increase<br>
is likely to maim any Squid that was operating without significant spare<br>
resources.<br>
<br>
For an opposite example, imagine that, without authentication delays,<br>
your Squid transactions have 1 second mean response time, and your Squid<br>
instance is dealing with 10'000 requests per second load. That<br>
combination results in 10'000 concurrent requests. If you add 36ms to<br>
that 1s response time, your Squid would have to deal with 10'360<br>
concurrent requests -- a mere 3.6% increase in concurrency levels and<br>
associated resource consumption.<br>
<br>
Keep in mind that as Squid approaches resource limits, things usually<br>
get _exponentially_ worse.<br>
<br>
<br>
The impact of additional authentication delays should be fairly easy to<br>
model/test.<br>
<br>
<br>
HTH,<br>
<br>
Alex.<br>
<br>
<br>
> I know there is some caching going on the Squid side, but I had to set<br>
> the caching to really low values (around 15s), as per the requirement I<br>
> was given.<br>
> <br>
> If I will have no other choice, I will simply replicate the DB table<br>
> from the DB server to the Squid server, but I prefer not to do that, as<br>
> it will require installing MySQL on all the Squid servers (or some other<br>
> DB, but then I have to do replication from different DBs).<br>
> <br>
> Thanks.<br>
> <br>
> <br>
> _______________________________________________<br>
> squid-users mailing list<br>
> <a href="mailto:squid-users@lists.squid-cache.org" target="_blank">squid-users@lists.squid-cache.org</a><br>
> <a href="http://lists.squid-cache.org/listinfo/squid-users" rel="noreferrer" target="_blank">http://lists.squid-cache.org/listinfo/squid-users</a><br>
> <br>
<br>
_______________________________________________<br>
squid-users mailing list<br>
<a href="mailto:squid-users@lists.squid-cache.org" target="_blank">squid-users@lists.squid-cache.org</a><br>
<a href="http://lists.squid-cache.org/listinfo/squid-users" rel="noreferrer" target="_blank">http://lists.squid-cache.org/listinfo/squid-users</a><br>
</blockquote></div>