Infosys delivers concept-to-market software engineering services across the engineering value chain. Our blog will discuss the latest trends in software product engineering, outsourcing, technologies, and address business challenges.

Main | July 2009 »

June 26, 2009

Knowing Application Virtualization


The last blog on Virtualization provided what you could term a 'laundry listing' of a number of Virtualization types to reinforce the fact that  -'Virtualization means a lot of different things ...'. Another growing Virtualization concept is called 'Application Virtualization' and Microsoft's Application Virtualization Solution (App-V) is an interesting advancement of this virtualization type.

It is often the case that applications are designed (unknowingly) to cause a change in the state of the machine on which they run. Installation of applications often cause existing files to be overwritten, cause changes in common locations like the Program Files directory or affect the settings in registry locations like the COM registration database for example. The net result of such an application installation is that other applications that had been running well and fine start to complain. This happens because a new application installation mingles it's state with the state of the machine thus affecting existing applications. Despite you trying to install an application in a specific folder (during the process of installation), there is usually something that the application installation ends up doing in common locations like C:\Windows\System32 etc. (driver files etc.) which changes system state by overwriting/replacing configurations or files. This might be a necessity for the application to execute as per it's design.

Microsoft has obviously put in a lot of thought in such issues (one of the manifestations of which is the DLL Hell problem) and that shows in the introduction of concepts like manifests, the global assembly cache etc. which to a certain extent  help prevent existing applications from being affected by new installations. But, then expecting a re-write of existing legacy applications is a hard ask when you would ofcourse want to stay ahead of your competitors by adding new features to your product rather than re-write the complete application (ofcourse a pros and cons analysis could also favour an application rewrite considering the sheer benefits of new technology).

Microsoft's Microsoft Application Virtualization (App-V) is one such solution that allows applications to run within a virtual environment (a virtual bubble), thus allowing application updates and state changes in isolation from the original environment where the original applications execute. The idea is to fool the application running within the virtual bubble into believing that it is running on the actual system and making updates on the system folders and registries, when those updates are actually diverted to what is called a Virtual File System and Virtual Registries.

The App-V solution contains client side and server side components which combine to provide the complete application virtualization experience. The client component, which runs in both the user mode and kernel mode, simulates the virtual bubble which intercepts the application's I/O requests and diverts them to the Virtual File System and Virtual Registry. The server side component hosts the actual application (as a collection of bytes) and streams it down to the client whenever requested. This sort of an architecture reflects facets of what is the SaaS or S+S model because the application is streamed down to the host only on demand ('click to run' starts the process of streaming down and starting the application on the host) as a service at a minor scale. 

One noteworthy architectural detail is that the concept of demand paging (the OS demand paging scheme is mimiced at the network level to some extent) is implemented here where only parts of the application that need to be initially displayed and used are streamed down first and then based on demand (in case the user maneuvers to a part of the application that has not been streamed down to the client), a request for the corresponding block is made and delivered. Even without a demand being made, necessary parts of the application are streamed down in blocks of bytes of data to slowly build up the application image on the host, even as the user is already using it. (Application streaming needed not be internet (http/https) based though but can also be accessed over a CD or a USB drive)

The end result of the process is an application running on your machine as if installed (though not really installed) providing you all the facilities of an installed application without messing up the system state. User data is stored in the host machine file system just as one would in a normal application.

