▲ | vouwfietsman 6 days ago | |||||||||||||||||||||||||
I get that. The point is that its hard to prevent asymmetry in message versions if you are working with many communicating systems. Lets say four services inter-communicate with some protocol, it is extremely annoying to impose a deployment order where the producer of a message type is the last to upgrade the message schema, as this causes unnecessary dependencies between the release trains of these services. At the same time, one cannot simply say: "I don't know this message version, I will disregard it" because in live systems this will mean the systems go out of sync, data is lost, stuff breaks, etc. There's probably more issues I haven't mentioned, but long story short: in live, interconnected systems, it becomes important to have intelligent message versioning, i.e: a version number is not enough. | ||||||||||||||||||||||||||
▲ | kiitos 2 days ago | parent | next [-] | |||||||||||||||||||||||||
> Lets say four services inter-communicate with some protocol, it is extremely annoying to impose a deployment order where the producer of a message type is the last to upgrade the message schema i don't know how you arrived at this conclusion the protocol is the unifying substrate, it is the source of truth, the services are subservient to the protocol, it's not the other way around also it's not just like each service has a single version, each instance of each service can have separate versions as well! what you're describing as "annoying" is really just "reality", you can't hand-wave away the problems that reality presents | ||||||||||||||||||||||||||
▲ | 1718627440 2 days ago | parent | prev | next [-] | |||||||||||||||||||||||||
> one cannot simply say: "I don't know this message version, I will disregard it" because in live systems this will mean the systems go out of sync, data is lost, stuff breaks, etc. You already need to deal with lost messages, rejected messages, so just treat this case the same. If you have versions surely you have code to deal with mismatches and e.g. fail back to the older version. | ||||||||||||||||||||||||||
▲ | sevensor 6 days ago | parent | prev [-] | |||||||||||||||||||||||||
I think I see what you’re getting at? My mental model is client and server, but you’re implying a more complex topology where no one service is uniquely a server or a client. You’d like to insert a new version at an arbitrary position in the graph without worrying about dependencies or the operational complexity of doing a phased deployment. The result is that you try to maintain a principled, constructive ambiguity around the message schema, hence asymmetrical fields? I guess I’m still unconvinced and I may have started the argument wrong, but I can see a reasonable person doing it that way. | ||||||||||||||||||||||||||
|