SitePoint runs an extensive guide to the WordPress performance optimization. Not only it goes over the usual points like hosting selection and avoiding unnecessary plugins, but it also provides some insight into the WordPress database management and optimization, web server tweaks, and links to a few handy tools to help with performance of your site.
“Why Uber Engineering Switched from Postgres to MySQL” is an interesting study with plenty of technical detail of how MySQL was a better choice than PostgreSQL for the very demanding growth of Uber. These kinds of issues are probably way out of scope for any “regular Joe” application, but the insight into the differences of MySQL and PostgreSQL architectures is still useful.
Main PostgreSQL limitations covered by the study are:
- Inefficient architecture for writes
- Inefficient data replication
- Issues with table corruption
- Poor replica MVCC support
- Difficulty upgrading to newer releases
“The headers we want” is a very simple, straight to the point blog post on the Fastly blog. Unlike many other more generic articles on the subject, it doesn’t try to explain the meaning of every HTTP header out there, and it doesn’t go into deep theory or the meaning of life, the universe and everything.
Instead it tells you plain and clear which headers should be emitted by your website or web application. And these cover everything from the usual Content-Type and Content-Length, all the way down to the CORS and Server-Timing.
Once the basic functionality of your website or web application is done and out of the way, this blog post comes in handy with the specific best practices to make your site more secure and much faster.
For more on the same subject, have a look at “The headers we don’t want” in the same blog.
Gergely Orosz, an engineer who worked at Uber on the large scale payments system used by the company, shares some of the distributed architecture concepts he had to learn in the blog post titled “Distributed architecture concepts I learned while building a large payments system“.
The article is very well written and easy to follow. But it’s also a goldmine of links to other resources on the subject. Here’s a list links and concepts for a quick research and/or click-through later:
- Service Level Agreements (SLAs).
- Availability / service uptime (in percentage of time a year)
- Accuracy (in percentage)
- Capacity (in requests per second)
- Latency (95% and 99%)
- Horizontal vs. vertical scaling
- Horizontal scaling is adding more machines, much preferred for distributed systems.
- Vertical scaling is upgrading machines to the more powerful ones.
- Data Durability (here‘s some more on the subject)
- Message Persistence and Durability
- Idempotency (here‘s some more on the different strategies)
- Sharding and Quorum
- The Actor Model
- Reactive Architecture
With Accelerated Mobile Pages (AMP) being all the rage recently, I found “How fast is AMP really?” article interesting. It looks like it’s worth spending a tiny bit of time adding AMP to your site, especially if it was developed with one of the common and widely used tools, like WordPress. And if mobile page performance is important for your project, than there’s even more that you can benefit from.
Mainstream support and implementation alternatives are not too far away, and that’s super exciting.
Here’s a list of the TOP 10 MySQL 8.0 features for DBAs and OPS, with some detailed explanations of what they are and links to more information. The features covered are:
- Temporary Tables Improvements
- Persistent global variables
- No more MyISAM System Tables
- Reclaim UNDO space from large transactions
- UTF8 performance
- Removing Query Cache
- Atomic DDLs
- Faster & More Complete Performance Schema (Histograms, Indexes, …) and Information Schema
- REDO & UNDO logs encrypted if tablespace is encrypted
Here are some very exciting news from the Nginx front lines: HTTP/2 Server Push is now available in the latest and greatest Nginx 1.13.9, which was released yesterday!
Server Push was one of the most exciting features for me in all of the HTTP/2 specification. But I wasn’t quite sure how it will be implemented, and, most importantly, how it can be made easily available to the web developers, who are often few levels removed from the web server configuration. I think Nginx solves the problem quite elegantly.
On the configuration level, “location” directives are often available to the web developers withing the virtual host / server. But for those who can’t use those or don’t want to mess around with the configuration files, an even easier option is available – Link HTTP header.
I’m sure this will soon be widely supported in all the major libraries and frameworks, much like HTTP cookies are. Great times ahead!
It’s been a while since I posted anything about Docker. That’s mostly because I still don’t really use it for anything – playing around locally, testing and learning doesn’t count yet.
But just to keep the ball rolling, here are a couple of handy links for the ideas on how to improve your Docker images, so that Docker uses much less space, benefits more from caching, and brings up the containers faster:
Both articles are around the same theme – choose your base image carefully, try to minimize the layers, use only what you need, and don’t forget to clean up the disk space with “docker system prune“.
Jeff Geerling shares his tips for “Getting the best performance out of Amazon EFS”. Given how (still) new the Amazon EFS is and how limited is the documentation of the best practices, this stuff is golden.
tl;dr: EFS is NFS. Networked file systems have inherent tradeoffs over local filesystem access—EFS doesn’t change that. Don’t expect the moon, benchmark and monitor it, and you’ll do fine.