Application Virtualization extend the life of legacy applications on newer systems by executing them in a virtual bubble. In addition, one can run multiple applications side by side (which might not have been possible earlier in case they affected each other's state) without each application affecting the other. An often quoted example is the execution of two versions of MS Office (2007 and 2003 for example) at the same time on the same machine (with no virtual machine to run them in).

One of the complexities in Application Virtualization solutions is to identify what in the application causes changes in system state and then isolate them. The designing of an application on Windows today needs careful thought as regards the components being used and the affect on the state of the machine if these components are removed or updated. As mentioned earlier, Microsoft's assembly versioning concepts, advice to application designers to using avoid registry (in favour of application configuration files as provided in .NET application development) are pointers to ways of avoiding state changes in the system. It is important that changes be localized to a particular known location rather than spread across the system. (Wonder if that was one little consideration in the security attributes feature in Vista which prevented easy updates to the contents of C:/Program Files folder). Doing this might help in easing the process of hosting applications virtually thus enabling ease of deployment on client machines (no installation required) and easier software life cyclemanagement (with the software being hosted,maintained and patched centrally).

Though the focus here has been on Microsoft's Application Virtualization Solution (formerly SoftGrid), there are other players in the market like VMWare with Thinstall and Citrix who are contributors to solutions in the Application Virtualization space. However, each vendor is different as regards the methodology adopted.

June 19, 2009

Rich Internet Application Blues for customers and software developers

Internet evolution and revolution has brought massive shifts in all the facets of human mankind. It has made a world look like a single hyper-mart where in the e-communication is no longer a barrier. In reality the interactions have shifted from simple text based messaging to 2D and 3D base communication. In today’s internet world this is synonym to saying that the “shift is from web1.0 to web2.0”.  This shift directly touches the heart of the users and reduces the gap between real business/human interactions with that of virtual interactions which exists in virtual world of internet.

We all know the innovations that are born in universities and research labs later find a place either in opensource world or in shareware world. Now we are coming to the million dollar question “what is the cost implication”? This is a pivot point for both customers and software Services Company to make the decision. There is no direct answer for this question but our research at “Infosys Java Centre of Excellence” has designed a Quadrant based decision making RIA (Rich Internet Applications) framework for our customers. As long as customer gives their inputs wrt to degree of richness they want in their applications and what is their cost budget then this framework will help them unravel their problem statement.

Let’s have a closer look at this framework. The frame work has mainly two parameters:

CC: cost to customer
ROF: Richness of Application

CC

ROF

Quadrant #

Explanation

0

0

1

~zero cost + zero Application richness

0

1

2

Low cost + low application richness

1

0

3

Medium Cost + medium application Richness

1

1

4

High Cost + medium high application richness

Other definitions used in the calculations are:

CS: cost of software
MC: Maintenance cost
LC: Licensing Cost
BC: Bug fixing cost
LC: learning Cost
CDC: Code Customization cost

CC = ∑ CS + MC + LC + BC

RIA = ∑ LC + CDC

Total Cost = ∑ CC + RIA

By using the above formula we can arrive at the mapping of four quadrants to the existing softwares as illustrated below:

RIA 

Now, it is very evident that the quadrant 3 is the most desirable choice for conservative customers who still want to see the rich user interface in the applications. The classification of softwares to their respective quadrant was based on the reference implementations. There are lot many software/toolkits available in the market which are not yet covered in this blog.

With mergers and acquisitions, the defined matrix weightages may change due to implication of licensing cost and addition of new features in the RIA toolkits.  The RIA decision framework will always help the customer and software Services Company to make the right choice.

June 5, 2009

Virtualization means a lot of different things

The first time I ever heard of Virtualization as a computing technology term was when I was part of a team hosting a visit by a senior delegation of a reputed Japanese IT Fortune 500 company. During the course of the meeting which focused on a server side product to be launched in the global market, one of the guests lamented the complexity and costs involved in testing the product across varied combinations of operating systems, component software etc. Spontaneously, one of our colleagues shouted out -  ‘Virtualize your environment!’. This suggestion though was shot down politely as ‘this was not the real thing – and hence cannot be guaranteed to be as good as the real thing’. The concept of Virtualization has come a long way since then and today the same company prides itself in being pioneers in developing storage virtualization products. Virtualization in the industry itself means a lot of different things. Ideally, the term Virtualization would imply using a physical resource such as a server and dividing it up into virtual resources called Virtual Machines thus ensuring the maximum use of the available resources on the physical machine. But, over time, the term Virtualization has come to cover a lot many different concepts which finally happen to have the same aim – that is to consolidate physical resources, simplify deployment and administration and reduce data center costs. However, it would be nice to understand the various commonly prevalent types of Virtualization briefly in this post.

“Machine Virtualization” can be considered to be the “Father of all Virtualization” because that is what is commonly associated with the concept of Virtualization. The concept of “Machine Virtualization” provides the virtual environment for applications run within an operating system - thus simulating the existence of a physical machine (with it’s own CPU, hard-disk, memory etc.) virtually. The concept of  Machine Virtualization itself can be categorized into “Hardware Virtualization” and “Operating System Virtualization”. Hardware Virtualization is the case where a software layer is used to emulate the physical hardware and each virtualization machine deals with this software emulation as if it is running on it’s own dedicated hardware. This approach is what Microsoft is propagating with it’s Hyper-V technology in it’s Windows Server 2008 platforms. Operating System Virtualization is the case where the Guest OS running inside the VMs require the services of a Host OS to perform it’s core functions.

“Server Virtualization”, “Server Consolidation”, “Application Consolidation”
are more or less terms used to explain the same concept – i.e. the act of consolidating server based applications to less number of physical machines by running them within VMs. This approach prevents machine sprawl (and hence less manpower costs to administer machines) and reduces costs for power and cooling requirements (to the glee of Green IT enthusiasts) . With the VM machine management tools that vendors are providing today, administration overheads are greatly reduced. With Server Virtualization, disaster recovery, security and high availability - so important to server based applications – are well addressed.

Traditionally, server side deployments have been more with deploying a single application on a given server machine- thus you would have a database server, an email server etc on disparate machines. This has resulted in wastage of computing resources. With Virtual Machines, you can run multiple server side applications cocooned inside VM silos. Even in the case where multiple applications were indeed running in a physical server, a ‘naughty’ application would end up crashing the server and bringing down all other applications with it. A naughty application within a VM however can only bring down it’s VM which would not affect other applications running in their own VM spaces.

The concept of Desktop Virtualization is something that most developers the world over might be considerably familiar with. The facilities provided by products like Microsoft’s Virtual PC fall in this category. Desktop Virtualization helps you test your applications across various operating systems without having to deal with the hassles of procuring separate physical machines. One can also simulate and test various n-tier applications on the same physical machine by running each tier in a VM. Today, the term Desktop Virtualization  is also used to consider the case where an employee’s desktop is now managed and maintained in a central server. The employee can effectively use any device to access their desktop as long as the device is capable is displaying the desktop. This approach provides enhanced security as data is now safe in a central server, control over what employees can access and not access, reduced hardware costs as client machines need not be high end, easier management with patch control not requiring visits to every physical machine etc.

Virtualization has primarily been considered as targeting the server market based on x86 based processors.  But, the concept of SmartPhone Virtualization promises to virtualize a larger market in terms of mobile phones. Mobile hypervisors are being developed that are placed in the stack between the phone application and the device CPU and intercepts instructions and converts to the needs of the device processor. VMWare’s Mobile Virtualization Platform promises to do just this and in the process  applications developed for Nokia phones can be run on Motorala phones for example (as long as the devices are based on the ARM architecture)

While much of the focus in the industry has been in server virtualization, the complexities of managing various types of storage devices and provisioning storage has been a continuous challenge. The concept of Storage Virtualization brings in an abstraction layer to hide applications from storage systems (collections of SAN, NAS, DAS systems etc.) and provides a consistent interface to heterogeneous storage devices and applications. Applications need not be concerned with where and how data is being stored as storage virtualization solutions take up the responsibility of maintaining this data in an appropriate device.  Some intelligent storage solutions have the capability to store data of applications in various class of storage devices (tiered storage) depending on access frequency (faster storage device), security etc.  Storage virtualization solutions from NetApp, VERITAS and Hitachi Data Systems are quite popular in the market today.

Network Virtualization  is another talked about Virtualization concept which seems to be an abstraction that provides a way to run multiple networks (each network possibly configured for a specific purpose) using a shared network. The idea behind this could be to increase the efficiency of a large corporate network or data center. It is also possible to provide a “network in a box” where virtual machines in a single box share resources and exchange data by simulating virtual NICs.  Cisco, HP are major players while VMWare, Microsoft, OpenSolaris etc. have their own network virtualization features in their virtualization offerings.

Virtualization means different things to different people-but at the end of the day it all boils down to achieving substantial cost savings by “doing more with less”. This becomes all the more relevant considering the bleak economic climate as we end the first half of the year. With there being a lot of talk of delivering on the ‘cloud’, and with a lot of CEOs acknowledging the benefits of this changed computing environment all thoughts on achieving the best out of infrastructure lead to Virtualization.


Here’s opening up the post for information regarding other  types of Virtualization that you might have encountered in the industry and would like to mention ……there sure are going to be many more!

While thinking of SaaS, think out of the box!

For the uninitiated - What is this SaaS?

SaaS stands for Software as a Service, though Microsoft prefers to call the same concept ‘Software + Service’. However, at the end of the day, terminologies do not really matter as long as the objective of this model is met – which is to use the required software functionalities in terms of services from the vendor directly without having to consider the burden of hosting/infrastructure and maintenance of that software in the consumer side.  Yes, the concept looks very interesting? Service consumers can consume the required software services without pitching into non-core areas like IT infrastructure maintenance, maintenance of  an additional IT team etc and thus allowing them to concentrate on their Core business areas Definitely it is something very nice to have.

What are the issues then?

The though consumption of software services seems to be easy (as illustrated above), the implementation of these services by ISVs (Independent Software Vendor) or enterprises is quite challenging.  Obviously ISVs will want to get their products to reach a wider audience who might need these functionalities in a different mode/model, especially in those market segments where the hosting/hardware/software and maintenance costs are high which deter customers from investing in them. Such customers (also called consumers)  can pay additional fees for those services which are costly to develop and maintain in-house. In such a scenario, it is a definite challenge for ISVs who have to take care of hosting services on their data centers, and keep maintaining and upgrading both software and infrastructure making sure at the same time that the service fees remain nominal and competent to attract customers/service consumers. This is where the complexity comes into picture. The act of hosting the software for a service is comparatively the easier task. but arriving with right infrastructure and techniques to support required scalability, maintain large data center, take care of security needed on the data of the customers and the infrastructure (because it is open for the globe through internet), how do you take care of support calls required to n-number of customers cost effectively, how do you take care of monitoring and operational needs as required for multi-tenant needs etc etc (list becomes huge as we start thinking more and more, is it not?). These are on the back office or operational side.

This is not enough, the complexity of the software on the architecture and implementation also throws up challenges that I  I term as “Architectural Challenges” with a bias (being an Architect myself, it is of course necessary that I should address or at least put an effort to address these challenges). But it is not an easy task. Architectural challenges for SaaS implementations are a huge mountain with multiple pillars in the form of Scalability, Configurability, Service orientation, Security, Integration and most prominently - multi-tenancy. Please note that this is not an exhaustive list, These are the primary considerations. But at the same time it is important to understand that all other NFR (Non Functional Requirements) such as performance, availability, Back-up recovery etc are considerably challenging to address (as compared to COTS model) because of the increase in customer base, users base and volume of data that will need to be dealt with in this SaaS model (of course no doubt, it also depends on the type of service/software is being referred to).

OOPS! What do we do then?


There are a few successful SaaS model based solutions from various vendors, of which Salesforce.com is a leading example.  But it is also evident that a number of failures in ISVs/Hosted companies occur due to the inability to handle the required aspects of scalability, configurability, integration etc which result in huge implementation and operational cost. The high maintenance and operational costs defeat the objective of SaaS model unless kept well below the mark so as to provide profitable margins. All these aspects are more challenging in a SaaS based solution than a regular product based solution and needs a new perspective to handle these. I will cover some of these important Architectural challenges, required considerations and possible approaches to handle these (as we have much more advanced technologies to handle most of these if we leverage effectively) in the next blog. Happy reading till then.

Globalization of Software in a Flat World

These days you will see numerous articles on how the world is becoming “Flat” and how the playing field is getting leveled. Inspired by Nandan Nilekeni’s quote, Thomas Friedman has written an entire book on this topic. Quoting Friedman “Several technological and political forces have converged, and that has produced a global, Web-enabled playing field that allows for multiple forms of collaboration without regard to geography or distance - or soon, even language.”

All this wouldn’t have been possible without the advancement in technology. In today’s times, businesses are not restricted to any single city, country or continent. The reach of services or products is expanding across the globe and the user base is forever increasing. In such a business scenario where the users or consumers belong to diverse cultures, speak and understand different languages, it is becoming imperative to produce software and offer services which cater to the globalized world.

As the world is getting flatter, it is a business risk for companies to ignore the huge consumer base offered by emerging economies like India and China. Companies can no longer afford to ignore the business potential of such diverse geographic locations. It is no longer enough to be the best in your neighborhood. The market is expanding. Companies have to invest in making their products or applications suitable for use in multiple geographic locations and across multiple cultures and languages.

The concept of Globalization of Software is not new. Companies like Microsoft, Apple, IBM, Oracle etc have realized the potential long back. All these companies have a huge user base thanks to their multi-lingual products which are customized as per the consumer’s location, culture and language. Apple’s iPod probably wouldn’t have found so much success if it had an ‘English only’ user menu, The Windows operating system by Microsoft has a huge user base in non-English speaking countries simply because it has a customized version available for different languages. There are many more examples which all point to the fact that in today’s world, no company worth its salt can ignore the business potential offered by the emerging economies across the globe. 

As globalization increases, the importance of outsourcing cannot be underestimated. Software services based companies have to realize the business potential offered by this growing demand of globalized software. Companies have to invest in imparting the skills required for Internationalization (I18N) and Localization (L10N) of a product or application. They have to come out with offerings which can help product companies across the globe to globalize their products. Software Internationalization and Localization is a very niche area which IT consultancy and services based companies have to tap.

If by now I have managed to convince you as to why there is a need for globalization of software, let me touch upon the key considerations for making software which is ready for global use. Internationalization is the first step towards producing a globally accepted software product. It ensures that the software is ready to be adapted to different languages and cultures without making engineering changes. Localization is the next step to Internationalization. It ensures that the software is customized for a specific region or language by adding locale specific components and translating text. Together, these two steps are sometimes referred to as Globalization (G11N).

One of the key considerations during Internationalization is to write software whose environment can be modified dynamically without the software needing to be recompiled. This means that the software should have an architecture wherein add-ons or plug-ins can be added to the software in order to support a new language or language feature. Any UI specific labels, messages, titles etc should be separated from the application executable. All user displayable text should be moved to a resource bundle or message database which can be translated for all the supported languages without the need to recompile the software. The user interface should be designed in such a way that it supports left to right text and user controls for languages such as German, French etc and also support right to left orientation for languages such as Arabic and Hebrew. Along with this region specific issues such as date/time format, currency format, number format, address format, name format etc must be tackled. Third party integration issues should be handled, help files and application manuals etc should be translated, the software installer itself should support different languages and the same installer should be able to install the software for all the supported languages. In addition to all this database issues related to internationalization and localization must also be addressed. Today when M&A is not very uncommon, we must also understand the integration complexities when software from different geographic locations is required to be integrated. There is a cost and effort associated with making these changes which depends on the level of globalization required.

Most software users expect the software to be written in their own language. Though there is a definite cost to making software available globally, we cannot ignore the long term benefits it offers. If the software is well adapted to the user’s language, the user can understand and use the software better, there will be less customer support issues which indirectly translates to better business. Software globalization can give a product strategic advantage over its competitors in the flat world.

Subscribe to this blog's feed

Follow us on

Blogger Profiles

Infosys on Twitter