What the hell is microservice?

Microservice for this, microservice for that, but explain to a simple person what is microservice? I'm a simple programmer with a little almost none theoretical background. But I don't need a term microservice to do what I do. Could someone explain me in easy-peasant words what microservice is? Amazon AWS = microservice?

I read this: https://en.wikipedia.org/wiki/Microservices but apparently I'm too stupid to understand what is this.


Microservices in my own, hopefully simple terms

Monoliths

Traditionally web applications are big. You write one piece of software that runs on a server and answers requests in form of HTML, XML or JSON. If you want your web application to do something new, you add that functionality to the existing application. Such big systems are called "monolithic" (a monolith is a very big rock).

Monoliths are problematic, because they usually grow in size and complexity over time. This is a problem when developing something in a team. Developers are adding new code to the system and can't change or re-use the existing code, because there is many dependencies between the code pieces. They are also too afraid of removing old code because it might be used somewhere.

When delivering such code to clients, eg by putting it on the internet, we call that "deploying". Deploying and the usual testing after deployment is difficult, because within a big system there is a lot of things that can break. Finding out what is going wrong and who should fix it, is very difficult and requires people to know the whole thing.

Another disadvantage is the scalability. By that we mean "how can we serve more users at the same time?" A single web server computer can only handle a certain amount of users accessing it in parallel. Upgrading that computer to better hardware makes it serve more users, but you will soon hit the boundaries of what is possible with hardware. This upgrading is called vertical scaling. We could also put our web application on two or more servers, so that we can handle more users. This is called horizontal scaling. Monolithic applications are traditionally made only with vertical scaling in mind.

Microservices

In order to simplify the workflow with big applications, we can split it into smaller parts. Each part serves one particular purpose. We call that a "(web) service". These web services are very flexible to use. You can use them from within your existing monolithic application, either in the server part, or in the client part. You can also have a web service that uses other web services.

The split into single web services allows you to loosely couple your application. This means that as a user of the service you only depend on the service being up, available and working. You no longer need to take care of its dependencies, its compilation, deployment or testing.

You can give that responsibility to a different developer or team. You can't break their web service because you do not access it through the source code. They can even use a different programming language and you could still use their service.

This independence is made possible by deciding on using a common format and common protocols (a protocol is a way of communicating). For web services the most popular formats are JSON and XML. The protocol used the most is HTTP, because it's simple, well-supported by all existing software and your browser is using it, too.

The word "micro" in "microservices" just emphasises the idea to make these web services as small as possible. If you need a more complex service, it is usually better to create a new service that depends on one or more others.

Example

Let's say you have an application where users can create virtual post cards. This is how such an application could be realised using microservices architecture.

  • A thin static web page that consists of only HTML, CSS and JavaScript
  • A microservice "card library" that offers a list of card templates including their dimensions and intention.
  • A microservice "thumbnailer" that, given a card template name, offers you a small preview of the card.
  • A microservice "renderer" that expects a template and the text to fill in. It then renders a card image and returns that.
  • How they're wired:

  • Web page has the URLs to the card library and to the renderer. The user's browser is calling these services as issued by JavaScript code.
  • The library is using the thumbnailer to return a list of cards including their thumbnails
  • When the user has selected one, the browser sends that template with the user input to the renderer and the browser shows the returned image.

  • The right word for microservice is right size service . Scope and size Microservice should be based upon following

  • SRP - Microservice should have a single reason for change. It should do one thing and do it well.
  • Business capability - It should represent a business capability which should be relatively autonomous in nature and can be executed by a team with minimal interaction with other capabilities
  • BC/UL It should be based upon BC and UL. These are concepts from DDD. Please see the link for details.
  • 链接地址: http://www.djcxy.com/p/34090.html

    上一篇: 微服务内部沟通

    下一篇: 什么是微服务?