Read The Times Australia

Daily Bulletin

A Tale of Performance Testing

  • Written by: Josh Bassett, Data Platform Technical Lead, The Conversation

At The Conversation we’ve recently been working hard at migrating one of our web applications to Amazon Web Services (AWS). The exact architecture we’re running on AWS is a whole blog post in itself, but suffice it to say that it is quite different to our current architecture, which runs everything on a bare-metal host.

Testing with Real-World Traffic

Rather than just cowboy the app across to the cloud and hope for the best, we decided that the best thing to do was evaluate the performance of our new server running on AWS for a period, before eventually going live. To make the test as realistic as possible, we wanted to hit it with real-world traffic. But rather than flip the switch on our new server and start serving requests for real, we only wanted to send it a copy of our production traffic. The current server would still be responsible for handling all our users’ requests. This meant that we would need a way to mirror the production traffic from our current server to the new server, preferably without any downtime or configuration changes.

GoReplay

After looking at many possible solutions I stumbled across GoReplay, which turned out to be the perfect tool for the job. It allows you to intercept and relay any traffic on a local TCP socket to a remote web server. Importantly, you don’t have to make any changes to your environment other than installing the tool itself.

For example, to relay any request on local TCP socket 9292 to a remote web server:

> goreplay --input-raw :9292 --output-http "http://my-server.example.com"

Don’t Believe Everything You See

Using GoReplay I had our current production server relaying traffic to the new server running on AWS. Everything was going smoothly until I noticed that the performance on the new server was absolutely terrible.

We use New Relic to monitor our application performance, and the performance graph was telling me that the new app server was consistently spending nearly a second just queuing the requests. This was all before our Ruby app server had even fired off a single query to the database! The total latency was over a second, even for simple requests. How could this be? It was incredibly disappointing to see such poor performance after painstakingly migrating our app to AWS.

image New Relic performance.

I started looking for more evidence to support the measurements I was seeing in New Relic. I noticed that the latency graph for our AWS load balancer was telling me a completely different story – it was showing me consistently fast performance (<10ms latency). How could they both be correct?

image Load balancer latency.

The final piece of evidence against the New Relic data was gleaned by running a request to our application health check from the CLI:

> curl -o /dev/null -s -w %{time_total} "http://my-server.example.com/health"
0.575593

This told me that even with the added latency between Australia and the US, I was still getting much lower latency than what I saw in New Relic. So why was New Relic wrong?

Beware Subtleties

Convinced that our New Relic data was inaccurate, I started digging for the source of the anomalies. After focusing on how New Relic actually calculates the “Request Queuing” metric I finally figured out the problem:

  • When a request arrived on our current server, Nginx would set the X-Request-Start HTTP header with the current timestamp.
  • Nginx would then proxy the request to our Ruby app server, listening on port 9292.
  • GoReplay, also listening on port 9292, would relay the request (including all HTTP headers) to the new server.
  • The new server would then process the replicated request.
  • Finally, the New Relic agent running in our Ruby app server would happily forward the X-Request-Start HTTP header, even though the timestamp was recorded on a different server.

So the huge amount of time spent queuing the request actually turned out to be bogus, all because I naively assumed that New Relic was receiving correct data. The answer turned out to be very simple: clear the X-Request-Start HTTP header before relaying the request.

> goreplay --input-raw :9292 --output-http "http://my-server.example.com" --http-set-header "X-Request-Start:"

That way New Relic wouldn’t think that the request was being “queued” the whole time it was being relayed from our current server to the new one.

What I Learned

Whenever you evaluate any change to your application, be it an infrastructure or code change, you need to be very careful that you’re always making an apples-to-apples comparison. You also need to have a hypothesis to test (e.g. I expect the performance should be better/worse/same), which will either be confirmed or denied by the measurements you make.

Like any good scientist, you can’t just blindly trust one line of evidence – make multiple measurements of the effect of your changes. Lastly, the more familiar you are with your data, the more honed your intuition will be should one of your measurements tell you lies.

