Tuesday, November 10, 2009

Utilizing the Power of Web Applications

Application development can improve your business in a variety of ways

Web applications greatly facilitate business decision making, and improve many aspects of how business is done today. The Web is not just a marketing tool for businesses anymore, appropriate use of software can also significantly cut down your business expenses. Web based business applications are software applications that can escalate the reach, integration and efficiency of your business processes. The companies that are employing application development are reducing operating costs, increasing their revenues, and gaining a competitive advantage in the marketplace.

Web applications have the power to streamline business functions, with automatic business generation, supply chain management, database management, and more. It enables businesses to present users with a dynamic website that is capable of delivering the ultimate in customer service. Providing ecommerce solutions and the effective management of online business, companies can attain a global reach and expand exponentially. A database web application serves in business information management, as it enables data to be stored and retrieved whenever and wherever. In addition, new approaches to effective business management have been derived from using databases.

A content management system is an application that makes the authoring and delivery of content easy. You no longer need to have separate software to update your site content, as you can easily make changes in website content with an internet connection. The system facilitates users in building, arranging and maintaining content rich websites with efficiency. Simplifying the web publishing process, content management systems eliminate the need for costly site maintenance, empowering you to manage content by yourself.

Enhancements, customizations, end-to-end implementations, and integration of application development are made possible by the use a software framework. Frameworks are designed to support the development of dynamic websites, applications, and web services. Commonly used platforms such as Java, .NET, and ASP web application frameworks are highly effective and provide many advantages.

Websphere Outsourcing:

The Java 2 Platform, Enterprise Edition (J2EE) features the ultimate in portability, allowing cross-platform communication between multiple types of devices. Many mainframes, computers, mobile phones, and other electronic devices operate using the J2EE web application platform. IBM's WebSphere Application Server is a software application server that works with a number of web servers, and was built using open standards such as Java EE, XML, and Web Services. The WebSphere Application Server V6 Extended Deployment Edition (WebSphere XD) can significantly increase the performance of applications

ASP web application framework is used to build dynamic web sites, applications, and XML web services. It is part of Microsoft's web application .NET platform. The web application .NET framework seamlessly creates applications that are accessible through client machines around the world. ASP.NET VB web application development is particularly popular and is used to build highly effective solutions.

Referring to the Software Outsourcing Company website: http://www.symbyo.com, you will find more information about those technologies.

Tuesday, November 3, 2009

WebSphere Application Server Features

WebSphere Application Server is a platform on which Java-based business applications run. WebSphere Application Server Is an implementation of the Java 2 Enterprise Edition(J2ee) Specification.
WebSphere Application Server provides services (database connectivity, threading, workload management, and so forth) that can be used by the business applications. The main element is the application server, a java process that encapsulates many services, including the containers, where business logic executes. If you are familiar with J2EE, you will recognize the Web Container and the EJB container. The Web container executes Servlets and JavaServer Pages(JSPs), both of which are java classes that generate markup to be viewed by a Web browser. Traffic into and out of the Web Container travels through the embedded HTTP Server. While Servlets and JSPs can act independently, they most commonly make calls to Enterprise Java Beans (EJBs) to executes business logic or access data. EJBs, which run in the EJB container, are easily reusable java classes. They most commonly communicate with a relational database or other external source of application data, either returning that data to the Web container or making changes to the data on behalf of the servlet or JSP.
The JMS messaging engine is built into the application server. This is a pure-java messaging engine. JMS destinations, known as queues and topics provide asynchronous messaging services to the code running inside the containers, JMS will be covered in more depth later in this course.
As you will see in more detail later on, the web services engine enables application components to be exposed as web services, which can be accessed using Simple Object Access Protocol (SOAP).
Several other services run within the application server, including the dynamic cache, data replication, security, and others. These will be covered later in this course.
There are also some important components outside of the application server process.
WebSphere Application Server also provides a plug-in for HTTP servers that determines what HTTP traffic is intended to be handled by WebSphere, and routes the requests to the appropriate server. The plug-in is also a critical player in workload management of HTTP requests, as it can distribute the load to multiple application server, as well as steer traffic away from unavailable servers. It too roads its configuration from a special XML file.
One of the servervices provided within the application server is the admin service. This service allows for the ability to configure the application server. This files necessary for configuration are stored outside of the actual application server in a set of XML configuration files. There is an application that runs within the Web application-the admin console.


WebSphere Architecture Administration
There are two main tools used to administer WebSphere Application Server:1) The Administrative console, and 2) wsadmin command line tool.
The Server's Configuration is stored in a set of XML files, often referred to as the configuration repository. These files define the server itself, as well as resources and services that it provides. One of the services provided within the application server is the admin service. This service allows for the ability to configure the application server. The files necessary for configuration are stored outside of the actual application server in a set of XML configuration files. There is an application that runs within the Web container that provides user the ability to administer the application server via a Web application- the admin console. Here you see the communication from the browser all the way back to the XML configuration files. Wsadmin can be used to administer the application server in two ways. 1) Via SOAP by communicating with the embedded HTTP server. 2) By using RMI (the default) to communicate directly with the admin service.
One of the services provided within the application server is the admin service. This service allows for the ability to configure the application server. The files necessary for configuration are stored outside of the actual application server in a set of XML configuration files. There is an application that runs within the Web container that provides users the ability to administer the application server via a Web application-the admin console.
WebSphere Support :
WebSphere profiles overview
Profiles are the way that you are allowed to run more than one application server on a single installation of WebSphere product files.
Profiles are sets of files that represent a WebSphere Application Server configuration. WebSphere Application Server files are split into two categories. 1) Product files Set of shared read-only static files or product binaries shared by any instances of the WebSphere Application Server product. 2) Configuration files (profiles) Set of user-customizable data files. Files include: WebSphere configuration, installed applications, resource adapters, properties, log files, and so forth. Each profile uses the same product files, Simpler than multiple WebSphere installations, Less disk space, Simplifies application of product updates.
Under the WebSphere installation directory

