?

Log in

animated-1

109 in ru_sysarchitect

versioning

я тут ломаю голову над проблемой, которая кажется достаточно стандартной, чтобы по её поводу уже были придуманы стандартные паттерны решения. поэтому прошу помощи зала.

есть, значица, распределённая система, части которой обмениваются данными через pub-sub механизм. producer берёт rich C# object/data contract, бинарно сериализует, сжимает, шифрует, кладёт в queue. consumer, соответственно, читает, дешифрует, разжимает, десериализует и получает опять rich C# object, с которым удобно манипулировать.

теперь, предположим, мы выкатываем апдейт, в котором добавляем в наш data contract ещё одного data мембера. проапдейтить одновременно всех продюсеров и консьюмеров невозможно, их слишком много, у каждого своё maintenance window, и вообще.

поэтому надо как-то сделать, стандартным образом, чтобы не только новый consumer не ломался, когда читает старую версию объекта, но и старый consumer не ломался, когда читает новую.

сериализация - стандартная дотнетовская, с помощью BinaryFormatter, если что.

Update: всем спасибо, взял protobuf.

Comments

BinaryFormatter вроде так не умеет делать. Можешь другую сериализацию попробовать. Что-нибудь такое, например: http://code.google.com/p/protobuf-net/