Modern applications tend to rely on many application dependencies. Most applications use some form of database and external HTTP based web services. If you are not intimately familiar with the code, it can be very difficult to know exactly what the code does and what dependencies that it has. It is also very important to understand the performance of those dependencies and how they could be impacting your application and your users.
What is Application Dependency Mapping?
The process of identifying and documenting all the external dependencies of a software application. Application dependency mapping can be done automatically by various tools or could be manually compiled by auditing the application code.
Developers commonly use visualization tools like Visio to draw out the architecture of their applications. This includes mapping out all the dependencies and how they talk to each other. Although, by doing it manually they are likely to miss some application dependencies.
Application Dependency Mapping Tools
Application dependency mapping is a common feature for most application performance management (APM) products. Most APM products use various types of code profiling and instrumentation strategies to track the overall performance of applications and their dependencies. As part of this, they can discover all the dependencies and provide a map or list of them.
It is also possible to do application dependency mapping by monitoring the network traffic on a server. Some network performance monitoring (NPM) solutions can deduce some details about what an application is connecting to and potential performance problems associated with it.
Application dependency mapping is a very useful feature of many APM & NPM tools. Our APM product, Retrace, can you identify all of your application dependencies and the performance of them.
Types of Application Dependencies
Applications use a wide variety of various application dependencies. Here are some of the common ones and how they are used. Application dependency mapping can help identify these types of common dependencies.
Databases (SQL, NoSQL, Documents)
Most applications use some form of SQL database. Common SQL database providers are SQL Server, Oracle, PostgreSQL, MySQL, Sqlite and others. It is also increasingly common for applications to also use NoSQL or document databases like MongoDB, Cassandra and others.
Applications with a lot of traffic can greatly benefit from caching. A lot of data used by applications does not change very often and caching it can greatly reduce the load on databases or other resources. Popular caching solutions include Redis, Memcached, AppFabric, and others.
Queues can be used for a wide variety of purposes. They are typically used to disconnect one app from another and allow a durable messaging system to exist between them. This increases fault tolerance and allows the receiver of the messages to not get overloaded if there is a big spike in traffic. Some common queuing solutions are MSMQ and RabbitMQ.
Web Services, HTTP APIs
Many web sites and vendors provide a wide array of APIs that can be accessed over HTTP based web services. At Stackify, we use APIs like Twilio for sending text messages and SendGrid for sending emails. Other uses could be communication between REST API based microservices or multiple applications within your own company.
How to Monitor Application Dependency Performance
Application performance management systems can track all of your application dependencies to help understand the performance of them. If an application dependency becomes unavailable or slow, it can have a big impact on the performance of your applications.
“You don’t know what you don’t know” if you lack good application monitoring best practices. Here are some basic suggestions that we have for application dependency performance monitoring.
It is important to always collect and monitor exceptions with your application. Exceptions can be your first line of defense for identifying connection problems or SQL query timeouts. Most APM products also collect exceptions and provide visibility around these types of problems.
Being able to identify all the SQL queries within your application is very critical to identify potential performance problems. SQL queries that are slow or called too frequently are common performance problems. APM solutions can help you quickly identify which SQL query is the problem so you know how to improve the performance of your application.
If your application utilizes a lot of web services, it is important to monitor if they are working properly. The last thing you want is for a 3rd party service to be down and causing problems within your application that you aren’t aware of. Good exception handling and monitoring for exceptions is also useful for these types of problems.
We occasionally have issues with inbound data being processed slower than normal because some Azure queuing or storage service might be slow. It could be slow due to noisy neighbors, Azure updates, a fault within Azure’s infrastructure or a wide variety of other issues. These scenarios will always exist and monitoring them can help keep you from guessing why your application is acting weird.
If you need help monitoring the performance of your application dependencies, be sure to try our product, Retrace.