there are subdirectories for each profile. In the example above there are two application servers running that are each configure by the files that exist within their own profile directory.
Network deployment runtime flow
The main theme with network deployment is distributed applications. While the "flow" of an application remains the same, there are significant additions to runtime of an application. Note the "Load balancer" this allows for multiple HTTP servers, users point there browsers to the load balancer and their request will be work load managed to an HTTP Server. Once the request hits one of these HTTP Servers, the HTTP Server plug-in will load balance the request between the application servers that it is configured to serve. Once the request enters the application server, the flow is identical to how it was in Express and Base. The Java clients requests to EJBs can also be work load managed so that the requests do not all hit one application server.
Network Deployment Administration Flow.
Each managed process, node agent, deployment manager starts with it's own set of configuration files. Deployment manager contains the MASTER configuration and application files. Any changes made at node agent or server level are local and will be overridden by the MASTER configuration at the next synchronization. The administrative console and wsadmin are still the two ways that the environment is administered. However, take note that these tools now talk to the deployment manager and NOT to the application servers directly. The communication of these commands flows from the tools to the deployment manager to the node agents, to the application servers. This allows administration of multiple nodes (each possibly containing multiple application servers) from a single focal point (the deployment manager).
There is ONE main repository for the configuration files within a cell, and those are associated with the deployment manager. All updates to the configuration files should go through the deployment manager. You will see in a moment how this process works. You should be very careful in connecting to an application server directly with wsadmin or the administrative console as any changes that are made to the configuration files are only temporary, they will be overwritten with the configuration files from the MASTER files.
Web Server custom plugin-cfg.xml
Web server definitions are created to allow the mapping of J2EE enterprise applications to specific Web servers. Can be done through the administrative console. Alternatively use the script generated during the installation of the plug-in which can automate the mapping of all the applications to the Web server configure
.bat in
bin. Mapping the applications to specific Web Servers will cause the custom plugin-cfg.xml files for only those Web servers to include the information for those applications. Web servers target specific applications running in a cell. Automatically generated by the deployment manager. Just as modules for an enterprises application need to be mapped to one or more application servers, they also need to be mapped to one or more Web servers.

J2EE Consulting :
J2EE Packaging
A J2EE application is packaged in an Enterprise Archive, a file with a.EAR extension. The application has a deployment descriptor, shown here as DD, allowing configuration to a specific container's environment when deployed. The application can include one or more modules. J2EE components are grouped in modules, and each module has its own deployment descriptor. EJB modules group related EJBs in a single module, and are packaged in Java Archive (JAR) files. Note that there is only deployment descriptor for all of the EJBs in the module. Web modules group servlet class files, JSPs, HTML files and images. They are packaged in Web Application Archive (WAR) files. Application client modules are packaged in Java Archive (JAR) files. Resource Adapters may be packaged to the application server or within an application .EAR file.
Assembling an enterprise application
When working with a workspace handed over by development, no assembly is required (already done automatically by tool). If your developers use IBM tools you may receive an existing, working workspace folder for final configuration and deployment. In this case the individual WAR and JAR files are not required as they already exist as part of the workspace. When working with workspaces all you need to do when starting AST, is point to the root directory of the workspace. If you receive the individual WAR and JAR files, which are the modules for the application, you will need to point AST to an empty workspace which will hold the Enterprise application's workspace. You only do this the first time, thereafter you just point AST to this newly created workspace directory. In this last scenario, assembly is just the action of importing the files containing the modules and associating them with the Enterprise Application. The end result is an EAR file, which contains all the modules and their deployment descriptors. The EAR file can then be installed (or deployed) to an application server.
Creating a data source
Installed applications that must interact with relational databases use JDBC providers for data access. Together, the JDBC provider and data source objects are functionally equivalent to the J2EE Connector architecture (JCA) connection factory (which provides access to non-relational databases). Installed applications use a data source to access the data from the database. A data source is associated with a JDBC provider that supplies the specific JDBC driver implementation class. The data source represents the J2EE Connector Architecture (JCA) connection factory for the relational adapter. Application components use the data source to access connection instances to a specific database; a connection pool is associated with each data source. You can create multiple data sources with different settings, and associate them with the same JDBC provider. (One reason to do this is to provide access to different databases.) JDBC providers that are supported by WebSphere Application Server are required to implement one or both of the following data source interfaces, which are defined by Sun Microsystems. The interfaces enable the application to run in a single-phase or two-phase transaction protocol.
WebSphere Application Server logs
Java virtual machine (JVM) Logs
The JVM logs are created by redirecting the System.out and System.err streams of the JVM to independent log files. WebSphere Application Server writes formatted messages to the System.out stream. In addition, applications and other code can write to these streams using the print() and printIn() methods defined by the streams. In the case of a WebSphere Application Server Network Deployment configuration, JVM logs are also created for the deployment manager and each node agent because they also represent JVMs.
Process Logs
WebSphere Application Server processes contain two output streams that are accessible to native code running in the process. These streams are the stdout and stderr streams. Native code, including Java virtual machines (JVM), might write data to these process streams. In addition, JVM provided System.out and System.err streams can be configured to write their data to these streams also. As with JVM logs, there is a set of process logs for each application server, since each JVM is an operating system process, and in the case of a WebSphere Application Server Network Deployment configuration, a set of process logs for the deployment manager and each node agent.
IBM Service Logs
The IBM Service log contains both the WebSphere Application Server messages that are written to the System.out stream and some special messages that contain extended service information that is normally not of interest, but can be important when analyzing problems. There is one service log for all WebSphere Application Server JVMs on a node, including all application servers. The IBM Service log is maintained in a binary format and requires a special tool to view. This viewer, the AST Log and Trace Analyzer, provides additional diagnostic capabilities. In addition, the binary format provides capabilities that are utilized by IBM support organizations. The HTTP server plug-in log will be covered later in this presentation.
Wsadmin Introduction
Wsadmin provides scripting capabilities and command-line administration. Common operational and configuration tasks can be performed from scripts and the command line instead of through the administrative console. The WebSphere Application Server wsadmin tool provides the ability to execute scripts. You can use the wsadmin tool to manage a WebSphere Application Server V6.1 installation. This tool uses the Bean Scripting Framework (BSF), which supports a variety of scripting languages to configure and control your WebSphere Application Server installation. The wsadmin launcher makes administrative objects available through language specific interfaces. Scripts use these objects for application management, configuration, operational control, and for communication with MBeans running in WebSphere server process. Wsadmin acts as an interface to Java objects for access by scripts. Wsadmin uses the same interface (through JMX) as the administrative console to make configuration changes and control servers
There a many levels that are involed in security an environment. WebSphere only provides part of the total security that needs to be applied. Things like file system security still need to be taken into account to protect things like your configuration files and keyrings. Operating System Security - The security infrastructure of the underlying operating system provides certain security service to the WebSphere Security Application. This includes the file system security support to secure sensitive files in WebSphere product installation. The WebSphere system administrator can configure the product to obtain authentication information directly from the operating system user registry, for example the NT Security Access Manager.
For websphere outsourcing you can take a look at the software outsourcing company website: http://www.symbyo.com

