Date Archives

May 2018

You Shouldn’t Host WordPress on AWS (Except when you should)

Or why you should pick the right tool for the right job

A number of past clients ask me to automate and configure WordPress on AWS (And a ton of potential clients ask the same). After architecting a number of AWS WordPress solutions, I feel pretty comfortable going over why I advise against their union in the vast majority of cases.

Let’s dig in to why WordPress is often a poor choice for AWS and situations where it may be a good fit.

Short note: This isn’t a hit piece on AWS or WordPress. AWS is an excellent tool, as is WordPress (This website is WordPress based. Surprise!) but unfortunately, they are not tools that often perform well together (though there are exceptions).

Why WordPress is (generally) a poor fit for AWS

Load Balancing

Let’s start with the most important reason first: WordPress was and still is ill suited for load balanced situations as it simply wasn’t designed with these concepts in mind. This is especially true for situations with dynamic scaling (I.E Using EC2 Autoscaling Groups)

WordPress has a good deal of assets and functionality that rely on the Web Servers flat file system for storage (Such as the plugin, theme, and media files).

Let’s do a quick thought experiment.

Diagram of WordPress Load Balanced Setup
Try not to weep at the beauty of my chart.

You have two web servers with WordPress installed behind a load balancer and backed by RDS.

You login to the WordPress admin page and decide to install a theme. You click install on the theme and when you did so, the Load Balancer was communicating with Server A.

Sometimes when you access the site everything works correctly and other times it doesn’t. Why?

Spoiler: WordPress only installed the theme on the Server A, leaving Server B without the proper theme files installed.

For context, the initial release of WordPress was over 15 years ago (It’s 15th anniversary was yesterday. Congrats WordPress!).

It was created in a time where public cloud providers like AWS, Azure, and Google Compute were years from creation and most webmasters would never touch (or possibly even know about) concepts like Load Balancers.

One of AWS’s greatest strengths is it’s high level of scalability (in particular the possibility to automate this scaling). Scaling cleanly is not easily accomplished (one may even argue impossible) without the ability to horizontally scale your application.

Scale

Now it’s hard to blame this one on WordPress but it’s still an important factor when deciding to host AWS on WordPress.

Your idea of “a lot of traffic”, probably isn’t a lot of traffic.

If you have a website with only a few thousand to the low hundred thousands of hits a day, it is almost a guarantee that you shouldn’t be hosting your website on AWS. You won’t really have the traffic to leverage AWS’s biggest weapon (As mentioned earlier, SCALABILITY!)

AWS is a product meant to scale websites up to hundreds of thousands to millions of hits or more. While a scalable solution can also be performant (I.E Fast) that isn’t always the case.

Confused about the difference? You can read a follow up here.

Price

People are told that AWS can save them a lot of money. For the right customer with the right solution (Read: properly architected) that makes heavy use of auto scaling, AWS is likely to save a great deal of money.

If you attempt to utilize AWS like a traditional VPS or Dedicated Server provider you’re likely to find that AWS can be very, very, very, expensive.

For the price, AWS is generally going to offer far worse performance per dollar than an equivalent solution on Digital Ocean, Vultr, or even a good old fashioned dedicated server.

If you look at the above comparison, pay particularly close attention to last section where the DO solution is significantly superior (sustained performance).

Aside from cost of the EC2 instances, some of the solutions in our mitigation section also have significant price tags attached.

So when is AWS the right choice for WordPress?

There are a few check marks I like to tick off before going “Alright, AWS may be the right choice” when working with WordPress.

  1. The client has a site with a large amount of traffic (Hundreds of thousands plus+).
  2. The client has very spiky traffic (Periods of very high usage followed by periods of very low usage)
  3. The client is expecting to see a very large permanent increase in traffic in the near future.
  4. The client is either willing to make changes to how they manage their site (Largely forgoing the use of the admin panel for tasks like plugin and theme installation) or is willing to take a significant hit to their pocket book with certain mitigation strategies.
  5. The client intends to make good use AWS scalability features.
  6. The client requires (or at least wishes to have) a high availability configuration.
  7. The client intends to make significant use of AWS products such as RDS, IAM, S3, Cloudfront, and others.

In cases where the client meets all or some of the above criteria, AWS may be worthy of consideration for their particular case.

Summary

AWS and WordPress are both terrific products that have their place but heavy consideration should occur before deciding to bring the two together.

In a future article, I’ll go over the pro’s and con’s of various strategies for Load Balanced and Highly Available WordPress deployment on AWS. Stay tuned!

