News for hackers. Stuff that matters.
Re:Microservices Ending Up as a Distributed Monolith by deepsun on Thursday March 03, 2016 @09:39PM (#11221701)
I don't understand how Guava couples my services, could anyone explain me?

Let's say I have service A that uses Guava v18, and service B that uses Guava v19. Neither of them care what other one use, all they see is RPC (or HTTP) calls.

Re:Microservices Ending Up as a Distributed Monolith by Randgalt on Thursday March 03, 2016 @11:33PM (#11222058)
I was the guy at Netflix that had the task of moving the Company from Guava 10 to Guava 11. Guava 11 was backward-incompatible with Guava 10. On the Platform team (produced libraries the entire company consumed) we could only move to Guava 11 if EVERYONE moved to Guava 11. The only alternative would have been to shade Guava 11 into the platform library which wasn't pleasant.
Re:Microservices Ending Up as a Distributed Monolith by BurningFrog on Thursday March 03, 2016 @11:47PM (#11222090)
That sounds like a real impractical way to run a platform team.

Moving the entire company codebase at the same time may be possible with a dozen developers, but when you reach Netflix size it seems impossible.

What am I missing?

Re:Microservices Ending Up as a Distributed Monolith by Randgalt on Friday March 04, 2016 @12:02AM (#11222127)
It wasn't practical. But that's what we had at the time.
Re:Microservices Ending Up as a Distributed Monolith by hardwaresofton on Friday March 04, 2016 @02:29AM (#11222497)
Just to chime in here -- I think this is a relatively common happening. I've found that companies with lots of teams developing software often look to "standardize" the software being used to create things like web services/pieces of infrastructure.

This often starts with creating a local nexus server (in java land), then is followed relatively quickly by creating a "X company commons" for "everyone" to use.

Re:Microservices Ending Up as a Distributed Monolith by BurningFrog on Friday March 04, 2016 @11:28AM (#11224816)
I see :)

That kind of problem is tricky, since nobody decided to make it that way.

A system worked great when it was instituted, and was never changed, but is now no longer good.

Anyway, if/when I become Netflix CTO, I will make sure this is fixed!

Re:Microservices Ending Up as a Distributed Monolith by Randgalt on Sunday March 06, 2016 @03:30PM (#11235395)
I should mention that the reason this was such a huge problem was that our dependency system at the time gave each group the option of using the "latest" version of the platform library instead of fixed version. Everyone used it. If, instead, people had locked to a known version of the library it would've been so much easier to upgrade.
Re:Microservices Ending Up as a Distributed Monolith by foota on Friday March 04, 2016 @02:30AM (#11222502)
What is shading a library?
Re:Microservices Ending Up as a Distributed Monolith by thecatspaw on Friday March 04, 2016 @02:53AM (#11222548)
I was curious as well, so I went looking: http://stackoverflow.com/a/13620420/4563079

relevant part: "For example, I am developing Foo library, which depends on a specific version (e.g. 1.0) of Bar library. Assuming I cannot make use of other version of Bar lib (because API change, or other technical issues, etc). If I simply declare Bar:1.0 as Foo's dependency in Maven, it is possible to fall into a problem: A Qux project is depending on Foo, and also Bar:2.0 (and it cannot use Bar:1.0 because Qux needs to use new feature in Bar:2.0). Here is the dilemma: should Qux use Bar:1.0 (which Qux's code will not work) or Bar:2.0 (which Foo's code will not work)?

In order to solve this problem, developer of Foo can choose to use shade plugin to rename its usage of Bar, so that all classes in Bar:1.0 jar are embedded in Foo jar, and the package of the embedded Bar classes is changed from com.bar to com.foo.bar. By doing so, Qux can safely depends on Bar:2.0 because now Foo is no longer depending on Bar, and it is using is own copy of "altered" Bar located in another package."

Re:Microservices Ending Up as a Distributed Monolith by foota on Saturday March 05, 2016 @08:34PM (#11232060)
So it's like name mangling for libraries?
Re:Microservices Ending Up as a Distributed Monolith by fs111 on Friday March 04, 2016 @09:16AM (#11223783)
Friends don't let friends use guava.
Re:Microservices Ending Up as a Distributed Monolith by Randgalt on Friday March 04, 2016 @06:42PM (#11227615)
Guava is what happens when the owner of a widely used technology is inept. Java is in much better shape today.
Re:Microservices Ending Up as a Distributed Monolith by alcima on Thursday March 03, 2016 @10:35PM (#11221913)
I think his point is that if ALL of your services have to use Guava (perhaps because you included some functionality that only Guava provides) then you have coupled your service to Guava. You can't use nodejs to build a service.
Re:Microservices Ending Up as a Distributed Monolith by skybrian on Thursday March 03, 2016 @10:33PM (#11221904)
That assumes they were written independently. But if your services have a large heap of shared libraries in common, they all need to work together. Then when you upgrade Guava, there may be a lot of code to fix.
Re:Microservices Ending Up as a Distributed Monolith by deepsun on Saturday March 05, 2016 @09:57PM (#11232272)
Thank you. But if my services have a large heap of shared libraries in common, it's by definition a monolith. With Guava, or without. I shouldn't call it "microservices architecture" in the first place.

What I always meant by "microservices" is whatever servers talking to each other by some kind of RPC, e.g. Protobuf in Google (HTTP+JSON works as well if you don't operate terabytes). Then it doesn't matter what Guava version, or even what programming language my services are written in, as long as they support RPC format (e.g. Protobuf).

So I conclude that original post author does microservices wrong. Or just don't understand what he's talking about. Sad to see it on InfoQ.

Re:Microservices Ending Up as a Distributed Monolith by hatchoo on Thursday March 03, 2016 @09:59PM (#11221788)
I don't get it either. If I use Spring WS to provide the endpoints, how does it make it a monolith? It's always using the right tool for the right job but if one set of libraries are the right tools, why not use it across everything where appropriate.
Re:Microservices Ending Up as a Distributed Monolith by jupp0r on Thursday March 03, 2016 @10:36PM (#11221920)
One of the benefits of microservices are your ability to choose the right tools for each of them instead of a common denominator. I don't know about Spring WS, but if it makes harder for ie a Go microservice (or whatever makes sense for your domain) to talk to your service then I would consider it a liability.