Haisum's Blog It's not a bug, it's a feature.

AWS - Part 2 - Regions, Zones and Edge Locations

Services in AWS are divided in Regions, Zones and Edge Locations. It’s important to know difference between them when using AWS for deploying our services.

A region is a geographical location. Two regions may be far apart in same country or they may be in different countries or continents. For example, AWS has US east region which is located in Northern Virginia and a West region which is in California. Another region is in Ohio. Purpose for having distant regions is having redundancy so for example of a Hurricane hits in Northern Virginia, then services can continue functioning from California region. Regions may also be selected based on their proximity to customers of our service. If all customers of a service are in Europe then may be having services hosted in Frankfurt make more sense then having them in US regions.

If you do not explicitly specify an endpoint, the US West (Oregon) endpoint is the default.

All regions have multiple Availability Zones. You can think of Availability Zone as a data center. Each region has two or more data centers and each may be only a few miles apart or within a couple hundred feet from each other. Availability zones are isolated from each other to create redundancy within a region. So for example, if you wanted to load balance a database so it won’t go down if data center goes down, then you may do so by placing a passive instance in another availability zone in same region.

Edge locations are basically locations for CDN. As of today, there are 68 Edge locations listed on Amazon Cloud Front documentation at: https://aws.amazon.com/cloudfront/features/. Edge locations are used for serving static content so they aren’t full fledge data centers. There are many more edge locations than regions and availability zones.

There were 19 Regions and 57 Availability Zones as of 2018. We don’t need to know about all of them but it’s nice to know which ones are near your location. Here’s link from AWS documentation which describes regions and zones in more detail. It also lists down current regions/zones for RDS: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html.

AWS - Part 1 - Intent and Introduction

I have informally dealt with AWS whenever it’s needed but haven’t formally gone through all of it’s services. With number of services provided by Amazon approaching more than 2000, it’s virtually impossible to actually know about all of them. I am trying to do proper study of all of it’s popular services and features so that I may have sort of complete functional knowledge of state of cloud computing. I will also study things I already know, in more depth, and do some hands on. As I proceed to do so, I intend to document all that I come accross on this blog so that I have notes for my future self and may come handy to any interested readers.

I have purchased membership from A Cloud Guru to go through their courses and will try to add what I learn from there as well as from other related resources here. I am also interested in AWS Certified Solutions Architect Associate Certification, so once I complete all this I will attempt certification exam. A curated list of AWS resources to prepare for the AWS Certifications seems like a good list of resources to follow if someone is interested in giving certification exam. In addition to curriculum covered in A cloud guru course I will also read Amazon documentation and resources mentioned in above link to fill gaps in my knowledge.

Life in 2019

It’s been a long time since I have written anything meaningful. I miss writing but my procrastination is always in way. I went on a vacation recently with family and decided when I come back from vacation, I will resume writing. So this is just another meaningless post to start with something.

While I didn’t write in 2018 and most of 2019, I was still learning a lot. First, I learned how to be a parent. My toddler, who was born in end of 2017, is excellent teacher. Sometimes, she gives tough lessons to her lousy students/parents, most of times she’s the shining star of my life. Professionally, I am better at Java and related technologies now than ever. Two major projects I did was setting up Kubernetes clusters and moving large monolith into it by splitting it in microservices. During this project I worked on Prometheus, Zuul proxy, Spring Boot, Netflix’s Hysterix and Nginx. Another cool project was moving entire codebase of huge application from Oracle to Mariadb.

Working on legacy codebase to remove hard coded Oracle queries was pain in the ass and got me interested in reading books about working with Legacy code. Working Effectively with Legacy Code and Refactoring are excellent books that I would recommend to every programmer.

Another excellent book I read recently is Designing Data Intensive Applications. This book is hands down amazing. If you’re even slightly interested in what the hype about all these NoSQL databases is, this is the book for you. It opens the black box for you so what you considered magic, now becomes obvious. If you read it, you will know what goes behind all these new/old databases and will be better equipped at choosing right solution for right problem. I will write about stuff I have read in this book some other day.

Anyways, that’s it for today, hopefully I will write more posts from now on.

Update on Rants on Freedom in Pakistani Culture

I wrote a rant 2 years ago in middle of night while I couldn’t sleep because I was angry at our society to prevent me from marrying the Girl I fell in love with. You can check it out at http://haisum.github.io/2015/10/22/freedom-in-asian-cultures/.

Be careful with ioutil.ReadAll in Golang

ioutil.ReadAll is a useful io utility function for reading all data from a io.Reader until EOF. It’s often used to read data such as HTTP response body, files and other data sources which implement io.Reader interface. Be careful though because a lot can go wrong if you don’t take care while using this small seemingly harmless function.