Monday, November 2, 2009

Accessing Data Using Oracle From Non-oracle Databases

There may be some requirements to access the Data residing in different flavors of Databases like MS-SQL, Access, and Sybase from the Oracle database. This can be achieved with the help of creating Heterogeneous Services to connect to non-oracle flavors of the database and also integrate the data residing in them. The HS (Heterogeneous Services) is created with the help of the ODBC drivers for that particular flavor of the database (e.g. For MS-Access we need MS driver for Access). Generic Connectivity is implemented by using a Heterogeneous Services ODBC agent. An ODBC agent is included as part of the Oracle system and is installed in the same ORACLE_HOME and resides in the folder HS.

The following steps needs to be performed in order to configure a Heterogeneous connection in the Oracle Database, those steps are used in big firms as well as Oracle Consulting, Oracle Outsourcing Companies:

1. Preparing the Non-oracle environment from where in the data needs to be integrated into the Oracle database.
2. Creation of the ODBC connection.
3. Test the ODBC drivers to ensure that connectivity is made to the non-Oracle database.
4. Ensure the Global_names parameter in Oracle database is set to False.
5. Configure the Heterogeneous services. This is done with the help of creating an initodbc.ora.
7. Modify the Listener.ora and the TNSNAMES.ORA file so that to connect to the Database.
8. Restart the Listener or START the listener if a new one has been created specific for the new connection.
9. Creation of the Database Link to connect to the HS connection.
10. Test the connection using thee DB Link.

Let us see the above steps in a brief fashion. Here we can consider of having a MS-Access Database from where in the data needs to be accessed into Oracle database:


1. Create the MS-Access database or copy the same to the local server where in the Database is hosted.

2. Create the ODBC connection. This can be done as follows:


Click on START à Control Panel à Administrative Tools and then open Data Sources (ODBC)



Click on the SYSTEM DSN Tab and then click on the ADD button.

Select Microsoft Access Driver (*.mdb) and then click on FINISH.


Also you can find out more at the Software Outsourcing Company website: http://www.symbyo.com

After that, enter the Data source name using which you would like to connect to the MS-Access Database (here in our case it’s ChryslerMDB). Also, select the MS-Access file by clicking on SELECT button and then click on OK to complete the configuration.


1. Check for the connectivity and confirm whether the ODBC connection is working fine.

2. Once this is done, Check for the GLOBAL_NAMES parameter in the Oracle database and make sure that it is FALSE. The following query can be used for the same :


********************************************************************************
SQL> select name,value from v$parameter where name like 'global_names%';
NAME
----------------------------------------------------------------
VALUE
----------------------------------------------------------------------------
global_names
FALSE

SQL>
*******************************************************************************

1. Once this is done, we need to create the INIT.ORA file for the HSODBC connection that needs to be created. This needs to be done in %ORACLE_HOME% oracleora92hsadmin folder. (In UNIX, it will be $ ORACLE_HOME oracleora92hsadmin). Create a file saying init.ora file with the following contents : In our case the file should be named as initchryslermdb.ora


HS_FDS_CONNECT_INFO = chryslermdb
HS_FDS_TRACE_LEVEL = 0
In the above chryslermdb id the non-oracle database connection string or the DSN name that we created in Step 2.


1. Once this is done, the next step is to update the Listener.ORA file. We can use the same listener that is been used by the database to access the ODBC connection or a different one can also be configured. Here we will create a new listener for the ODBC connection.


