Samstag, 3. Mai 2003

Putting code and data into a single thing is a bad idea for distributed systems. Behavior is bound to the role that data plays in a functional scope. Presentation is a scope, calculation, combination, aggregation and validation are scopes, services and resource access is a scope. Having all code for all scopes on a single thing is bad. "Technology choice" causes inability to share implementation across organization boundaries. Mobile devices and web services are both like the "big bang": things get further and further away from each other (in terms of geography, trust and organizational association), causing more inability to share implementation and causing behavior that's bound to data and is located at central places to be the mother of all bottlenecks and plenty of other problems for scenarios where the boundary between tiers may ever have such "far" characteristics. I leave the conclusions to the reader, but here's a hint: MarshalByRefObject


9:23:03 PM      comments []

First drop of samples from scalable apps tour.

Here are the samples that we ran (for the purpose of illustrating some points, not really to drill into these specific implementations) at the events in the past two weeks. These are not demos that illustrate scalability per-se. We couldn't carry enough laptops with us to illustrate scalability for real. These demos deal with transactions, layers and performance tuning. (Reminder: Performance has little to do with throughput -- think about all the time people spend in traffic jams with their Porsche 911 running in idle).


8:53:38 PM      comments []

newtelligence SDK for Enterprise Services 2.0 RC1

The newtelligence SDK for Enterprise Services is a set of classes and infrastructure extensions for the System.EnterpriseServices programming model to Windows Enterprise Services (COM+) in the Microsoft Windows .NET Framework. The extensions are designed to work with Windows Server 2003, Windows XP and Windows 2000.

The tools contained in this kit provide the following enhancements for Enterprise Services.

  • Custom interception extensibility for managed components (ServicedComponents) hosted in COM+ 1.0 and COM+ 1.5.
        (AspectServicedComponent class and utilities)
  • Windows installer support
        (EnterpriseServicesApplicationInstaller class)
  • Shared, context-scoped state using custom context properties
        (ContextUtilEx class)
  • The ability to create serviced components in non-default application domains
        (ApplicationDomainAttribute class and ServicedComponentEx class)
  • Inline transaction support using "services without components" also on Windows XP 
        (InlineTransaction class)
  • Just-in-time activation proxy pooling
        (JITAPool class)
  • Managed wrappers for the configuration catalog
       (CatalogManager and related classes)

Requirements:

  • Microsoft Visual Studio .NET 2003
  • .NET Framework 1.1
  • Microsoft Windows Server 2003 (recommended) or
  • Microsoft Windows XP or
  • Microsoft Windows 2000 Server/Professional

The full reference documentation and samples are available inside Visual Studio .NET 2003 after installing the SDK.

We still do not plan to charge license fees for the binaries when we move them to "release" status, but we cannot and will not offer any reliable support on "free" terms, of course.

 


8:46:51 PM      comments []

A simple in memory cache for "business data"

Here is a little project demonstrating a little in-memory data cache using DataSets and serviced components. The demo illustrates how to deal with near data in a smarter way than by just walking up to SQL Server all the time. My "Layers and Tiers" slide deck of the recent tour makes the point that it's a good idea to delegate data access to services which are aware of the temporal character of data (static, near static, dynamic and "hot") and optimize access to that data accordingly. The sample also illustrates a way of implementing proper layering for such a data service: The public interface is a Serviced Components (an alternate public interface could be a web service or whatever else), the internal implementation is a base class providing the caching logic and the resource access is realized by deriving one version for SQL Server access and one of OleDb access from this base class. Creating instances of the concrete implementations is done through a config-driven factory.  -- looser binding towards the "client edge" and tighter binding towards the "backend edge".

The concrete implementation assumes that the "Products" and "Categories" tables in the accessed Northwind database copy are in a read-only replica and assumes that the data will always conveniently fit into memory. The demo shows the perf. difference between the cached and the direct database access versions.

The time difference isn't only due to the caching, though. The sample also shows how to use "connection pooling" to JITA Enterprise Service components using a client side JITA pool. The code for that is included.


7:53:15 PM      comments []

Thank you, Steve :) 

Yesterday, in Portugal, was the last stop on the "Scalable Applications Tour". And I consider this one more significant than any event I've done before. Why?

  • This was the only event series I know of where an external, "regular guy" like me and senior architect form a Microsoft product group have been together on a speaking tour of this scale. 
  • This was the only event series I know of where Enterprise Services and ASP.NET Web Services got an even-handed coverage in term of features and use-cases. The wwinning combination is to use both. 
  • This was the only event series I know of where Windows product features introduced in 1997 got even-handed coverage with Windows product features introduced in 2003. The goal was to paint the big picture and not to give the usual, incremental "here's something new" talks.

It was a lot of fun. I learned a lot, Steve says that he learned a lot and I am sure that the 2200+ people we could do these talks for were also able to take some valuable information home.

Notice to attendees: All sample code and the final set of slides will be available within the next 24-72 hours for download. Watch this space for a pointer to the download location(s).


12:11:44 AM      comments []