Skip to content

Commit

Permalink
Merge pull request #14 from johnswil/patch-3
Browse files Browse the repository at this point in the history
Edited
  • Loading branch information
aroach committed Jul 7, 2016
2 parents 0b67dd4 + b81d226 commit c5a9277
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions labs/microservices-overview/2.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# What are microservices?

Microservices is a style of architecting an application. Generally microservices are thought of as discrete functions in your application exposed by an API. Note that while microservices and containers are used a lot together, you don't necessarily have to have a microservices application based on container technology. In many ways, microservices is more a mentality, than a specific technology decision. Having said that, it's quite likely that if you architect in a microservices manner, it may lead to using containers.
Microservices is an approach to architecting an application. Generally microservices are thought of as discrete functions in your application exposed by an API. While microservices and containers are used a lot together, you don't necessarily have to have a microservices application based on container technology. In many ways, microservices is more of a mentality, than a specific technology decision. Having said that, it's quite likely that if you architect in a microservices manner, it may lead to using containers.

# What is a container?

Containers have a long legacy in computing that stretch back to the mid-1970s. However, recently Docker has come to the fore and popularized containers by making it really easy to use containers.

There is some confusion about containers being something like virtualization, which at a high level generalization is reasonable. However, the big difference comes in a few characteristics of containers.
There is some confusion about containers being something like virtualization, which at a high level generalization is reasonable. The major differences come in a few characteristics that seperate containers from virtualization.

* Containers may live on bare metal OR in a virtualized OS
* Containers may live on bare metal or in a virtualized OS
* Containers, at least the Docker model, are "immutable," meaning that they cannot be changed. In fact, they are versioned, similar to source control.
* Applications in containers typically run as `root`

# How microservices and containers help

The primary benefit of a microservices approach is the enable a team to deploy application logic in a granular way. Take an example scenario where I have a User service and a Photos service. In a traditional monolithic architecture, and I wanted to add a new feature to the Photos service, perhaps adding Geo Tagging, then I would need to re-deploy the entire application. In a microservices architecture, I would make updates to my Photos service, and just deploy that service.
The primary benefit of a microservices approach is the enable a team to deploy application logic in a granular way. Take an example scenario where I have a User service and a Photos service in a traditional monolithic architecture, and I wanted to add a new feature to the Photos service, perhaps adding Geo Tagging, then I would need to re-deploy the entire application. In a microservices architecture, I would make updates to my Photos service, and just deploy that service.

If you use containers as part of your microservices architecture, you also reap the benefit that all of your dependencies for the Photos services are "embedded" within the container. A subtle benefit, although important, is that you can then use different languages for different parts of your application. This can help optimize based not only on technology superiority for a given task, but also enables you to have team members who are specialists in different languages and stacks.

Expand Down

0 comments on commit c5a9277

Please sign in to comment.