Edit the Listener.ora file in ORACLE_HOMEora92networkadmin folder and add the following entries :
LISTENER_MSACCESS =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1522))
)
)
)
SID_LIST_LISTENER_MSACCESS =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:oracleora92)
(PROGRAM = extproc)
)

(SID_DESC =
(ORACLE_HOME = C:oracleora92)
(SID_NAME = chryslermdb)
(PROGRAM = HSODBC)
)
)
In the above SID_NAME ChryslerMDB is the SID name that we have given for non-oracle database (e.g. MS-ACCESS or MS-SQL). Once this is done start the Listener by executing the following command at the command line .
C:Documents and SettingsimpactadmDesktop>lsnrctl start listener_msaccess
LSNRCTL for 32-bit Windows: Version 9.2.0.7 - Production on 15-AUG-2007 13
55
(c) Copyright 1998 Oracle Corporation. All rights reserved.
Starting tnslsnr: please wait...
Then the following message will be seen :
STATUS of the LISTENER
------------------------
Alias listener_msaccess
Version TNSLSNR for 32-bit Windows: Version 9.2.0.7 - Pr
tion
Start Date 15-AUG-2007 13:05:56
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File C:oracleora92networkadmin listener.ora
Listener Log File C:oracleora92networkloglistener_msaccess.log
Services Summary...
DEV has 1 service handler(s)
IMPACT02 has 1 service handler(s)
IMPORT_access has 1 service handler(s)
PLSExtProc has 1 service handler(s)
The command completed successfully
C:Documents and SettingsimpactadmDesktop>

Note : If you are using the same listener, then just execute lsnrctl reload command at the command prompt. In case of windows machines, you can just go to SERVICES and restart the listener.
7. The next step is to update the TNSNAMES.ORA file.

Update the TNSNAMES.ORA file with the entries similar to the following :
#ACCESS DB for Chrysler
Chryslermdb.world =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = )
(Port = 1522)
)
)
(CONNECT_DATA = (service_name = chryslermdb)
)
(HS=ok)
)


1. Once the entire configuration is done, check the connectivity by doing a tnsping command.

2. The next step is to create a Database link to this ODBC connection. This can be done by as follows:


Login to the database and execute the following query :
CREATE DATABASE LINK TEST1 CONNECT USING ‘CHRYSLERMDB.WORLD’;
Here TEST1 is the DB Link name and CHRYSLERMDB.WORLD is the name of the DSN entry in the TNSNAMES.ORA file.
Once this is done, we can do any operations on the Non-oracle database by executing the commands from Oracle database. For e.g.
SELECT * FROM DUAL@TEST1;
Note : We have to make sure that the SID name in the TNSNAMES.ORA and LISTENER.ORA and the one in the USING clause of the Create Database Link matches, otherwise we will not be able to connect to the database and will get some errors. Also, the init.ora file at the %ORACLE_HOME% oracleora92hsadmin should be created with the correct SID failing which will lead to errors.

Source: ArticleBase.com

Monday, October 26, 2009

African cos look to ape India's outsourcing story

Emerging African nations of Ghana, Egypt and Nigeria among several others are emulating India software outsourcing success in order to attract outsourcing customers for niche projects by working closely with Indian tech firms and consultants.

While it’s not possible for the African nations to match India’s over $40 billion software
exports industry in terms of the available skilled workforce, which is around 2 million engineers-strong, these countries plan to evolve more as outsourcing destinations for niche projects based on the available skills.

For instance, Uruguay is more focused on analytics outsourcing for pharmaceutical customers, Costa Rica and Jamaica are emerging as nearshore call centre destinations.

“India is our model,” said, Mr Alhassan Umar, director — ITES Secretariat, Ministry of Communication, Ghana. Mr Umar is among many professionals from the region who are currently studying the Indian model.

According to Mr Umar, a team from Ghana had visited the technology park in Hyderabad in order to explore establishing a similar facility in Ghana. “As much as we would like adopt best practices from India, we would also like to avoid some of the pitfalls which India had faced.”

“Egypt is very good in graphics and web design
skills and it was a very pleasant surprise for us,” said the president of management consulting firm .


“There are 10-12 countries in the African continent which could develop a credible IT industry, though none would have the scale of India,” Mr Mukherji said. “We are asking newer destinations to put themselves in the customers’ shoes and justify the reason for outsourcing,” said Avinash Vashishtha, chief executive of offshoring advisory firm.

Countries such as Egypt have already started justifying why customers need to look beyond India. Egypt’s attractive subsidies for creating local employment through incentives including waiver on training and salary costs for new recruits in the IT and back office sector is making it compelling for companies to seriously consider sending more work to the country.
Egypt Software Outsourcing
“Egypt has already reduced taxes from 40% to 20% and ITIDA helps multinationals with incentives like subsidising the training of professionals,” said Dr Hazem Abdulazim, chief executive of the Information Technology Industry Development Agency (ITIDA), Egypt.

Tuesday, April 28, 2009

Mapping Applications to the Cloud

by Darryl Chantry

Summary: As economic pressure builds globally, many organizations are starting to look at Cloud Computing as a potential choice to reduce the total cost of ownership for IT. In searching for ways to use Cloud Computing technologies, enterprises have to ask what applications make good candidates for moving to the Cloud and which do not, such as "Does the nature of the business itself allow for Cloud Computing to even be considered?"
This article provides a broad overview into what Cloud Computing is and discusses an approach to mapping enterprise applications to Cloud Computing platforms to assist in determining whether your applications or your business model are a good fit for the Cloud.

 

 

Which Came First: The Cloud or Cloud Computing?

