Live data from Hacker News

MicroservicePremium

martinfowler.com

1–10 of 27 posts

Re: MicroservicePremium

#2
my question is, what happen is eventually some tools can be useful for overcoming the complexity introduced by microservices (e.g. CoreOS, docker, kubernetes, Netflix OS technology, etc), what could be the argument for not using them instead big monoliths?

Re: MicroservicePremium

#3
Does this feel like backtracking to anyone else? Compare to Fowler's previous discussions [1].

Maybe it's just hard to write about a new, interesting thing without most people getting the impression you think it's the way (especially developers, who seem eager to declare any new tool the One True Way® and everything else 'legacy').

[1] http://martinfowler.com/articles/microservices.html#AreMicro...

Re: MicroservicePremium

#5

Does this feel like backtracking to anyone else? Compare to Fowler's previous discussions [1]. Maybe it's just hard to write about a new, interesting thing without most people getting the impression you think it's the way (especially developers, who seem eager to declare any new tool the One True Way® and everything else 'legacy'). [1] http://martinfowler.com/articles/microservices.html#AreMicro...

No?

> So we write this with cautious optimism. So far, we've seen enough about the microservice style to feel that it can be a worthwhile road to tread. We can't say for sure where we'll end up, but one of the challenges of software development is that you can only make decisions based on the imperfect information that you currently have to hand

Re: MicroservicePremium

#6
Most linux distros can be considered a collection of micro services. The stability vs innovation tradeoffs inherent to this type of systems is well understood, as is the complexity of updating and testing compatibility. I don't see why it should be so hard to draw a parallel to microservices.

Re: MicroservicePremium

#7

Does this feel like backtracking to anyone else? Compare to Fowler's previous discussions [1]. Maybe it's just hard to write about a new, interesting thing without most people getting the impression you think it's the way (especially developers, who seem eager to declare any new tool the One True Way® and everything else 'legacy'). [1] http://martinfowler.com/articles/microservices.html#AreMicro...

No? > So we write this with cautious optimism. So far, we've seen enough about the microservice style to feel that it can be a worthwhile road to tread. We can't say for sure where we'll end up, but one of the challenges of software development is that you can only make decisions based on the imperfect information that you currently have to hand

I think I linked to the most balanced bit of that article :)

"We've seen many projects use this style in the last few years, and results so far have been positive, so much so that for many of our colleagues this is becoming the default style for building enterprise applications"

"Monolithic applications can be successful, but increasingly people are feeling frustrations with them "

Re: MicroservicePremium

#8
What is a monolith? Intentionally tightly coupled code that you feel is going to be manageable in the future?

I think the biggest anti-pattern is "DRY". This turns a simple rails view into a monstrosity that is used to render every page of a site, or a class into a self-referencing recursing mind-puzzle.

When a codebase starts down the monolithic path, developers will often use the DRY anti-pattern to "shrink" what is actually complexity creep. They will also use another anti-pattern which is using the test coverage percentage as a key metric for deciding what to build/improve.

Both of these are attempts to fix something that is a far bigger problem: excessive, unnecessary coupling in the core design. This is often because (as others have pointed out) of blind adherence to frameworks and framework "best practices".

In my opinion, the most important metrics are coupling, lines of code (the fewer the better) and readability/understandability. Every line of code that you maintain ads a cost to changing/improving the codebase (because someone has to understand it in order to change it).

If you think of code in terms of its consumers, nearly every API is a micro-service. The less magic/faith required by the consumer to use the API, the more effectively it can be used and changed.

Re: MicroservicePremium

#9
I wrote this article some time ago and it has generated hundreds of inbound emails asking me about the risk points associated with Microservices:

http://highscalability.com/blog/2014/4/8/microservices-not-a...

Building Microservices does have a real premium - you are building a complex platform which needs specialists skills and additional work to make happen.

The payback of that premium comes later, in the ability to then iterate and change the system easily and quickly.

The problem comes when people think they are building an application and not a platform which will support them for the next 5+ years. I try to hammer this point home to our clients who are looking at Microservice architectures.

Re: MicroservicePremium

#10
post #8

What is a monolith? Intentionally tightly coupled code that you feel is going to be manageable in the future? I think the biggest anti-pattern is "DRY". This turns a simple rails view into a monstrosity that is used to render every page of a site, or a class into a self-referencing recursing mind-puzzle. When a codebase starts down the monolithic path, developers will often use the DRY anti-pattern to "shrink" what i…

There are two ways to think about microservices. Development (which your comment focuses on) and deployment. The pure/idealized microservice is isolated from the rest of your environment/codebase on both of those axes. In practice, there will be some coupling on both, and perhaps one of those isn't isolated at all.

The monolith is simply the opposite of the microservice ideal, it is heavily coupled in both development and deployment.

And yes, DRY does often run counter to the development isolation, as you need to balance repeating yourself or sharing code (and reducing isolation).

As these things generally go, any system in contact with the real world will exist somewhere between the monolith and a federation of microservices. My current company, for example, employs 2 distinct codebases, Java and JavaScript, which have 3 and 2 deployments respectively, each in two similar-but-not-the-same environments (in-house and white-label). We could easily split those deployments into twice or 5x the number, we could also join them, this just happens to be where things naturally settled for the time being.

Post reply on HN