Thursday, March 19, 2009

Desktop Virtualization Adoption issues

I think there is one major hurdle in the adoption of desktop virtualization on a massive scale. Even with desktop virtualization, thin clients will be needed for connecting to the virtual machines. Hardware cost of thin clients is far from negligible.

Consider what contemporary hardware could fit in as an affordable thin client. best I can come up with is either netbooks which are starting to cost under 400$ or maybe the most scaled down of desktops having say 512 MB RAM, 60 GB harddisks, but even these are not very cheap. Add to that full-blown operating systems like windows vista, which cost a bundle. The thin client cost can easily baloon upto 500$+ a piece. This can eat into the benefits of desktop virtualization. The OS problem is easily solved with linux, but hopefully in near future industry will make serious effort to provide scaled down thin client hardware which is very affordable (say under 100$)

If the thin client cost can be brought down, then the adoption of desktop virtualization will proportionally sky rocket.

The near future: Towards reducing the cost of thin client hardware most reports tell us that RAM, storage and chips are getting cheaper by the day and increasingly, the bottleneck in reducing cost for the thin client is the display technology. I dream of the day when, my laptop is as thin as can be and its LCD screen has been replaced by an small outlet for optical projection so that any flat surface can make do as a screen. Ah, but thats just wishful thinking for now...

Wednesday, January 14, 2009

Service Coupling - Service Interface evolution impact

Service providers should consider potential service consumer needs when coming up with service interfaces. However evolution of service interfaces is a fact of life we all have to contend with eventually. In an enterprise SOA, service providers and consumers are very much under enterprise SOA goverance and there are specific things which can be done, to minimize the pain of service consumers having to change with evolving service interfaces. Let us consider this problem through the example of the following Employee Information Service which has the following interface
public interface EmployeeInformationService {
    List getEmployeeInformation(Employee request);
}

class Employee {
    private long id;
    private String name;
    ...
    ...
}


1. A key thing in above interface is that the employee service's domain class Employee is exposed to consumers. To avoid this it would be desirable to wrap up the class in service integration abstractions like EmployeeInformationRequest and EmployeeInformationResponse

public interface EmployeeInformationService {
    EmployeeInformationResponse getEmployeeInformation(EmployeeInformationRequest r);
}

class EmployeeInformationRequest {
    private long requestId
    private String requestStatus;
    private Employee employee;
    ....
}

class EmployeeInformationResponse {
    private long responseId
    private String responseStatus;
    private List employee;
}



2. Even on the service consumer end, coupling between the service interface and the consumer's application logic can be greatly minimized using a consumer specific ServiceClient interface. In addition a object mapping tool such as dozer can be used to map attributes between consumer classes and service classes, declaratively. More about dozer


3. A key thing about reducing coupling is not the mere use of above abstractions but rather a conscious use of only the bare minimum, functionally necessary service interface attributes in the consumer. This judicious neglect of unrequired service object attributes by a consumer is what increases the consumers resilence to changes in service interface

For example if the Employee class in service interface contains 20 atttributes but our consumer needs to know only about 4 attributes then the consumer side classes should be aware of only 4 Employee attributes and mappings to translate to and from equivalent Employee attributes

The whole idea being that if Employee existing attributes were changed or deleted in the provider, unless the same were being used by our consumer, our consumer would be unaffected by the change.

Summary: Often in SOA implementation, providers communicate through XML messages and expose XSD schemas for message structures. This is equally applicable for SOAP based or Plain Old XML(POX) message exchanges. Here consumers often imnport the entire XSDs exposed by the provider and also do XSD based validations.

These consumers needlessly couple themselves to provider interface, instead consumers should do "just enough" validations and also "be aware of" minimum information being sent by the provider.This will go a long way in promoting reduced coupling between providers and consumers, and will allow provider interfaces to evolve with minimal impact on consumers

Wednesday, December 10, 2008

topics for considering loose coupling in SOA

  • physical connections - via mediator instead of point-to-point communication style - asynchronous instead of synchronous
  • data model - simple common types instead of complex common types
  • type system - weak type checking instead of strong type checking
  • control of process logic - distributed control instead of central control
  • binding - late(dynamic) binding instead of early(static) binding
  • platfrom - platform independent instead of strong platfrom dependency
  • transactionality - compensation instead of 2 phase commit
  • deployment - independent instead of simaltaneous
  • versioning - independent upgrades instead of simultaneous upgrades

Monday, July 14, 2008

Web applications Security Check List

Following a list of web security related functionalities that need to be implemented in a typical web application

  • channel processing checks - redirect certain requests automatically to https and vice versa.
  • maintain a list of urls which will automatically redirect to https
  • concurrent session checks - user is not logged in more than once
  • Http Session Integration processing - populate security context using http session, remembers prev authentication stored in session
  • Logout checks
  • Exception Translation checks - handles authentication and access denied exceptions
  • Authenication processing - delegates to authentication entry point, filter and finally manager
  • Authentication entry points and filters - http basic auth, http form based, http digest, X509 certificates, SiteMinder based
  • login form url ; force use of https ; auth failure url ; default url if target url is blank
  • Remember me checks - no need to relogin if revisiting website within http session timeout
  • Anonymous processing checks - no need to login at all for accessing some resources
  • Filter Security Interceptor - delegates to authentication manager and access decision manager
  • access decision manager associates url / resources with roles
  • Associates url / resources with roles
  • authentication manager -> Authentication Providers
  • Anonymous DAO based ; LDAP based ; Jaas based ; Remote ; X509 based