Cloud computing has fired the imaginations of many informationtechnology (IT) professionals around the world, whether they are small independent software vendors (ISVs), Silicon Valley startups, or large corporations that are looking to cut costs. There seems to be an everincreasing number of people who look to the Cloud to hit upon the magic bullet that will solve any IT problem.

One interesting aspect of the hype that surrounds cloud computing is the lack of a clear definition as to what cloud computing is and, just as relevant, what it is not. If you were to ask 100 people to define the Cloud and what they believe cloud computing is, you would probably get 150 different answers (some people tend to answer twice, with the first answer contradicting the second). With this in mind, it seems only fitting to begin this article by discussing a general definition for cloud computing.

The Cloud (or the Internet, if you prefer) has been around for some time now, about 25 years; so without a doubt, the Cloud came first, right? Well, one could argue that the first servers on the Internet were really storage devices for data and applications to be shared and run globally; or to put it another way, to provide cloud computing resources in multiple locations globally with almost infinite scalability. Contrast that to today’s cloud-computing initiatives that are pretty much there to provide data, applications, and computing power globally with almost infinite scalability, and you quickly see the difference… Or is there really a difference?

The difference is that we are using new technologies to put a new spin on old ideas. Cloud computing is more about evolution than revolution, with technology allowing price points that take these thoughts and make them available to all people — regardless of budget size — via a utilitybased, pay-for-what-you-use model.

Utility Computing

Utility computing refers to using computing resources (infrastructure, storage, core services) in the same way you would use electricity or water; that is, as a metered service in which you only pay for what you use. The utility can eliminate the need to purchase, run, and maintain hardware, server, and application platforms, and to develop core services — for example, billing or security services. Consider the following scenario.

A Web-based ISV that wants to makes components available for Facebook or MySpace faces the following dilemma: The components they create could be adopted by thousands, or could struggle to find acceptance in any form. Most ISVs have limited capital, so they need to balance the expenditure between developing their application and providing infrastructure to support their software.

Such balancing acts can lead to poor applications with good platform support, or great applications that are rarely accessible due to poor platform support. Neither scenario is a path to success; this is where utilitybased cloud platforms can help. Cloud utility platforms can provide a low-cost alternative that can easily scale to meet the demand for the ISV’s application, which allows them to commit practically all of their resources toward building a great application.

As cloud services are essentially available as a utility offering, should the product fail, the ISV can simply shut down the services and stop all costs associated with the software.

The utility model also allows organizations to offset some of the costs of running private data centers by providing additional infrastructure resources to manage peak loads; this is also known as cloud bursting .

Traditionally, to handle peak loading, organizations would often design data centers that had the processing power to manage peak loads; this meant that for the majority of the time the data center was underutilized. By using cloud bursting, an organization can build a data center to the specifications that will allow the entity to run all normal day-to-day workloads within their environment, and then use cloud providers to provide additional resources to manage peak loads.

Utility computing is often associated to some form of virtualized platform that allows for an almost infinite amount of storage and/ or computing power to be made available to the platforms users through larger data centers. The evolution of cloud computing is now broadening the definition of utility computing to include service beyond those of pure infrastructure.

 

 

Will All Applications Move to the Cloud?

Will all applications run in the Cloud? Should you attempt to port all of your existing applications to the Cloud? Should all your new applications be developed in the Cloud? What is this Cloud thing, anyway? These are a few of the questions that arise whenever you start thinking about using cloud services.

Some applications will be ideal candidates to be ported to a cloud platform, developed on a cloud platform, or hosted on a cloud infrastructure, while other applications will be poor cloud candidates. In this case, the standard architectural answer “it depends” can be applied to all of the preceding questions. Practically every application potentially could exist either partially or fully in the Cloud; the only caveat to this are the trade-offs in an application’s attributes — and, possibly, functionality — that you might be willing to make to move it to the Cloud.

The following pages discuss a few ideas for decomposing an application into its basic attributes, and decomposing the Cloud into its basic attributes, to help make decisions as to whether running your specific application in the Cloud is practical.

Mapping an Application to the Cloud

Every application is designed to fulfill some purpose, whether an order management system, flight reservation system, CRM application, or something else. To implement the function of the application, certain attributes need to be present: For example, with an order management system, transaction and locking support might be critical to the application. This would mean that cloud storage might not be suitable as a data store for such a purpose. Determining the key attributes of any application or subsystem of a larger application is a key step in determining whether or not an application is suitable for the Cloud.

 

Figure 1. Attributes map of an application

 

Figure 1 shows a number of key high-level attributes (blue column) that could be relevant to any application. The potential number of attributes for any given application does not need to be recorded; what you are attempting to determine is which attributes are the critical ones for your application. This will likely produce a manageable list of attributes that can then be mapped to the Cloud. Selecting Data Management, for example, presents a list of secondary attributes that provide more details for the high-level attributes. Selecting Access then allows you to specify if you want either online, offline, or both online and offline access to your data source.

Building on the Data Access example, you can start to see how this attribute could affect the choice as to whether or not to use a cloud provider for data storage. Should the application in question need purely online data, cloud storage would be an excellent choice; however, if offline data is all that is required, this could be a key indicator that the application is not suited for the Cloud. And if you decide that the application requires both an online and an offline model, the cost of developing the application to synchronize data between the application and the Cloud would need to be considered.

Choosing to support both an offline and online experience for the end users will add additional cost to the project; however, should another attribute, such as high scalability, be identified, the advantages that the Cloud provides in this area easily could offset the cost of developing an offline experience. (See Appendix A, Sample Application-Mapping Attributes, page 7.)

