Monday, November 29, 2010

Difference between an application server and a Web server

What is the difference between an application server and a Web server?
Taking a big step back, a Web server serves pages for viewing in a Web browser, while an application server provides methods that client applications can call। A little more precisely, you can say that:
A Web server exclusively handles HTTP requests, whereas an application server serves business logic to application programs through any number of protocols।

Let's examine each in more detail.

The Web server
A Web server handles the HTTP protocol। When the Web server receives an HTTP request, it responds with an HTTP response, such as sending back an HTML page. To process a request, a Web server may respond with a static HTML page or image, send a redirect, or delegate the dynamic response generation to some other program such as CGI scripts, JSPs (JavaServer Pages), servlets, ASPs (Active Server Pages), server-side JavaScripts, or some other server-side technology. Whatever their purpose, such server-side programs generate a response, most often in HTML, for viewing in a Web browser.

Understand that a Web server's delegation model is fairly simple। When a request comes into the Web server, the Web server simply passes the request to the program best able to handle it. The Web server doesn't provide any functionality beyond simply providing an environment in which the server-side program can execute and pass back the generated responses. The server-side program usually provides for itself such functions as transaction processing, database connectivity, and messaging.

While a Web server may not itself support transactions or database connection pooling, it may employ various strategies for fault tolerance and scalability such as load balancing, caching, and clustering—features oftentimes erroneously assigned as features reserved only for application servers।

The application server
As for the application server, according to our definition, an application server exposes business logic to client applications through various protocols, possibly including HTTP। While a Web server mainly deals with sending HTML for display in a Web browser, an application server provides access to business logic for use by client application programs. The application program can use this logic just as it would call a method on an object (or a function in the procedural world).

Such application server clients can include GUIs (graphical user interface) running on a PC, a Web server, or even other application servers। The information traveling back and forth between an application server and its client is not restricted to simple display markup. Instead, the information is program logic. Since the logic takes the form of data and method calls and not static HTML, the client can employ the exposed business logic however it wants.

In most cases, the server exposes this business logic through a component API, such as the EJB (Enterprise JavaBean) component model found on J2EE (Java 2 Platform, Enterprise Edition) application servers। Moreover, the application server manages its own resources. Such gate-keeping duties include security, transaction processing, resource pooling, and messaging. Like a Web server, an application server may also employ various scalability and fault-tolerance techniques.

An example
As an example, consider an online store that provides real-time pricing and availability information. Most likely, the site will provide a form with which you can choose a product. When you submit your query, the site performs a lookup and returns the results embedded within an HTML page. The site may implement this functionality in numerous ways. I'll show you one scenario that doesn't use an application server and another that does. Seeing how these scenarios differ will help you to see the application server's function.

Scenario 1: Web server without an application server
In the first scenario, a Web server alone provides the online store's functionality। The Web server takes your request, then passes it to a server-side program able to handle the request. The server-side program looks up the pricing information from a database or a flat file. Once retrieved, the server-side program uses the information to formulate the HTML response, then the Web server sends it back to your Web browser.

To summarize, a Web server simply processes HTTP requests by responding with HTML pages।

Scenario 2: Web server with an application server
Scenario 2 resembles Scenario 1 in that the Web server still delegates the response generation to a script। However, you can now put the business logic for the pricing lookup onto an application server. With that change, instead of the script knowing how to look up the data and formulate a response, the script can simply call the application server's lookup service. The script can then use the service's result when the script generates its HTML response.

In this scenario, the application server serves the business logic for looking up a product's pricing information। That functionality doesn't say anything about display or how the client must use the information. Instead, the client and application server send data back and forth. When a client calls the application server's lookup service, the service simply looks up the information and returns it to the client.

By separating the pricing logic from the HTML response-generating code, the pricing logic becomes far more reusable between applications. A second client, such as a cash register, could also call the same service as a clerk checks out a customer. In contrast, in Scenario 1 the pricing lookup service is not reusable because the information is embedded within the HTML page.
To summarize, in Scenario 2's model, the Web server handles HTTP requests by replying with an HTML page while the application server serves application logic by processing pricing and availability requests।

