📱Программист будущего.
Давайте представим, что вы — инженер, и вам дали задачу разработать устройство для складывания шара в коробку.
Условный middle-инженер сразу же задумается о системе в целом и задастся вопросами:
1. Особенности составных частей — хрупкий шар сложнее укладывать в жесткую коробку
2. Жизненный цикл — если коробка будет расположена вверх ногами или в невесомости, то будет важно, должен ли шар оставаться в коробке после формального попадания в нее
3. Условия среды эксплуатации — взрывоопасный шар на жаре требует более бережного обращения, а в движущуюся коробку не так просто положить шар, как и в случае, если шары нужно укладывать в коробку тысячу раз в секунду
4. Взаимодействие в рамках системы — в коробке уже могут быть шары, шары в коробку могут укладывать сразу несколько устройств
5. Срок службы — если устройство нужно отправить в другую галактику, это потребует совершенно иного подхода
Теперь возьмем middle-программиста и попросим его логировать последовательность каких-то событий в рамках микросервисной архитектуры.
Ну что может быть проще?!
Условная функция now() возвращает нам временную метку UTC. Логируем каждое событие вместе с меткой, сортируем по ней — profit!
А теперь подключим к этой задаче инженера.
Сразу выяснится масса интересных подробностей.
Время разных микросервисов может отличаться — его регулярно нужно синхронизировать. В лучшем случае между собой, но и этого недостаточно: компьютеры работают с временем UTC, которое поддерживается в синхронизации с астрономическим временем UT1 — основанным на вращении земли.
Земля вращается неравномерно, слегка замедляясь.
Из-за этого время UTC где-то раз в год имеет дополнительную секунду (високосную), чтобы оставаться согласованным с временем TAI, измеряемым сверхстабильными цезиевыми часами.
Поэтому мы не можем полагаться на микросекундную точность UTC при определении строгого порядка событий.
Если ваша система требует логирования миллионов событий в микросекунду, придётся учитывать високосную секунду.
К примеру, сервера Google «размазывают» ее в течение суток, в конце которых она появляется.
Инженерное мышление оценивает не только абстракции, а также связь этих абстракций с реальность. Инженер думает не только о том, как заставить систему работать, но и о том, как сделать так, чтобы она не перестала работать, когда в неё приходят люди, время и хаос.
Программист будущего будет делать так же.
____
Подписывайтесь и ставьте огоньки (@fyrnin_it).
Post #13
281

- 🔥 20