Sunday, February 13, 2005

Distributed applications do and dont's (DevDays 2005)

The last two presentations I saw at Devdays where "Distributed .Net applications Today and Tomorrow Part I&II" by Ingo Rammer (check out his blog), I have to say, these were definitely topnotch presentations. Ingo mainly talked about the technologies we are using today for distributed applications : ASP.Net webservices, .Net Remoting, Enterprise services and MSMQ. He talked about things you should be aware off when using these technologies and gave some practical tips & tricks - here a some of them.
  • When doing .Net remoting don't simply use a configuration file with the overloaded "new" operator. It is important to know if an object is created remotely, so make this visible within your code with the use of interfaces and a remoting helper object.

  • If performance is important maybe try Enterprise Services, 40000 calls/second on single CPU box vs 1500 in a .Net remoting scenario - Enterprise services is however slower in multiuser scenarios because of the way it enforces transaction locks (ES uses shared locks)

  • Disable http keep alives in IIS for maximum scalability - http keep-alives is reused by IIS to reuse existing http connections, it will disrupt transparent failover in a clustered environment

  • Do not use remoting of events to broadcast information - you will have the risk of deadlocks especially when you are broadcasting to more than 25 clients

  • When you need to develop SOAP based applications use ASP.Net webservices and not .Net remoting. .Net remoting uses a non-future proof version of SOAP (rpc-encoded) vs the document/literal SOAP for asmx (WSI compliant

  • Do not use WSE if you do not need to - WSE does not use the same model as Indigo and is not compatible between different versions

  • The preauthenticate property for webservices does not work when using windows challenge/response - with every response you will need to be authenticated again. A solution is the use of connectionsharing of requests. Look at unsafeauthenticatedconnectionsharing and connectiongroupname.

  • The impact of SSL as a security mechanism for webservices on performance is negligible, you will only get a performance hit on the first request (when performing the assymmetric encryption), the following requests will use symmetric encryption

  • Design your distributed applications from the standpoint that errors can occur

  • When using an NLB cluster watch out for the class C network affinity.

  • Avoid datasets and OR mappers in high load application scenarios, but they are helpfull in about 80% of all development tasks

  • Datasets are very memory intensive - using objects vs datasets, can be an in memory difference from 300 bytes (for objects) to 55 MB (for datasets)

  • ...

  • Amazing how much stuff was packed in one session (This guy seemed to agree - My impressions after the Developer Days in Belgium.)

    Well it seems that Ingo Rammer is doing a tour around Europe - check out - Ingo Rammer in Dublin - A great event :-), mmm Guiness....

    No comments: