There have recently been a spate of articles and blogs that are attempting to create a contest between “Network Performance Management” tools and “Application Performance Management” tools. This includes a Network Computing survey that finds fault with APM solutions, and a SOA World Magazine comparison that tries to compare the two types of solutions. This is silly and unproductive. It is far more productive to approach this problem from the perspectives of what your needs and applications look like.
Who Are You?
The first question that you have to ask when looking at these kinds of tools is whose problem (yours) are you trying to solve, and therefore if this is your problem, from what perspective are you coming. Here are some important guidelines:
- If you run a team that develops custom applications and that team (or a part of it) is also responsible for supporting those applications in production then you need a tool that is oriented towards helping you put fewer bugs in production and when you do have a bug in production, give you the data you need to fix it as rapidly as possible. So if this is who you are then you need an APM solution that is all about monitoring the operation of code in production.
- If you work for a company where the “application is the company, and the company is the application” then a lot is going to depend upon your role. If you are responsible for the operation of the code in production then your needs are going to be almost identical to the developer team discussed in the first bullet above. If you are in IT Operations, and you support the infrastructure for the application but not the application itself, then your needs are going to be very much like the bullet directly below.
- If you are Application Operations, the team that supports multiple applications in production, spanning both purchased and custom developed applications then a solutions focused upon code is not for you. For purchased applications you do not have the code. For custom developed applications the code is someone else’s responsibility. You are responsible for ensure that the infrastructure for the application is performing well. The infrastructure includes all of the hardware, the virtualization platform, and even the middleware and the databases that support the application.
What Kind of Applications Do you Have?
This is the second key consideration in terms of picking your tool-set (you may well need more than one). Considerations are:
- Are your applications 100% custom developed, 100% purchased, or in what mix of these two alternatives? Do you have compound applications that consist of custom wrappers for purchased applications and that integrate purchased applications into a larger end-to-end business service?
- Which applications are really important, and which ones are not? Should you take the approach of managing just the important ones, or managing all of them (an important consideration is in the next bullet).
- Are you trying to virtualize “everything”? Are the owners of some of those applications resisting virtualization? Are they demanding performance assurances from you in order to let you virtualize their applications?
- If your applications are custom developed, custom developed in what? In a relatively modern framework like .NET, Java, Ruby, PHP or Python or in C or C++ using a proprietary RPC protocol over TCP/IP?
Your application mix and how virtualization is changing the requirements for application management constitutes the second important criteria in your decision process. Supporting one custom Java or .NET application in production is a completely different undertaking than supporting 1000 different applications regardless of their source and development methodology. This should guide you in choosing between developer focused and operations focused tools.
The table below groups some modern APM tools into two broad buckets. The groups are split along two important dimensions. The first group is tools that are all about providing development teams that tools that they need to ensure quality operation of code in production. These tools are therefore about depth of analysis into code so that problems, when they arise can be quickly addressed. The second group of tools do not give you in-depth code analysis, but do support a broad range of applications, and do not care where the application came from (custom developed or purchased).
Solutions Focused Upon Supporting Custom Developed Applications in Production
|AppDynamics||On Premise/SaaS||Agent inside of the Java JVM|
or the .NET CLR
|dynaTrace (Compuware)||On Premise||Agent inside of the Java JVM|
or the .NET CLR
|Java/.NET, Websphere Message Broker CICS, C/C++|
|New Relic RPM||SaaS||Agent inside of the Java JVM, .NET CLR or the PHP/Python runtime||Ruby/Java/.NET/PHP/Python|
|On Premise||Agent inside the Java JVM||Java|
Solutions Focused Upon Supporting Every Applications in Production (Application Operations)
|AppFirst||SaaS||Agent inside the Windows or Linux OS||All TCP/IP on Windows or Linux OS|
|BlueStrip FactFinder||On Premise||Agent inside the Windows, Linux, AIX or Sun OS||All TCP/IP on Windows, Linux, AIX, or Sun OS|
|Correlsense||On Premise||Agent inside the Windows, Linux,|
AIX or Sun Operating System
|All TCP/IP on Windows, Linux, AIX, or Sun OS|
|Confio Software IgniteVM||On Premise||Agentless collection of detailed database data|
and storage latency data from vSphere
|DB2, Oracle, and SQL Server Database applications running on vSphere|
|ExtraHop Networks||On Premise||From a mirror port on a physical switch or the vSphere vSwitch||All TCP/IP regardless of application run time or operating system|
There is no one APM tool, be it network based or application based that can meet the needs for every constituent and every application. The tool should be chosen based upon the needs of the team supporting the application(s) in question, and the type of applications that must be supported (purchased or custom developed, and if custom developed via what method). Virtualization plays a key role and that it is giving rise to new organizational function often called Application Operations which is responsible for the performance of all of the applications in production.