CaveatsRecently, XML Web services have blurred the line between application servers and Web servers। By passing an XML payload to a Web server, the Web server can now process the data and respond much as application servers have in the past.

Additionally, most application servers also contain a Web server, meaning you can consider a Web server a subset of an application server। While application servers contain Web server functionality, developers rarely deploy application servers in that capacity. Instead, when needed, they often deploy standalone Web servers in tandem with application servers. Such a separation of functionality aids performance (simple Web requests won't impact application server performance), deployment configuration (dedicated Web servers, clustering, and so on), and allows for best-of-breed product selection.
Dinesh Omkar

Thursday, February 18, 2010

Server Performance Monitoring

What is server monitoring?
Performance Testing is not just testing. As mentioned earlier, it is the process of identifying the performance issues. Well, if you identified that performance is poor, what will be the next step? Obviously it is to find out why performance is poor. Monitoring is used for that purpose. In other words, it is to identify what performance factor is the root cause of the problem. Or it is used to find out the performance bottlenecks.

What to monitor?
Resources and application code. It is otherwise called as
Resource monitoring
Application profiling
Resource monitoring further can be divided into two. First one is hardware resource monitoring. Example is CPU, Memory. This will give the overall capacity of the server hardware. The second one is software resource monitoring. Example is Number of threads, Memory Heap used by Application server software. Application profiling is technique to find out the piece of code which is taking more time. Example: HP .Net, Java Diagnostics. Following sections will explain some of the common monitors which can be used.


The hardware resource monitoring to 2 categories based on the server Operating System. One is Windows based servers and the second one is Unix based.



Windows Monitoring
Perfmon is a single point solution for almost all the resource monitoring in Windows servers including application servers like Internet Information Server (IIS). It can be used to view and log the server statistics. It is part of Windows OS and need not be installed separately. That means in all the Windows computers including PCs, you can find this tool.
Following are the some of the counters and how they help to identify the performance bottlenecks. Please refer the perfmon help page in windows for setup and more details.


%Processor Time – It shows the total CPU utilization of the Windows server. If there are multiple CPUs in the server, this will give an average of all the processor utilization. CPU Utilization consistently above 85 % can be considered as CPU bottleneck. Again, many people confuse with CPU spikes. Intermittent CPU spikes may not be a concern, but if it is with too short interval or showing consistencies, it will be a problem.


Processor Queue Length – It is the number of threads waiting to get CPU time. As name says if the there are more threads waiting, it shows CPU is more busy. The value of this counter more than 2 times the number of CPUs in the server is an indicator of CPU bottleneck. But always try combine with CPU utilization to conclude the CPU issues.


Available MBytes – It will give the measure of available physical memory in Mega Bytes. During long running endurance tests, if the available memory going down over a period of time even with constant user load, it is good indicator of memory leak in the server.


Pages/sec – Along with Available Mbytes, this counter will give useful information on systems memory usage. If pages/sec is more, it is an indicator of lack of physical memory. There can be situations where Pages/sec shows huge values even with lot of physical memory. These issues can be seen when new processes are creating in the server. One of the classic examples is when users are logging into the Citrix servers. It can not be an indicator of memory shortage and can be due to memory mapped files. Please refer Microsoft documentation for more details.


Private bytes – It shows the dedicate memory of a windows process. It should be monitored to find out the memory usage of a process. Increase in memory usage over a period of time is a good indicator of memory leak. This can be combined with memory utilization to come to final conclusion.



More details on monitoring is coming soon.....
Dinesh

Friday, August 21, 2009

Load Testing

Scalability is the process of generating the maximum number of virtual users that can be run on a single machine before exceeding the machine’s capacity.

Performance testing is the process of determining the speed or effectiveness of a computer, network, software program or device.

Reliability is an attribute of any computer-related component (software, or hardware, or a network, for example) that consistently performs according to its specifications