Мир не идеален. В любой момент что-то может пойти не так. К счастью, большинство из нас не запускает ракеты в космос и не строит самолеты.

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

Люди не идеальны. Мы постоянно делаем ошибки. Делаем опечатки, мы можем забыть что-то или поддаться лени. Человек может банально забухать или попасть под машину.

Железо не идеально. Жесткие диски умирают. Датацентры теряют каналы. Процессоры перегреваются и электрические сети выходят из строя.

Софт не идеален. Память течёт. Коннекты рвутся. Реплики ломаются и данные уходят в небытие.

Shit happens - как говорят наши заокеанские друзья. Что же мы можем со всем этим сделать? А ответ банален до простоты - ничего. Мы можем вечно тестировать, поднимать тонну окружений, копировать продакшн и держать сто тысяч резервных серверов, но это все равно не спасет: мир не идеален.

Единственный верное решение здесь - это смириться. Нужно принять мир таким какой он есть и минимизировать потери. Каждый раз настраивая новый сервис нужно помнить - он сломается в самый неподходящий момент.

Он обязательно сломается. Ты обязательно сделаешь ошибку. Железо обязательно выйдет из строя. Кластер обязательно рассыпется. И по законам этого неидеального мира - это случится именно тогда, когда ты этого меньше всего ожидаешь.

Что делает большинство из нас что бы обмануть всех (в том числе и себя)? - Мы настраиваем алерты. Мы пишем хитрые метрики, собираем логи и создаем алерты, тысячи, сотни тысяч алертов. Наши почтовые ящики переполнены. Наши телефоны разрываются от смс и звонков. Мы сажаем целые этажи людей смотреть на графики. А когда в очередной раз мы теряем доступ к сервису, начинаются разборы: что же мы забыли замониторить.

Все это лишь видимость надежности. Никакие алерты, метрики и мониторинги не помогут.

Сегодня тебе позвонили, и ты починил сервис - никто и не заметил, что что-то сломалось. А завтра ты уехал в горы. А послезавтра забухал. Люди не идеальны. К счастью мы инженеры, живем в неидеальном мире и учимся его побеждать.

Так почему же надо просыпаться по ночам или утром вместо кофе читать почту. Почему бизнес должен зависеть от одного человека и от его работоспособности. Почему. Я не понимаю.

Я лишь только понимаю, что так жить нельзя, и я не хочу так жить. А ответ прост: Автоматизируй это (да, именно с большой буквы). Нам нужны не просто алерты и звонки по ночам. Нам нужны автоматические реакции на эти сообщения. Мы должны быть уверены, что система может починить себя сама. Система должна быть гибкой и уметь изменяться.

К сожалению, у нас пока нет достаточно умного ИИ. К счастью, все наши проблемы формализуемы.

У меня нет серебрянной пули, но зато у меня есть Proof of Concept для AWS.

AWS Lambda

Serverless - в первую очередь, то, что не запущено сломаться не может.
Event based - получили событие, обработали, выключились.
Умеет JVM - а значит, можно использовать весь опыт из Java мира (и значит, что я могу использовать Clojure).
3d-party - Не нужно следить за AWS Lambda и поддерживать.

Pipeline выглядит следующим образом:
Событие -> SNS Topic -> AWS Lambda -> Реакция

К слову, SNS topic может иметь несколько endpoints. Значит, можно банально добавить почту и получать так же уведомления. А можем расширить lambda функцию и сделать уведомления намного полезнее: например, слать алерты сразу вместе с графиками или добавить отправку SMS.

Целиком пример одной Lambda функции можно найти по ссылке: github.com/lowl4tency/aws-lambda-example
Лямбда функция прибивает все ноды в ELB не в состоянии inService.

Разбор кода

В данном примере мы будем убивать все ноды которые не находятся в состоянии InService. К слову, вся Lambda функция занимает ~50 строк кода в одном файле, а значит простота поддержки и легкость входа.

Любой проект на Clojure начинается с project.clj

Я использовал официальный Java SDK и прекрасную библиотечку Amazonica , которая является враппером для этого SDK. Ну и что бы не тащить много лишнего, исключаем те части SDK, которые нам не понадобится

] ] ] ]]
Для большей гибкости каждой Lambda функции я использую конфигурационный файл с самым обычным edn . Для того что бы получить возможность обрабатывать события нам нужно немного изменить объявление функции

