<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Asynchronous, High-Performance Login for Web Farms</title>
	<atom:link href="http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sun, 14 Mar 2010 06:27:00 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36132</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Tue, 12 May 2009 20:44:52 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36132</guid>
		<description>Scott,

All you need to do is define a public property on your message handler of the type IBus, and it&#039;ll work.

Feel free to ask these questions on the discussion group as well:

http://tech.groups.yahoo.com/group/nservicebus/messages</description>
		<content:encoded><![CDATA[<p>Scott,</p>
<p>All you need to do is define a public property on your message handler of the type IBus, and it&#8217;ll work.</p>
<p>Feel free to ask these questions on the discussion group as well:</p>
<p><a href="http://tech.groups.yahoo.com/group/nservicebus/messages" rel="nofollow">http://tech.groups.yahoo.com/group/nservicebus/messages</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Johnson</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36130</link>
		<dc:creator>Scott Johnson</dc:creator>
		<pubDate>Mon, 11 May 2009 18:01:43 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36130</guid>
		<description>I am evaluating nServiceBus for an upcoming project, and I need the functionality described in this article of the BaseMessageHandler.  Unfortunately, I cannot locate this reference anywhere in the 1.9 RTM I have installed.  My events are currently inheriting IMessageHandler, but I need to use this.Bus.Reply(), and I can&#039;t.  Have I missed something?</description>
		<content:encoded><![CDATA[<p>I am evaluating nServiceBus for an upcoming project, and I need the functionality described in this article of the BaseMessageHandler.  Unfortunately, I cannot locate this reference anywhere in the 1.9 RTM I have installed.  My events are currently inheriting IMessageHandler, but I need to use this.Bus.Reply(), and I can&#8217;t.  Have I missed something?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36122</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Mon, 04 May 2009 08:15:29 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36122</guid>
		<description>Jørn,

Since the app server actually handles the process of registering the user, the user doesn&#039;t receive an OK until they go through the app server (and they confirm their email address).

The purpose of the web server cache is primarily to offload the reads from the database giving us near linear scalability in adding web servers for the login function. While it also serves us for first-level conflict detection, it isn&#039;t the authoritative source of information.

Does that answer your question?</description>
		<content:encoded><![CDATA[<p>Jørn,</p>
<p>Since the app server actually handles the process of registering the user, the user doesn&#8217;t receive an OK until they go through the app server (and they confirm their email address).</p>
<p>The purpose of the web server cache is primarily to offload the reads from the database giving us near linear scalability in adding web servers for the login function. While it also serves us for first-level conflict detection, it isn&#8217;t the authoritative source of information.</p>
<p>Does that answer your question?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jørn Wildt</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36121</link>
		<dc:creator>Jørn Wildt</dc:creator>
		<pubDate>Mon, 04 May 2009 07:54:34 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36121</guid>
		<description>Back to the question about registering twice (unique constraints on email for instance): how would the GUI handle this situation?

Scenario:

1) User registers new name/email. This account does not exist on the webserver, so the user gets the immediate answer &quot;Ok&quot;.

2) The register-new-user message arrives in the app server where a clash is detected.

How is the user informed of this cancellation of his account?

Thanks, Jørn</description>
		<content:encoded><![CDATA[<p>Back to the question about registering twice (unique constraints on email for instance): how would the GUI handle this situation?</p>
<p>Scenario:</p>
<p>1) User registers new name/email. This account does not exist on the webserver, so the user gets the immediate answer &#8220;Ok&#8221;.</p>
<p>2) The register-new-user message arrives in the app server where a clash is detected.</p>
<p>How is the user informed of this cancellation of his account?</p>
<p>Thanks, Jørn</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Messaging v Enterprise aplik&#225;ci&#225;ch. NServiceBus. - Tomáš - DevBlog</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36052</link>
		<dc:creator>Messaging v Enterprise aplik&#225;ci&#225;ch. NServiceBus. - Tomáš - DevBlog</dc:creator>
		<pubDate>Tue, 03 Mar 2009 09:17:13 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36052</guid>
		<description>[...] DDD) pridáva praktické(nielen design) argumenty a ilustruje ich na user logon scenári - Asynchronous, High-Performance Login for Web Farms. Udi ďalej uzatvára diskusiu o zmysle messagingu v aplikáciach medzi Ayendem a Gregom Youngom [...]</description>
		<content:encoded><![CDATA[<p>[...] DDD) pridáva praktické(nielen design) argumenty a ilustruje ich na user logon scenári &#8211; Asynchronous, High-Performance Login for Web Farms. Udi ďalej uzatvára diskusiu o zmysle messagingu v aplikáciach medzi Ayendem a Gregom Youngom [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Messaging ROI</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-36038</link>
		<dc:creator>Messaging ROI</dc:creator>
		<pubDate>Sun, 22 Feb 2009 10:13:10 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-36038</guid>
		<description>[...] post, he follows the design I described a while back on using messaging for user management and login for a high-scale web scenario. In his comments, he agrees with the above stating: &#8220;I certainly think that a similar [...]</description>
		<content:encoded><![CDATA[<p>[...] post, he follows the design I described a while back on using messaging for user management and login for a high-scale web scenario. In his comments, he agrees with the above stating: &#8220;I certainly think that a similar [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-35862</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Fri, 19 Dec 2008 20:07:16 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-35862</guid>
		<description>Jai,

Here&#039;s some:

If you can ensure that the call will be local, you can often make it synchronous.

If you  suspect that a call will be remote, you should prefer to make it asynchronous / non-blocking.</description>
		<content:encoded><![CDATA[<p>Jai,</p>
<p>Here&#8217;s some:</p>
<p>If you can ensure that the call will be local, you can often make it synchronous.</p>
<p>If you  suspect that a call will be remote, you should prefer to make it asynchronous / non-blocking.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jai Lalwani</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-35860</link>
		<dc:creator>Jai Lalwani</dc:creator>
		<pubDate>Fri, 19 Dec 2008 06:33:26 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-35860</guid>
		<description>Udi,
Do you&#039;ve any such guidelines, when to and not to make things asynchronous.

Regards,
Jai</description>
		<content:encoded><![CDATA[<p>Udi,<br />
Do you&#8217;ve any such guidelines, when to and not to make things asynchronous.</p>
<p>Regards,<br />
Jai</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-35789</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 29 Oct 2008 13:27:38 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-35789</guid>
		<description>Daniel #4,

Foreign keys and unique constraints are still enforced in the DB. The web server, by having a copy of emails locally, can avoid calling through to the DB for user registrations which are clearly invalid. Still, the web server doesn&#039;t add users on its own volition, but submits a request through to the DB for that. 

The point of this web tier caching is to reduce load on the DB, not to replace it entirely.

There are cases where &quot;things can&#039;t be made asynchronous&quot;, but less than you might think. I do have guidelines around them, but they fill up a 5-day course and are very much tied to understanding the specifics of your business domain.

Hope that helps.</description>
		<content:encoded><![CDATA[<p>Daniel #4,</p>
<p>Foreign keys and unique constraints are still enforced in the DB. The web server, by having a copy of emails locally, can avoid calling through to the DB for user registrations which are clearly invalid. Still, the web server doesn&#8217;t add users on its own volition, but submits a request through to the DB for that. </p>
<p>The point of this web tier caching is to reduce load on the DB, not to replace it entirely.</p>
<p>There are cases where &#8220;things can&#8217;t be made asynchronous&#8221;, but less than you might think. I do have guidelines around them, but they fill up a 5-day course and are very much tied to understanding the specifics of your business domain.</p>
<p>Hope that helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-35784</link>
		<dc:creator>Daniel</dc:creator>
		<pubDate>Tue, 28 Oct 2008 15:14:03 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-35784</guid>
		<description>I&#039;m a different Daniel from #2, but have a related question.  I&#039;m still trying to get my head around this concept and have two questions:

-How are foreign keys and unique constraints handled in this setup?  For example, if there is a unique constraint on email in the database, but the web server allowed a user to register the same email twice.  Is it expected that all such constraints should be enforced in the service in addition to the database?

-Are there, in fact, cases where &quot;things can&#039;t be made asynchronous&quot;?  When designing a system, do you have any guidelines for when to/not to use nServiceBus and event-driven design?</description>
		<content:encoded><![CDATA[<p>I&#8217;m a different Daniel from #2, but have a related question.  I&#8217;m still trying to get my head around this concept and have two questions:</p>
<p>-How are foreign keys and unique constraints handled in this setup?  For example, if there is a unique constraint on email in the database, but the web server allowed a user to register the same email twice.  Is it expected that all such constraints should be enforced in the service in addition to the database?</p>
<p>-Are there, in fact, cases where &#8220;things can&#8217;t be made asynchronous&#8221;?  When designing a system, do you have any guidelines for when to/not to use nServiceBus and event-driven design?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-25892</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sun, 29 Jun 2008 07:59:21 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-25892</guid>
		<description>Daniel,

Here&#039;s how to do it:

On each invalid login, send an InvalidLoginMessage.

The &quot;service-side&quot; handles that message and writes the number of attempts. If the number of attempts is greater than N, publish an AccountLockedMessage.

When web servers get that notification, they mark the account as locked preventing further attempts to login.

This solution leaves a window of time open (probably less than a second) where a user may be able to attempt to login more than N times. On the other hand, the solution is much more scalable than regular locking based solutions. 

The tradeoff should be made at the system level, and not the feature level. I think that it&#039;s more than acceptable.</description>
		<content:encoded><![CDATA[<p>Daniel,</p>
<p>Here&#8217;s how to do it:</p>
<p>On each invalid login, send an InvalidLoginMessage.</p>
<p>The &#8220;service-side&#8221; handles that message and writes the number of attempts. If the number of attempts is greater than N, publish an AccountLockedMessage.</p>
<p>When web servers get that notification, they mark the account as locked preventing further attempts to login.</p>
<p>This solution leaves a window of time open (probably less than a second) where a user may be able to attempt to login more than N times. On the other hand, the solution is much more scalable than regular locking based solutions. </p>
<p>The tradeoff should be made at the system level, and not the feature level. I think that it&#8217;s more than acceptable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-25835</link>
		<dc:creator>Daniel</dc:creator>
		<pubDate>Fri, 27 Jun 2008 14:33:41 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-25835</guid>
		<description>What if you need to lock the account after three invalid attempts to login? You can still refuse invalid usernames on web server, but you&#039;ll need to synchronize the number of invalid logins (valid username, invalid password) between all web servers after each invalid login, and/or write it to the database. I think it&#039;s quite common feature.</description>
		<content:encoded><![CDATA[<p>What if you need to lock the account after three invalid attempts to login? You can still refuse invalid usernames on web server, but you&#8217;ll need to synchronize the number of invalid logins (valid username, invalid password) between all web servers after each invalid login, and/or write it to the database. I think it&#8217;s quite common feature.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TechEd USA 2008</title>
		<link>http://www.udidahan.com/2007/11/10/asynchronous-high-performance-login-for-web-farms/comment-page-1/#comment-23392</link>
		<dc:creator>TechEd USA 2008</dc:creator>
		<pubDate>Sat, 31 May 2008 10:56:37 +0000</pubDate>
		<guid isPermaLink="false">http://udidahan.weblogs.us/2007/11/10/asynchronous-high-performance-login-for-web-farms/#comment-23392</guid>
		<description>[...] performance and scalable web applications based on the principles I outlined in my previous post Asynchronous, High Performance Login for Web Farms. I&#8217;ll also be giving a more interactive session on How to Avoid a Failed SOA, and coming in [...]</description>
		<content:encoded><![CDATA[<p>[...] performance and scalable web applications based on the principles I outlined in my previous post Asynchronous, High Performance Login for Web Farms. I&#8217;ll also be giving a more interactive session on How to Avoid a Failed SOA, and coming in [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