What Makes Up the Cloud?

After you have decomposed an application and determined its key attributes, you can begin work on a similar exercise for the Cloud — specifically, for cloud service providers. Splitting cloud attributes into broad categories can simplify the mapping process. The categories used in this example are cloud infrastructure, cloud storage, cloud platform, cloud applications, and core cloud services.

You could map any application attributes to cloud attributes in one or more categories, as depicted in Figure 2.

 

Figure 2. Mapping application attributes to cloud attributes

 

Cloud Infrastructure

Cloud infrastructure is infrastructure, or more commonly, virtual servers in the Cloud. Infrastructure offerings are the horsepower behind large-scale processes or applications. For large-scale applications, think Facebook or MySpace; for large-scale processing, think a high-performance infrastructure cluster that is running engineering stress-test simulations for aircraft or automobile manufacturing.

The primary vehicle for cloud infrastructure is virtualization; more specifically, running virtual servers in large data centers, thereby removing the need to buy and maintain expensive hardware, and taking advantages of economies of scale by sharing Infrastructure resources. Virtualization platforms are typically either full virtualization or para-virtualization environments. (See Appendix B for a more detailed explanation of virtualization, page 8.)

Cloud Storage

Cloud storage refers to any type of data storage that resides in the Cloud, including: services that provide database-like functionality; unstructured data services (file storage of digital media, for example); data synchronization services; or Network Attached Storage (NAS) services. Data services are often consumed in a pay-as-you-go model or, in this case, a payper- GB model (including both stored and transferred data).

Cloud storage offers a number of benefits, such as the ability to store and retrieve large amounts of data in any location at any time. Data storage services are fast, inexpensive, and almost infinitely scalable; however, reliability can be an issue, as even the best services do sometimes fail. Transaction support is also an issue with cloud-based storage systems, a significant problem that needs to be addressed for storage services to be widely used in the enterprise.

Cloud Platform

A cloud platform is really the ability to build, test, deploy, run, and manage applications in the Cloud. Cloud platforms offer alternatives to these actions; for example, the build experience might be online only, offline only, or a combination of the two, while tools for testing applications might be nonexistent on some platforms, yet superb on others.

Cloud platforms as a general rule are low-cost, highly scalable hosting/development environments for Web-based applications and services. It is feasible (although an oversimplification) to consider cloud platforms as an advanced form of Web hosting, with more scalability and availability than the average Web host. There are pros and cons for any technology, and a con in the cloud platform world is portability. As soon as an application is developed to run on a specific platform, moving it to another cloud platform or back to a traditional hosting environment is not really an option.

Cloud Applications

A cloud application exists either partially or fully within the Cloud, and uses cloud services to implement core features within the application. The architecture of cloud applications can differ significantly from traditional application models and, as such, implementing cloud applications can require a fundamental shift in application-design thought processes.

Cloud applications can often eliminate the need to install and run the application locally, thereby reducing the expenditure required for software maintenance, deployment, management, and support. This type of application would be considered a Software as a Service (SaaS) application.

An alternative to this would be the Software plus Services (S+S) model. This is the hybrid between traditional application development and a full SaaS implementation. S+S applications typically use rich client applications that are installed on a client’s PC as an interface into externally hosted services. S+S often includes the ability to interact with an application in an offline mode, and sync back to a central service when required.

Core Cloud Services

Core cloud services are services that support cloud-based solutions, such as identity management, service-to-service integration, mapping, billing/ payment systems, search, messaging, business process management, workflow, and so on. Core cloud services can be consumed directly by an individual, or indirectly through system-to-system integration.

The evolution of core cloud services potentially will mimic that of the telecommunications industry, with many services falling under the categories of Business Support Systems (BSS) or Operational Support Systems (OSS).

BSS services manage the interactions, with customers typically handling tasks such as:

  • Taking orders
  • Processing bills
  • Collecting payments.

OSS services manage the service itself and are responsible for items such as:

  • Service monitoring
  • Service provisioning
  • Service configuration.

Attributes Map for Cloud Services

By using the five cloud categories, we can now develop a set of attributes for each of the categories. These attributes can be used in two ways:

  • Mapping your application’s attributes to cloud attributes to validate whether cloud services are suitable for your application, and identifying which types of services to use
  • Evaluating cloud service providers as possible candidates for hosting your applications, identifying which types of services are available from your chosen provider(s), and then determining specific implementation attributes of the services offered.

 

Figure 3. Five cloud categories and attributes for cloud storage

 

Figure 3 shows the five cloud categories and a list of attributes for the cloud-storage category. Each cloud provider implements its cloud services in a slightly different way, with companies like Microsoft offering a number of different storage alternatives that developers can choose to use, depending on the required features, for a specific application.

Just like application attributes, cloud attributes must be weighed carefully when determining whether a cloud provider’s services are a good fit for your needs, as you will have to factor in implementation cost for each decision you make. (See Appendix A, Sample Cloud- Mapping Attributes, page 8.)

Overlaying the Cloud and Applications

Now that you have a complete understanding of the application and of what cloud services you could use to implement a solution, you can now start to make decisions about what the eventual architecture could be. Should you find that the Cloud is a viable and cost-effective alternative to traditional application architecture, the next step would be to choose the most suitable cloud provider(s) for the application.

It is quite possible that no single vendor would match completely with your requirements; however, you might find that you can obtain all of the services that your application requires from multiple vendors.

 

Figure 4. Single application that uses multiple cloud services and vendors

 