(ns aws-lambda-example.core (:gen-class:implements )
Точка входа. Читаем событие на входе, обрабатываем данное событие с помощью handle-event и пишем в поток JSON в качестве результата.

(defn -handleRequest "Parser of input and genarator of JSON output" (let (-> (io/reader is) json/read (-> (io/reader is) json/read walk/keywordize-keys handle-event (json/write w)) (.flush w))))
Рабочая лошадка:

(defn handle-event (let (when (seq unhealthy) (pprint "The next instances are unhealthy: ") (pprint unhealthy) (ec2/terminate-instances:instance-ids unhealthy)) {:message (get-in event [:Records 0:Sns:Message]) :elb-instance-ids (mapv:instance-id instances)}))

Получаем список нод в ELB и фильтруем их по статусу. Все ноды, которые в состоянии InService удаляем из списка. Остальные терминейтим.

Все что мы печатаем через pprint попадет в логи CloudWatch. Это может быть полезно для дебага. Так как у нас нет постоянно запущенной лямбды и нет возможности подключиться к REPL это может быть довольно полезно.

{:message (get-in event [:Records 0:Sns:Message]) :instance-ids (mapv:instance-id instances)}))
В данном месте вся структура, которуя сгенерим и возвратим из этой функции будет записана в JSON и увидим в результате выполнения в Web интерфейсе Lambda.

В функции unhealthy-elb-instances фильтруем наш список и получаем instance-id только для тех нод, которые ELB посчитал нерабочими. Получаем список инстансев и фильтруем их по тегам.

