Thursday, September 10, 2009

Why will Java survive?

A friend of mine, who has started working on .NET based project, raised concerned over survivability of Java, which prompted me to highlights key pillars for Java, which will keep it ahead from others:
1. Being an open-source language, there is no vendor lockin like Microsoft. There are 100+ companies surviving on open nature of Java namely JBOSS, APACHE, etc. Also, big companies like IBM, ORACLE, BEA have 1000+ products based on Java technologies.
2. Frameworks - Struts/Spring/Wicket and there are so many frameworks offered by Java technologies as compared to Microsoft single .NET framework. It gives flexibility and choice in choosing competing “state-of-the-art” products.
3. New Languages - As new languages like Ruby, Python, PHP are coming up, JAVA's open-source approach enabled competing JAVA based version of these like JRuby, SCALA, JPython.
4.Faster Development with IDEs- Eclipse, RAD, JBuilder, NetBeans, TogetherJ and there are so many IDEs now offering Wizard-based Web Services, EJB, etc. development and makes life easier.
5. Clustering/High Availability & other non-functional requirements support- Java based enterprise servers not only offer range of products but also there are specialized companies like "TERACOTTA" especially for faster & optimized clustering.
6. Open Specification based Technologies - All Java technologies (Servlet, JSP, JMX, EJB, JTA, JTS, JMS, JAXB, JDBC, JAAS, JMX, JSTL, JCA, JavaSpaces, JavaFX, JSF, etc.) are based on open-specifications (JSRs) developed in accordance with major industry players like Sun, Oracle, IBM, BEA and hence the “collaborative approach” of “mutual knowledge sharing” has higher chances of success in future.
7. Hardware devices for Java - Java based hardware devices (like Azul Vega 3300,7300 Series, inSilicon JVX Accelerator)  are also present in market strengthening its present & future.
8. Java “everywhere” – Java is not limited to server or desktop technology; it has made a bigger presence in mobile devices & others.
9. Last but not least, Java is portable & supported on multiple operating systems like Unix, Linux, Solaris, Windows, etc.
Disclaimer:
All data and information provided on this site is for informational purposes only. This site makes no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis.This is a personal weblog. The opinions expressed here represent my own and not those of my employer or any other organization.

Monday, August 24, 2009

Virtualization Explained (for x86 based system) - Server Virtualization

Virtualization can be applied to any specific hardware (CPU, storage, memory, network, etc) through the use of software/hardware and it has been part of our lives for a very long time (think of using Virtual Page File in Windows or JVM of Java). But in today’s world and in coming future, it will be “most talked/hyped term” in IT field, specially in relation to Cloud Computing.
Virtualization is one of the key enablers for “Cloud Computing” and because of Virtualization of CPU for x86 based architecture in this decade, it has gained popularity.
(Please note that historically IBM has coined “Virtualization” term in early 70’s for their p-series and i-series based systems)
Though there are no such standards in classifying Virtualization for CPU, the most popular techniques/categories are as follows implemented using Hypervisor or VMM:
Þ       OS assisted virtualization or para-virtualization
Þ       Full virtualization
Þ       Hardware assisted virtualization
Note:
Virtual Machine Monitor (VMM) or Hypervisor – A software layer which lies between hardware (or metal as called by hardware techies) and one or more operating systems. In simple terms, Hypervisor is the software enabler for virtualization.
OS assisted virtualization or para-virtualization
 
As it suggests, this technique depends on support from Operating System for virtualization and hence OS kernel needs to be modified for this purpose. Clearly, Windows OS (XP, Vista) will not be supported because they can not be modified because of closed-source development model.
Modified OS kernel replaces non-virtualized instructions from user applications to hypercalls understandable by hypervisor, which communicates with hardware-layer.
Mostly, all para-virtualization based virtualization solutions are using Xen (an open source para-virtualizer). 
 
Advantages:
Better Performance & Efficiency
Disadvantages:
Security Concerns (because of OS kernel modification), Less support from closed-source OS like Windows, High maintenance cost (upgrades)


Full virtualization
Full virtualization does not modify guest Operating System rather it uses Binary Translation for non-virtualized instructions and direct execution for virtualized instructions. Guest OS is not even aware that it is being virtualized.
Full virtualization is the only solution if situation warrants no hardware assist or operating system assistance.
Advantages:
Best Isolation & Security. Simplifies migration & portability as no OS modification is needed.
Disadvantages:
Slower in comparison to para-virtualization
 