Figure 4 depicts an application that uses a number of cloud services, from multiple cloud providers. The preceding example could represent an application that is built in ASP.NET and is running on the Azure platform (cloud platform); however, the application also needs components with full trust, which means that the components can run only in a full virtual environment (cloud infrastructure). Data is stored in a Microsoft cloud (cloud storage), with services such as Workflow and Identity (core cloud services) also provided via Azure. The last requirement for the application could be a billing/payment service (core cloud services), which could be provided by another cloud provider.

Although this scenario is feasible, the costs that are associated with having accounts with multiple providers, using a number of APIs, and then integrating all of the services into an application could be impractical. The likely solution would be to find a single vendor that delivers the majority of the services that are required by your application, and use this as the base platform for a hybrid solution.

 

 

One CloudOne Cloud to Rule Them All

Is there one cloud, or are there multiples clouds? This is a debate that I have heard a number of times already. One side of this argument is public versus private clouds. Can a private implementation of cloud technologies be called a cloud at all, or is it something else? Are all of the public cloud offerings the same? And what about applications or systems that span both private and public clouds in a hybrid model? Where do these fit?

The honest answer is that the argument is irrelevant. Whether you subscribe to one theory or another, the desired outcome is the same: Build the most cost-effective system that you can that works. The previous section looked at ideas to help you make decisions; now, we will take a quick look at potential applications that could exist in the Cloud or as part of a hybrid cloud solution.

Architecting Solutions in the Cloud

This section describes three application scenarios for which solutions could be implemented by using cloud services. The following scenarios are by no means an extensive list of possible solutions that are suitable for cloud services; they are only indications of applications that could be feasible.

Ticketing System

When discussing the benefits of a cloud infrastructure, there seems to be a consensus that a concert ticketing system would make an ideal candidate for a cloud scenario (Figure 5). On the surface, this type of application looks like a viable candidate; ticketing systems are often subject to high demand over a short period of time (people scrambling to buy tickets for a concert or sporting event that will sell out rapidly). This is often followed by long periods of low to moderate activity.

 

Figure 5. Using cloud infrastructure for ticketing system

 

Ticketing applications are often overloaded during the periods of high demand, when the need for computing resources is extremely high. The ability to run up instances of virtual machines to cover such periods would be beneficial. There are, however, a number of issues that must be taken into account before architecting such a solution:

  • Ticketing systems are data intensive and highly transactional. Transactions can be required for the payments system as well as to reserve specific seats for a given event.
  • Personally identifying information is almost certain to be collected, with many customers having an account with the ticketing company or, potentially, wanting to create an account with the organization.
  • Validating credit-card payments can be time consuming, and is a potential source of bottlenecks in the ticketing process.
  • Some virtual cloud-server platforms cannot save state, which means that once a server image is shut down, all changes or additions to data that is stored within the image are lost.
  • Existing ticketing companies already will have significant investment in infrastructure and data management.
  • Depending on the cloud service that is chosen, virtual cloud-server images that are not able to save state will need to be recreated for every event, which could well result in a significant amount of work being required to prepare an environment for each new instance.

With all of this in mind, there are a number of ways to use a cloud service to reduce the demand on an existing system during a peak loading time:

  • Duplicate the internal system completely. This would require the most amount of work; once the application is ready to use, it still would need to be synchronized with the current system for every new instance. Permanently leaving the system on (even in a reduced capacity) could be expensive due to the cost of using a services platform.
  • Split the workload between internal systems and a cloud service in real time. This would involve splitting the process of selecting seats and purchasing tickets across the two environments; for example, the transaction could begin on the internal ticketing system where customers log into their account, select the event they wish to attend, select the seats, and then are passed off to a cloud service for final processing of payment. This would mean creating a virtual cloud server that simply completes the final stage of processing and, as such, would not need to be synchronized with the main system — effectively being a stateless processing engine. Only minimal data would need to be transferred to the cloud service, and credit-card information could be collected on the external system for single use and then deleted.
  • Split the workload between internal systems using batch processing. Similarly to the preceding processing method, this method would differ in that all personal information would be collected on the internal system, including Cc: details. This information then could be placed in a process queue and shipped in batches to the cloud service for processing. This would mean that should payment fail, a secondary process for contacting the person who is attempting to purchase the tickets would need to be implemented if it does not already exist.

The preceding solutions are examples of how a ticketing system could split processing between a cloud service and a company’s internal systems during periods of heavy use.

Photo/Video Processing

This example shows how you can combine multiple services (infrastructure, storage, and queuing) to provide a solution for data processing (Figure 6). In this scenario there are a chain of photo processing stores that make use of the cloud service to render or reformat digital media files.

 

Figure 6. Using cloud infrastructure for photo/video processing

 

The photo chain has a number of stores spread across the U.S. and wishes to centralize large image and video processing to reduce two aspects of the system: the amount of hardware in each store; and the complexity of maintaining and supporting the hardware.

When a customer comes into a store with a video that needs to be converted to a different format, the video file is first uploaded to a storage service, and then a message is placed in a queue service that a file is on the storage platform and needs to be converted to a different format. An application controller that is running computer instances receives the message from the queue, and then either uses an existing instance of a virtual machine, or creates a new instance, to handle the reformatting of the video. As soon as this process is complete, the controller places a message in the queue to notify the store that the project is complete.

The preceding scenario easily can be converted to an online experience, so that customers could upload files for processing without having to go to a physical location.

Web Site Peak Loading

The final example that I will use is that of a Web site that has an extremely high amount of traffic on an irregular basis, which makes it impractical to build out the hosting infrastructure to support such peaks (Figure 7). Such sites could be news sites with breaking stories, game sites announcing a new game, or movie sites showing trailers of the next blockbuster.

 