(defn unhealthy-elb-instances (->>
В функции get-elb-instances-status вызываем АПИ метод и получаем список всех нод со статусами для одного определенного ELB

(defn get-elb-instances-status (->> (elb/describe-instance-health:load-balancer-name elb-name) :instance-states (map get-health-status)))
Для удобства убираем лишнее и генерируем список только с информацией которая нам интересна. Это instance-id и status каждого instance.

(defn get-health-status {:instance-id (:instance-id instance) :state (:state instance)})
И фильтруем наш список, убирая те ноды, что находятся в состоянии InService.

(defn unhealthy-elb-instances (->> instances-status (remove #(= (:state %) "InService")) (map:instance-id)))
И это всё: 50 строк, которые позволят не просыпаться по ночам и спокойно ехать в горы.

Deployment

Для простоты деплоймента я использую простой bash-script

#!/bin/bash # Loader AWS Lambda aws lambda create-function --debug \ --function-name example \ --handler aws-lambda-example.core \ --runtime java8 \ --memory 256 \ --timeout 59 \ --role arn:aws:iam::611066707117:role/lambda_exec_role \ --zip-file fileb://./target/aws-lambda-example-0.1.0-SNAPSHOT-standalone.jar
Настраиваем алерт и прикручиваем его к SNS topic. SNS topic прикручиваем к лямбде как endpoint. Спокойно едем в горы или попадаем под машину.

К слову, за счет гибкости можно запрограммировать любое поведение системы и не только по системным, но и по бизнес-метрикам.

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

Мы стремимся к идеальности во всем. Хорошо учиться, не делать никаких ошибок, работать допоздна, построить идеальные отношения, воспитать ребенка вундеркинда, выглядеть как спортсмен или модель. Мы выставляем себе самую высокую планку, а потом страдаем от своего перфекционизма. Желание добиться наилучшего результата в любом деле делает человека слабее, несчастнее и грустнее.

Лучшее - враг хорошего. Эту пословицу мы слышим с детства, но не часто задумываемся насколько она мудра. Уильям Шекспир, в трагедии «Король Лир», также писал: «Стремясь к лучшему, мы часто портим хорошее». Чрезмерным усердием мы часто портим то, что было до этого было уже хорошо.

Стремление к идеальности губит нашу жизнь. Либо идеально, либо плохо? Постоянная гонка за идеальным результатом отнимает все время, забирает все силы, отвлекает от главного, мешает достичь других целей и делает несчастным.

1. Неидеальность и общение с окружающими

Многие люди пытаются вести себя идеально с другими, но у них мало друзей, они не пользуются популярностью и часто одиноки. Это как отличники в школе. Идеальность скучна и отдает холодом. Самые лучшие друзья и приятели имеют кучу недостатков. Они испорчены, делают ошибки и далеко не похожи на идеального человека. Но этим они похожи на других. Нас привлекают люди, стремящие быть собой, а не искусственным шаблоном. С ними приятно веселиться, делать глупости и дружить.

2. Неидеальность лучше для отношений и любви

Есть девушки которые следят за своей внешностью и стараются стать идеальными моделями с глянцевого журнала. Они заморочены на внешности и поведении. Девушки, пытавшиеся стать идеальными, зажаты, имеют кучу комплексов и повернуты совсем не на том. Отношения с такой девушкой не сделают мужчину счастливым. Она будет доставать мужика своими проблемами и требовать от него соответствия идеалу мужчины. Это утомительно и напрягает. Секс с такими девушками будет скучен и тухлый. Идеальная красотка будет думать о том, как она выглядит в каждый момент времени и не растрепались ли у нее волосы. Неидеальная девушка может сеть в джинсах на ступеньки, подвязать волосы наушниками, отправиться в поход с минимумом вещей и заняться сексом там, где вам этого хочется, а не только в королевском номере класса люкс. Неидеальные девушки умеют радоваться жизни, получать наслаждение и веселиться. Именно с такой подружкой легко стать счастливым.

3. Неидеальность и успех

Перфекцианизм погубил многих перспективных людей и дел. Гонка за идеальностью не дает нам смотреть на все более широко. Мы заморачиваемся на мелочах доводя до совершенства, забывая о других делах. Мы ставим себе бесконечные и недостижимые цели. Это отнимает все время и силы, которые нам нужны в других местах.

Стремление к идеальности только губит нас. Мы становимся несчастливы, не можем достичь своих целей и мечтаний из-за того, что погрязли в ненужных вещах.

Быть неидеальным лучше. Ты будешь счастливым и более успешным.

На вопрос Почему люди не идеальны? заданный автором Иван Макаров лучший ответ это идеал это скучно

Ответ от Колосовые [гуру]
Потому что представление об идеале у каждого своё.


Ответ от Єеникс [гуру]
Идеальных людей нет и не может быть.


Ответ от Недоросль [гуру]
Пожалуйста, ща раскидаем по полкам вопрос))
_
Давай допустим, что существует некий человек, который идеален. А теперь представь, что его будут оценивать не идеальные, и именно те, чьи мерки и понимания искажены. В идеале эти наблюдатели найдут в идеале - точно того же кто они сами, и искажения, которые они в нем увидят - это ИХ СОБСТВЕННЫЕ ИСКАЖЕНИЯ.
_
Во вторых, хотя это надо было делать с самого начала. Надо выяснить что такое ИДЕАЛЬНОЕ. То что идеально для одного - для другого - туфта последняя. Поэтому чтобы мерить кого-то или что-то по меркам идеальности надо, как выяснили изначально, - быть самому идеальным, во вторых надо избрать не относительные, а УНИВЕРСАЛЬНЫЕ мерки идеальности, те мерки, которые являются законами, только не законами физики, а законами тонкого.
_
В третих. Мы не может с уверенностью сказать, что неидеальность - это неидеальность. Есть такое понятие как совершенство несовершенного. Например природу с острыми скалами, и обрывами и оврагами где можно не только ноги переломать но и убиться к чертям - называют совершенной, а человек с такими же рытвинами и оврагами в характере уже как бы не идеален получается и воспринимается как ФИИИИИ (так не канает!! ! =)) . Все что существует, уже не противоречит никаким законам, в противном случае это бы не существовало. А совершенство - это то к чему стремится развитие, и достигает ли когда-то мы не знаем.. . Вероятно, просто стремится. Когда растение растет и тянется к свету, это не значит что оно поставило цель дорасти до солнца, но оно стремится к нему стать ближе, все таки целеполагает солнце.


Ответ от Невроз [гуру]
всё дело в эмоциях у людей в физике есть у чего-то эмоции


Ответ от Дядя Никита [гуру]
нет, не должны - иначе они должны были быть шарами или кругами - потому что шары и круги - идеальные фигуры


Ответ от Dragon [эксперт]
Почему вы думаете что люди не идеальны? У людей есть самая идеальная способность - способность к саморазвитию. Человек может превзойти самый большой идеал и потом еще дальше развиваться. А что более идеально чем то что может превзойти все идеалы?


Ответ от Ol9sik [гуру]
Человек совершенен своим несовершенством.. . Как сказал один герой в одном фильме: "Мне не нужна идеальная женщина. идеальную трудно надувать... "


Ответ от Виталик Косой глазик [новичек]
Есть идеальные наверняка 1 человек точно есть


Ответ от Вероника [гуру]
Если бы все были идеальны, к чему стремиться? Так никогда не будет.


Ответ от Lenkin [гуру]
Я так же думал.


Ответ от Галина Филянова [гуру]
не идеальны, какие люди - старые, молодые, женщины, мужчины. . ?у всех свои идеалы


Ответ от Mikhail Levin [гуру]
чего ты нашел идеального в законах физики? Почитай квантовую механику!
И почему идеальными должны быть именно люди, а не динозавры или вирусы гриппа?


Ответ от White Rabbit [гуру]
"Здесь есть вообще адекватные люди, которые хоть немного способны к рассуждению? "
В том-то и дело, что отвечают тебе люди, способные к рассуждениям, а не к пустой и безграмотной болтовне, которую ты, видимо, по наивности своей считаешь за умную.. .
Что такое "идеальный"?
Из чего следует что люди (не отдельный человек - а люди!) не идеальны?
С чего ты взял, что законы (?!) физики идеальны?


Не существует идеальных людей, существуют люди, скрывающие свои недостатки. (Щетинин Михаил)

Идеал - это путеводная звезда. Без нее нет твердого направления, а нет направления - нет жизни. (Лев Николаевич Толстой)

Всякий человек, великий или малый, бывает поэтом, если видит из-за своих поступков идеал. (Генрик Ибсен)

Не следует думать, что совершенствованию способствует только безупречно чистое и высоконравственное. Все великое формирует человека. (Иоганн Вольфганг Гёте)

Наверное, самое трагическое из несовершенств несовершенство человека. (Евгений Михайлович Богат)

Люди редко совершенствуются, если у них нет другой модели для подражания, кроме самих себя. (Оливер Голдсмит)

Человек никогда не бывает так близок к совершенству, как при заполнении анкеты на работу. ()

Жалок тот, кто живет без идеала! (Иван Сергеевич Тургенев)

Хорошие друзья, хорошие книги и спящая совесть, - вот идеальная жизнь. (Марк Твен (Сэмюэл Ленгхорн Клеменс))

Не возвышайте себя путем унижения других. Это бесполезно. Ваш уровень все равно проявится в самый неподходящий для вас момент. Лучше совершенствуйтесь. ()

Существенная часть нашего совершенства состоит в том, чтобы замечать наши несовершенства. (Франсуа Ламот-Левайс)

Не держитесь слишком усердно за ваши недостатки под тем предлогом, что совершенство не от мира сего. (Жюль Ренар)

Уничижение есть, собственно, не что иное, как сравнение своего личного достоинства с моральным совершенством. (Иммануил Кант)

Идеал - это манера брюзжать. (Поль Валери)

Совершенство самую малость скучно. Вот поистине ирония жизни: то, к чему мы все стремимся, оказывается лучше, когда оно достигнуто не полностью. (Уильям Сомерсет Моэм)

Власть и выгода, блеск и слава: кто не касается их, тот воистину чист. Но тот, кто касается, а не имеет на себе грязи, тот чист вдвойне. Многознайство и хитроумие, сметливость и проницательность: кто лишен их, тот воистину возвышен. Но тот, кто ими наделен, а не пользуется, тот возвышен вдвойне. (Хун Цзычэн)

Идеальных женщин так же мало, как идеальных мужчин, но встречаешь их чаще. (Хильдегарда Кнеф)

С тем, кто отрицает идеал, может легко случиться, что он пошлое примет за прекрасное. (Иоганн Вольфганг Гёте)

Наш идеал - не кастрированное, лишенное телесности, отвлеченное существо, наш идеал, это - цельный, действительный, всесторонний, совершенный, образованный человек. (Людвиг Андреас Фейербах)

Идеал в тебе самом. Препятствия к достижению его - в тебе же. Твое положение есть тот материал, из которого ты должен осуществить этот идеал. (Томас Карлейль)

Нет ничего столь совершенного, чтобы быть свободным от всяких упреков. (Эзоп)

Если даже ты хочешь быть только своим идеалом, тебе придется принудить к этому весь свет. (Фридрих Ницше)

Только сознание общих задач и конечных идеалов делает человека стойким и последовательным. (Семен Людвигович Франк)

Совершенный человек все ищет в себе, ничтожный - в других. (Конфуций (Кун-Цзы))

Мой глаз видит идеалы других людей, и зрелище это часто восхищает меня; вы же, близорукие, думаете, что это - мои идеалы. (Фридрих Ницше)

Усилие есть необходимое условие нравственного совершенствования. (Лев Николаевич Толстой)