Authors: Josh Bassett, Data Platform Technical Lead, The Conversation

Read more http://theconversation.com/a-tale-of-performance-testing-83158

Business News

Office Cleaning Melbourne: Choosing the Right Scope for Your Office

A well-planned office cleaning Melbourne arrangement starts with a clear understanding of the premises and the people who use it. An office may include private work areas, shared desks, reception, mee...

Daily Bulletin - avatar Daily Bulletin

How Businesses Can Prepare for Unexpected Power Outages

Power failures can occur quickly. The supply may be interrupted by bad weather, issues with the electricity network, damaged equipment or local construction work. This can be just a hassle for a fam...

Daily Bulletin - avatar Daily Bulletin

How Chatswood Tutoring Can Fit Into a Student’s Weekly Routine

Create a Predictable Weekly Structure A consistent weekly routine can make study easier to manage when students are balancing several subjects. Chatswood tutoring can provide a fixed learning point a...

Daily Bulletin - avatar Daily Bulletin

The Rise of Digital Marketplaces in the Australian Trade Sector

For decades, the Australian trade and construction sector operated almost entirely on word-of-mouth recommendations and local community networks. Small business owners typically relied on local newspa...

Daily Bulletin - avatar Daily Bulletin

How Immigration Lawyers Can Help

Introduction Visa decisions can shape employment, family life, study plans, travel, and future residence. A small omission can lead to delay, added expense, or refusal. Immigration lawyers assess l...

Daily Bulletin - avatar Daily Bulletin

How Industrial Drying Equipment Supports Efficient Processing

Many industrial processes require moisture to be removed from compressed air, products or process materials before they move to the next stage. Excess moisture can affect equipment performance, produc...

Daily Bulletin - avatar Daily Bulletin

Practical Ways a Whiteboard Can Improve Workplace Communication

Effective communication helps teams stay organised, share ideas and keep track of important information. While digital tools are now common in many workplaces, a whiteboard continues to provide a simp...

Daily Bulletin - avatar Daily Bulletin

Designing Eco-Friendly Custom Water Bottles for Your Next Event

The Evolution of Sustainable Event Merchandise Event planning has undergone a massive transformation over the last decade. Gone are the days when organizers could hand out cheap, single use plastic...

Daily Bulletin - avatar Daily Bulletin

Why Choosing a Professional Florist Melbourne Makes Flower Delivery Impactful

Flowers have a great power to speak when humans cannot express their feelings with right words. Flowers are the best gifts when you are celebrating a birthday or welcoming a newborn child into your fa...

Daily Bulletin - avatar Daily Bulletin

The Daily Magazine

Why a Safety Certified I/O Module Matters in Machine Design

Understanding Safety-Related I/O A safety certified I/O module is designed for use within an arch...

Transforming Your Backyard for a Sophisticated Milestone Celebration

Hosting a milestone event at home has become a deeply popular choice for Australians looking to cr...

Valentine's Day Gifts for Your Husband That He'll Actually Love

Valentine's Day tends to be built around flowers, chocolates and jewelry, which leaves a lot of wi...

Why European Vehicles Demand Specialised Maintenance on Australian Roads

European cars, encompassing premium brands like BMW, Audi, Mercedes, and Volkswagen, are highly soug...

How Melbourne Businesses Can Retain Top Talent Through Visa Sponsorship

Melbourne businesses are facing an increasingly complex hiring landscape. According to the Jobs and ...

Clever Ways to Combat Dampness and Maintain a Healthy Bathroom Environment

Australians currently spend more than 90 percent of their time indoors. This modern lifestyle heavil...

How Registering a Company in Singapore Can Support Business Growth

Choosing where to register a business can influence how easily it grows, attracts customers, and e...

What Business Owners Should Know About Company Registration in Hong Kong

Hong Kong is a popular location for entrepreneurs looking to establish businesses with internation...

What Entrepreneurs Should Know About the Benefits of Registering a Company in Australia

Starting a business involves more than finding customers and offering a good product or service.  ...