Figure 7. Using cloud infrastructure for peak load coverage

 

The solution to this scenario involves creating a complete copy of the company’s Web site, or the part of the Web site that will experience the heavy traffic, on a cloud-service infrastructure service. The copy of the site would be a static instance running across a number of Web servers that could be configured as either a load-balanced set of servers or as a cluster. You can make any changes you need to on the original Web site, and then synchronize them back to the cloud servers. This would create latency, but would greatly reduce the effort needed to maintain the Web servers and Web sites, and would eliminate the problem of maintaining state between the internally and externally hosted Web sites.

There are many ways to architect solutions for the preceding scenarios, as there are many more scenarios in which you can use a cloud service. The goal of this article is merely to highlight a few of the alternatives and uses for the services that are emerging.

 

 

Conclusion

The fascination of the Cloud and cloud technologies is driving many developers, ISVs, start-ups, and enterprises to scrutinize cloud services and assess their suitability for adoption. The promises of lower cost of ownership — and of almost limitless scalability, in both storage and infrastructure power — are hard to ignore. The promise of the Cloud definitely warrants inspection; however, you must manage the adoption of cloud services carefully and realize that not all applications are suited for the Cloud. Many applications will work in the Cloud; however, hidden costs of hosting some solutions in the Cloud could see projects being delivered with much higher development and running costs than would be true of more traditional and well-defined architectures and technologies.

 

 

Appendix A


 

 

Appendix B

Cloud-Infrastructure Platforms and Virtualization Types

One of the key enabling-technologies for cloud-computing platforms is virtualization, which is the ability to provide an abstraction of computing resources. When we look at cloud-infrastructure platforms as they stand today, they predominately come in two flavors: fully virtualized or paravirtualized environments.

There are many more variations to virtualization than the two that I have just mentioned; so, for this post, I thought that I would discuss some of the virtualization methods that exist and that could well find their way into a cloud-infrastructure offering.

Emulation

In this type of virtualization, the virtual environment emulates a hardware architecture that an unmodified guest operating system (OS) requires. One of the common instances in which you encounter emulated hardware is with mobile devices. Application developers will use an emulated environment to test applications that are designed to run on smart phones or on PDAs, for example. (See Figure 8.)

 

Figure 8. Emulated-virtualization environment

 

Pros: Simulates a hardware environment, which is completely different from the underlying hardware. An example of this would be a mobile device such as a smart phone emulated on a desktop PC.

Cons: Poor performance and high resource usage.

Full Virtualization

In full virtualization, an image of a complete unmodified guest OS is made and run within a virtualized environment. The difference between full virtualization and emulation is that all of the virtualized guests run on the same hardware architecture. All of the guests support the same hardware, which allows the guest to execute many instructions directly on the hardware—thereby, providing improved performance. (See Figure 9.)

 

Figure 9. Full-virtualization environment

 

Pros: The ability to run multiple OS versions from multiple vendors: Microsoft Windows Server 2003, Windows Server 2008, Linux, and UNIX, for example.

Cons: Virtualized images are complete OS installations and can be extremely large files. Significant performance hits can occur (particularly on commodity hardware), and input/output operationintensive applications can be adversely effected in such environments.

Para-Virtualization

In para-virtualization, a hypervisor exports a modified copy of the physical hardware. The exported layer has the same architecture as the server hardware. However, specific modifications are made to this layer that allow the guest OS to perform at near-native speeds. To take advantage of these modified calls, the guest OS is required to have small modifications made to it. For example, you might modify the guest OS to use a hypercall that provides the same functionality that you would expect from the physical hardware. However, by using the hypercall, the guest is significantly more efficient when it is run in a virtualized environment. (See Figure 10.)

 

Figure 10. Para-virtualization environment

 

Pros: Lightweight and fast. Image sizes are significantly smaller, and performance can reach near-native speeds. Allows for the virtualization of architectures that would not normally support full virtualization.

Cons: Requires modifications to the guest OS, which allows the OS to support hypercalls over native functions.

OS-Level Virtualization

In OS virtualization, there is no virtual machine; the virtualization is done completely within a single OS. The guest systems share common features and drivers of the underlying OS, while looking and feeling like completely separate computers. Each guest instance will have its own file system, IP address, and server configuration, and will run completely different applications. (See Figure 11.)

 

OS-virtualization environment

Figure 11. OS-virtualization environment

 

Pros: Fast, lightweight, and efficient, with the ability to support a large number of virtual instances.

Cons: Isolation of instances and security concerns around data are significant issues. All virtual instances must support the same OS.

Application Virtualization

Application virtualization, as with any other type of virtualization, requires a virtualization layer to be present. The virtualization layer intercepts all calls that are made by the virtualized application to the underlying file systems, redirecting calls to a virtual location. The application is completely abstracted from the physical platform and interacts only with the virtualization layer. This allows applications that are incompatible with each other to be run side by side: Microsoft Internet Information Services 4.0, 5.0, and 6.0 all could run side-by-side, for example. This would also improve the portability of applications by allowing them to run seamlessly on an OS for which they were not designed. (See Figure 12.)

 

Figure 12. Application-virtualization environment

 

Pros: Improves the portability of applications, allowing them to run in different operating environments. Allows incompatible applications to run side by side. Allows accelerated application deployment through on-demand application streaming.

Cons: Overhead of supporting a virtual machine can lead to much slower execution of applications, in both run-time and native environments. Not all software can be virtualized, so is not a complete solution.