Hardware assisted virtualization (or accelerated virtualization)
Hardware-assisted virtualization was not possible for x86-architecture till 2006 and that was the main reason for emergence full-virtualization and para-virtualization techniques for x-86 architecture, which rely on software for virtualization.
Hardware vendors (e.g. Intel VT, AMD-V) are key enablers in hardware virtualization for. It gives best performance among all virtualization techniques.
Virtualization can broadly classified into two segments – Desktop Virtualization (or Virtual Desktop Infrastructure, VDI) & Server Virtualization
This article discussed only Server Virtualization using Hypervisor.
Server Virtualization can also be achieved using following other techniques:
1. Guest OS Virtualization - Installing Virtualization Software on Operating System and then creating one or many Virtual Machines
2. Kernel Virtualization - Generally applicable to Linux/Unix modified Kernel

Also, Hypervisors are generally classified as follows:
  • Type 1 (or bare metal) - VMM in Ring 0, Guest OS in Ring 1 e.g. VMware ESX
  • Type 2 (or hosted) - Host OS in Ring 0, VMM in Ring 1 e.g. VMware Server (earlier called as GSX)
  • Hybrid - Host OS (Kernel mode) & VMM co-exists in Ring 0
Leading Vendors for Server Virtualization
VMware (Leader & most promising in Server Virtualization with market share > 80%) – ESX, GSX (free to use license)
Virtualiron (acquired by Oracle, Xen based)
Citrix (Desktop Virtualization is Core Business; emerging leader in Server Virtualization specially after acquiring XenSource in 2007)
ORACLE (strengthening their virtualization stack with free to use license, Xen-based)   
SUN (innovative & renowned in Server Virtualization with Solaris Zones, LDOM)
IBM (early providers of virtualization with their proprietary architecture, p-series, i-series)
Microsoft (emerging leader with their Hyper-V technology in Windows Server 2008)
RedHat (Xen-based, claims to provide first product to deliver commercial quality open source virtualization)

In terms of core technology point of view, in essence, there are only 2 major ways world is leading towards providing server virtualization:
  • Xen-based (open source)
  • VMware based (closed source)
Feel free to discuss it further in more detail.
Disclaimer:
All data and information provided on this site is for informational purposes only. This site makes no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis.This is a personal weblog. The opinions expressed here represent my own and not those of my employer or any other organization.

Tuesday, July 14, 2009

Scalability – The simple explanation

Scalability is not a newly coined term; hence this article does not try to explain “scalability” in general rather it focuses on terms generally attached to it by technocrats.

To start with, let me give a simple definition of scalability:
“Scalability is the ability of the software system to graciously accommodate increasing demand without making any modifications to the system itself; also without compromising system’s performance, reliability and availability”

Scalability has two distinct flavors:
• Vertical Scalability – where you increase resources (cpu, memory, disk, etc) on the same box. For example, by expanding storage by adding RAID/SAN
• Horizontal Scalability – where you increase “units of resources (server box)”. For example, in clustering environment, adding hardware Load Balancers, Firewalls, Web Servers, App Servers.
The other term technocrats coined these days is Linear Scalability.

Linear Scalability
To understand Linear Scalability, you need to first understand “Scalability Factor”. For example, if scalability factor is “0.8” then you add “2 new CPU units”, you will be able to take advantage of “2 units x 0.8” of total processing capacity. In other words, you loose 20% of processing power on addition of each unit.

A True Linear Scalable system will have scalability factor of “1” (meaning scalability factor is always constant); hence you will be able to take 100% advantage or capacity of increased resources.
For example, SBA (Space Based Architecture) systems, like GigaSpaces, offers true Linear Scalability.

Levels of Scalability
Scalability also needs consideration at many levels:
• Firewalls (single firewall may cause delays)
• Web (or HTTP) Server
• Hardware-level Scalability (Load Balancers, IP Sprayers)
• Application Servers (special COTS like Teraacotta for special handling of scalability or GigaSpaces XP Server)
• Component Level Scalability (ex EJB)
• Database Level Scalability

The most important point while considering the level of scalablity required in your software system is to identify the number and growth rate of prospective users (concurrent or others) of your system in the future.

Disclaimer:
All data and information provided on this site is for informational purposes only. This site makes no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis.This is a personal weblog. The opinions expressed here represent my own and not those of my employer or any other organization.