Дизайн на шлюза
Разберете идеята за реализация на заключването: 1. Започнете, като създадете директория като заключване (znode), което обикновено се използва за описание на заключената единица, наречена :/lock_node 2. Клиентът, който иска да получи заключването, създава znode в директорията с заключване като дъщерен възел на lock/lock_node, а типът възел е Ordered Temporary Node (EPHEMERAL_SEQUENTIAL); Например, два клиента създават znode, /lock_node/lock-1 и /lock_node/lock-2 3. Текущият клиент извиква getChildren(/lock_node), за да получи всички дъщерни възли на директорията с заключване, без да задава watch, и след това да вземе братските възли, които са по-малки от него (създадени в стъпка 2). 4. Възелът, който е по-малък от себе си в стъпка 3, не съществува и и най-малкият възел е същият като този, създаден в стъпка 2, което показва, че текущият клиентски последователен номер е най-малък, вземи заключването и край. 5. Клиентът следи състоянието на подредения временен възел, който е следващият по малкост след него 6. Ако статусът на наблюдавания подвъзел се промени, преминете към стъпка 3 и продължете последващите операции, докато заключващата надпревара бъде прекратена.
Авторът няма да въвежда заключването на разпределението тук, нека разгледаме блок-схемата на целия дизайн на кода по следния начин
|