If you’re looking to contract with an experienced Automation Engineer/Linux Sys Admin, I hope you won’t hesitate to schedule a short meeting to talk about how I can help.

You can easily schedule a meeting below or by clicking the blue button at the bottom right.

Want to understand how I can help? Take a look at my article here.

Till next time.


Freelancer Flow: Use RSS To Improve your Upwork Process

Or why you should automate the easy stuff

Today we’ll be going over how to configure an RSS Reader to easily aggregate Upwork job searches in an easy to read manner.

So what is RSS?

For those that aren’t familiar, RSS (Rich Site Summary) is a protocol that has been around for a long time (Since about 1999) intended to help aggregate content from various sources.

Despite it’s decrease in usage, RSS remains an invaluable tool for those who are trying to easily ingest a large amount of information from different sources.

Many of the websites you visit (Including Upwork!) support RSS feeds.

To utilize RSS you use a Feed Reader. The solution we’ll be going over in this article is a free SaaS solution called Feedly.

Feedly has a web application and mobile applications for both iOS and Android.

For those of you that prefer to use self hosted or native applications, there are numerous options out there (Many of them are FOSS).

Here is what my Feedly looks like:

picture-of-feedly-interface

You’ll notice I have a number of categories on the side for different subjects such as Work, News, and Gaming so I can easily review the content I care about at the time.

How does this help me?

Your current Upwork workflow for sourcing work probably looks something like this:

  1. Visit Upwork.com
  2. You either create a search from scratch or if you’re smart, you click on your saved searches (You do save your searches right!?)
  3. Go through Upworks slow loading and cumbersome interface for each of your searches
  4. Open all the relevant jobs as you go through the searches
  5. Write a proposal for each job.

The above is relatively inefficient, it requires you to go through their website and utilize their often slow interface. The interface for saving jobs for writing a proposal later is cumbersome.

It’s also easy to end up looking at the same jobs over and over.

Overall, it’s not an enjoyable process.

With Feedly your workflow will look something like this:

  1. You create searches on Upwork that match the jobs you want. You want to do this in a way that doesn’t have too many false positives or false negatives.
    1. I prefer to have a search for project based work and hourly work.
  2. You copy the RSS link from Upwork and add it to feedly
  3. You visit Feedly, click on the RSS feed you want to review.
  4. Open all the jobs you feel are relevant to you or  even save them for later review with the click of the button.
  5. When you’re through reviewing that days search, simply mark all as read.
  6. When you come back tomorrow you’ll have a fresh feed of jobs you haven’t reviewed. Just go back to step 3.

In my experience, the Feedly interface has been easier to work with, provides more features, is faster, and reduces the likelyhood that you keep seeing the same jobs over and over again (this can still be an issue if your searches are handled poorly.

You can also aggregate other content that matters to you, such as professional journals.

I’m sold, how do I set this up?

Just a few steps!

  1. Sign up for a free account at Feedly.
  2. In Upwork, configure the search to your liking. You can include or exclude certain words, narrow down by country, experience level, and more.
    1. Protip: 99% of the time, there is no point in including entry level jobs. This translates to “We’re going to pay someone $3 an hour for this”.
  3. After you configure your search, save it to a name of your liking. This will be what it appears in Feedly. You might want to use something like “Programming (Hourly)” or similar.

    upwork-save-search

  4. If you aren’t redirected, go back to the “Find Work” page on Upwork and click your the search link on the left.

  5. Click the small right circle on the right and select “RSS”.

  6. After clicking this link it will bring you to a page with some strange text. You’ll want to copy the URL in your address bar (NOT the strange text)

    The URL will look something like this: https://www.upwork.com/ab/feed/topics/rss?securityToken=TOKENHERE&userUid=USERIDISHERE&orgUid=ORGIDHERE&sort=local_jobs_on_top&topic=OTHERIDHERE

  7. Go back to Feedly. Click add content (Bottom left corner) and select “Publications and Blogs”.

  8. Paste the link you got in Section 6 into the box in the middle of the screen. A drop down will pop up with a single selection. Select this source and categorize it to your liking.

  9. You’re done! Now you can select the source you added on the left side and start finding work.

Closing

Hopefully this new workflow helps improve your ability to source work and ingest data quickly.

If you know of anyone that requires a Linux Systems Administrator or Automation Engineer to help with their infrastructure, I hope you won’t hesitate to send them my way.

Feel free to comment if you have any question!