2008-12-19 update протокол
December 19th, 2008 by Vasil KolevНа рождения ден на Венски с Бачийски почнахме интересен разговор за масов update на вече deploy-нат софтуер (писан на скриптов език, но май няма чак такова значение). Той искаше да смъкне времето за deployment под текущите 45 секунди, и мисля да опиша една от идеите, които ми хрумна, а после Пенчев (който участваше в дискусията) да и намира кусури.
Основният принцип е следният – един сървър пуска по multicast пакети с update (във вид на diff например), а машините го поемат и слагат. Ето и принципно как би трябвало да работи протокола:
1. Главният сървър пуска към multicast групата един пакет, че следва update.
2. Изчаква timeout T1 и ако някой не отговори (той има списък с машините) праща пак.
3. Стъпка 2 се повтаря 3 пъти, ако има не-отговорила машина, се вади от списъка и се праща notification.
4. Изпраща се update, разделен на пакети, като всеки пакет:
4.1. Съдържа ID на update (пореден), като всеки клиент има списък с updates които е получил
4.2. Номер на пакета в update (за да се следи за загуби)
4.3. Подпис на пакета (md5sum на съдържанието + shared secret)
4.4. Diff в някакъв вид.
5. Всеки клиент, получил update:
5.1. Проверява дали вече не го е apply-нал, и ако да, не му обръща внимание, само праща обратно потвърждение
5.2. Ако има дупки в него, не праща потвърждение.
5.3. Ако update не е пореден на предишния приложен, не праща потвърждение и известява администраторите.
5.4. Ако е получил целия update, проверява дали може да бъде приложен. Ако не – праща известяване и не потвърждава.
5.5. Ако е получил целия update без проблеми и може да се приложи – прилага го, отбелязва, че е приложен и праща потвърждение.
6. Ако централният сървър за timeout T2 не получи потвърждение от всички, повтаря т.4 три пъти. За тези, от които не е получил потвърждение, известява администраторите.
Спорът е, дали протоколът има някакви сериозни проблеми и дали може да бъде реализиран в рамките на ден-два от нормален програмист (не мързел като мен). Също така, дали някой не му е хрумнало да напише такова нещо :)