Стивен Хокинг — Краткая история времени


Что было в начале времени? Чем научная теория отличается от ненаучной? И что общего имеют черные дыры и сотворение мира? Это часть вопросов, свой ответ на которые даёт Хокинг.

Книга очень понравилась.

Хокинг последовательно описывает как устроена вселенная с точки зрения современной (на момент написания книги) физики. И что ещё более ценно не только это, но и развитие представлений о мире, времени и пространстве. Как мы пришли от птолемеевской картины мира с Землёй в центре вселенной к современной сложной модели с относительным временем, корпускулярно-волновым дуализмом, кварками и античастицами. При этом, как автор и обещает в начале книги, в ней нет формул и для понимания хватает моих давних, ещё наверно школьных знаний физики.

Isaac Asimov — Second Foundation

Третья книга серии продолжает радовать.

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

Galaxy! When can a man know he is not a puppet? How can a man know he is not a puppet?

Brendan Burns — Designing distributed systems

Книга представляет собой обзор паттернов разработки распределенных приложений используя контейнеризацию.

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

Sidecar — второй контейнер рядом с основным, расширяющий его функциональность. Как теория ок. Примеры автор приводит сначала про добавление поддержки https к легаси системе — наверно имеет право на жизнь, если легаси настолько старое, что и правда засунуть его в контейнер будет проще. Следующий пример понравился уже сильно меньше — контейнер который добавляет мониторинг соседнего и некую веб морду с данными о использовании ресурсов. Имхо для таких целей нужен все таки какой-то централизованный мониторинг причем с графиками по времени и т.п. типа как даёт заббикс. Поэтому пример выглядит нежизненным. Третий пример про реализацию доставки изменений через гит репозиторий посредством контейнера который в цикле делает пулл из него. Ну такое. Имхо правильным будет всё-таки когда доставку изменений производит сторонняя система по событию пуша в гит репозиторий, а не трата ресурсов на пулл в цикле.

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

Ambassador — через второй контейнер происходит взаимодействие с внешним миром. От первого примера про шардинг у меня знатно подгорело. Пример собственно про то, что сделаем шардинг редиса так, чтобы для приложения он был как будто один и нам его менять не пришлось. Поднимают 3 независимых редиса, и контейнер-прокси запросы к себе распределяет на них. Ааааа! Кластер редиса делает это сам по себе из коробки, давая при этом ещё и отказоустойчивость. А если заменить редис на какую-то не key-value базу — то там так просто на прокси запросы от приложения не поделишь, совсем приложение не трогая. Другие примеры — сервис-брокер для сервис-дискавери и канареечный релиз / дублирование продакшн трафика на тестовое окружение. Первый да, могу понять, если сервис-дискавери делается не посредством днс. Со вторым так и не смог для себя придумать, когда это было бы полезно делать со стороны клиента, а не сервера принимающего запросы — тестировать то мы будем изменение поведения сервера.

Адаптер. Похоже на амбассадора по сути, но смысл использования — предоставление интерфейса, который основной контейнер не предоставляет. Тут у меня наконец-то вопросов не возникло. И кейсы с мониторингом редиса и изменением формата логов понятные.

Дальше в книге начинаются паттерны для распределенных систем и там уже все выглядит вполне понятно, но в то же время и весьма лайтово (сильно лайтовее книги с кабанчиком). Рассматриваются шардирование, реплики стейтлесс сервисов, scatter/gather паттерн (отправка запросов сразу на несколько серверов и объединение ответа от них в ответ пользователю). Примеры по прежнему не впечатляют, но уже скорее из-за своей простоты. Например пример где делают консистент хешинг на nginx, но при этом на фиксированном в конфиге числе апстримов, учитывая что до этого шла речь про изменение числа шардов, ожидал бы тут какой-то пример, где это самое число шардов можно было бы менять на лету.

Следующая глава посвящена FAAS — function as a service. Общие рассуждения о применимости, удобстве и экономической обоснованности при разной нагрузке полезны. А вот первый предлагаемый пример использования странный — предлагается декоратор по такой схеме: пользователь -> декоратор -> основное приложение. Если декоратор условная лямбда на Амазоне, то если ответ идёт по тому же пути, то декоратор висит все время запроса и мы платим за все это время. Чтобы эта схема была экономически не провальна, мне кажется, нужно усложнять получение ответа от основного приложения в таком сценарии, что никак не согласуется со сценарием — просто добавим декоратор на FAAS, чтобы не править основное приложение.

Выбор мастера и владение (ownership) ресурсом. Первая глава в книге, к которой у меня нет претензий. Более того — она дала мне очень важный инсайт, т.к. на самом деле речь в ней идёт о распределенном локе. Распределенные локи активно используются у нас в коде ( реализованы через редис ). И почему-то раньше я не задумывался о том, чтобы использовать их же для того, чтобы только один наш демон читал определенную очередь (по пулл модели), а думал как-то дополнительно прикручивать zookeper и какой-то более сложный механизм выбора мастера. Глава дала хорошую пищу для размышлений. Также полезной была мысль, что хотя современный оркестратор способен обеспечивать некоторые гарантии fault tolerance, перезапуская упавший контейнер и перенося его с упавшей машины — этого недостаточно при частом деплое.

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

Общее ощущение от книги — она простовата и наверно скорее полезна как обзорная для новичков. Примеры скорее учебные и не очень близки к реальным. Но в целом прочитать было полезно.

Андрей Курпатов — Красная таблетка

Смешанное впечталение осталось от книги, как от пирожного с песком 🙂

Так что дальше + и — в порядке в каком они приходят в голову:

+ много ссылок на исследования по работе мозга
— почти все из них я уже слышал (не знаю, можно ли это засчитывать в минус книги, но ее ценность для меня оно явно снижает)
— какая-то сумбурность, есть ощущение как будто автор просто скачет с одной мысли на другую, без особой связи между ними (особенно между главами)
— сначала вообще хотел бросить читать, т.к. рассуждения вида «ваше сознание ничем на самом деле не управляет, так что на свою жизнь вы влиять не можете, хаха» — мне не нравятся и я с ними не согласен.
— ближе к концу книги автор как-то переходит на прямо противоположное утверждение, что надо прокачивать мозг, заставлять его думать, при этом или он так и не объяснил, как это сочетается со сказанным им в первой главе, или объяснил как-то так, что я это объяснение не понял и упустил.
+ но при этом понравилась метафора, что сознание — это как фонарь освещающий какую-то часть темноты, в которой на самом деле продолжают параллельно происходить множество других процессов.
+ понравились рассуждения про мультиличность, что не бывает личности самой по себе, а проявляется она в социальном взаимодействии
+ также объяснение прокрастинации в соц. сетях и сравнение ее с подсадкой на наркотик и экспериментом с крысой и кнопкой, возбуждающей дофаминовые центры в мозгу (хотя сравнение и не новое и уже встречалось, но тут как-то хорошо написано)
— ну и несколько раздражала сама манера подачи информации, когда какие-то факты и рассуждения перемежаются снисходительными обращениями к читателю, как будто от лица некоего гуру. Возможно так оно лучше продаётся, не даром автор написал не одну книгу, ставшую бестселлером, но я не в восторге.

Isaac Asimov — Foundation and Empire

Вторая часть классической серии Азимова про Основание.

Книга на самом деле состоит из двух независимых историй. Первая продолжала стиль и характер истории первой книги — космический эпос, стагнирующая империя и Основание, которое побеждает несмотря на всю опасность за счёт внутренних процессов в самой империи.

А вот вторая часть действительно удивила, реальный слом стандартного шаблона — вот мы хорошие люди, в ходе книги происходят всякие сложности, но в конце мы побеждаем. Начинаю понимать популярность серии и берусь за третью книгу 🙂

Martin Kleppmann — Designing Data-Intensive Applications

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

В итоге пока решил переключиться на книги, тем более, что книг по специальности я прочёл не так много — в основном потому, что читаю я в основном с читалки или телефона, и специальную литературу в pdf и там и там читать неудобно.

Но технологии не стоят на месте 🙂 Оказалось, что весьма удобную оболочку для чтения книг даёт в своём приложении O’Reilly. К тому же в полном соответствии с мотивационными теориями, если ты за что-то заплатил, то твоя мотивация это использовать заметно повышается 🙂

Это была присказка, а первой прочтённой мной на платформе O’Reilly книгой стала классическая книга с кабанчиком, о которой дальше и пойдёт речь.

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

Дальше крупными мазками по содержанию.

Книга состоит из трёх частей. Первая — представляет собой обзор способов хранения и обработки данных в пределах одной машины:

  • Какие бывают БД, как они развивались и для каких задач лучше подходят. Тут очень интересным было читать про графовые БД, так как я сам плотно с ними не работал. Особенно порадовало сходство Datalog и пролога.
  • Как БД хранят данные внутри себя, append-only logs и структуры для индексов — очень подробное и понятное описание, мне конечно тяжело судить, но показалось, что настолько понятное, что его можно было бы читать даже без какого-то бэкграунда
  • Форматы хранения данных — текстовые, бинарные, рассуждения о forward и backward compatibility. Тут интересным было читать про Avro (опять-таки, потому что я с ним не сталкивался ранее 🙂

Вторая — распределенные данные и проблемы возникающие при этом

  • Репликация. Очень подробный обзор — синхронная / асинхронная, с одним лидером и без лидера, проблемы с лагом репликации и способы их решения
  • Партиционирование. Способы шардинга, распределённые индексы, ребалансировка, роутинг запросов.
  • Транзакции. Не просто что такое и зачем, но и трейдоффы, уровни изоляции и как они релизовываются на низком уровне.
  • Проблемы распределённых систем. Одна из самых полезных глав. Что и как может пойти не так — нестабильные сети, процессы на паузе, ненадежное время, разница между монотонным и календарным временем, Byzantine faults (не могу придумать как это корректно перевести на русский таким же коротким термином — возможно, в русском нет подобного термина для неполадок, вызванных поведением частей системы, которые нарочно врут и им нельзя доверять)
  • Распределенные транзакции — двухфазный коммит, алгоритмы консенсуса (без глубокого погружения, но общие принципы, и какие существующие инструменты их реализовывают)

Третья — пакетная и потоковая обработка данных

  • Пакетная обработка (batch processing) — MapReduce и описание какие есть способы осуществления джойнов данных при этом + рассуждения о том насколько оно похоже на Unix утилиты
  • Потоковая обработка (stream processing) — переход от пакетной обработки, message-based и log-based источники данных, change data capture, event sourcing и как и везде в книге — рассуждения о проблемах и трейдофах при потоковой обработке данных, а также как сделать её максимально ошибкоустойчивой (микробатчи, идемпотентность)
  • И последняя глава состоит из рассуждений автора о будущем обработки данных и этических вопросах. Второе неинтересно (т.к. ничего нового, всё те же опасения, и гос. регулирование нас спасёт), разве что стоит отметить сравнение текущего положения со сбором и обработкой данных с ранним капитализмом — детским трудом, 12-часовым рабочим днём и т.п.
    А вот техническая часть главы выглядит интереснее — кругом сплошное телевидение сплошные стримы и данные порождаемые из данных. Интересна идея замены двухфазного коммита на единое сообщение с бизнес-транзакцией пользователя, на основании которой уже все системы (базы данных, поисковые индексы, очереди сообщений и т.п.) делают нужные им изменения состояния, но автор сам отмечает, что тут есть большая проблема с read your own writes, которая по его мнению как-нибудь будет решена (мы же о будущем мечтаем).

В целом очень доволен, что прочёл. Главный плюс книги вижу ещё и в постоянном внимании к тому, что может пойти не так, и какие проблемы есть у таких и эдаких решений. Какая цена будет чтобы их избежать. И не дешевле ли будет позволить системе иногда ошибаться и разработать механизм устранения ошибок постфактум, особенно учитывая то, что информационная система работает с реальным миром, в котором ошибки все равно происходят, поставщики не доставляют товар (даже если он идеально записан во все БД), а сотрудники забывают про задачи клиентов (даже записанные с максимальной надёжностью и доставленные по всем каналам без потерь).

Isaac Asimov — Foundation

В предверие выхода сериада от нетфликс решил таки прочитать знаменитый цикл Азимова. Читать решил не в «правильном» хронологическом согласно повествованию порядке, а в порядке выхода романов — так мне показалось будет правильнее 🙂

В прошлый раз я пытался читать Основание лет 10 назад в оригинале и оказалось сложно и не зашло (настолько, что бросил, недочитав первую книгу). Видимо английский с тех пор у меня улучшился, т.к. сейчас язык показался не сложным (особенно если сравнивать с каким-нибудь Питером Уоттсом) и я получил настоящее удовольствие от чтения.

Да, чувствуется, что книга написана давно — технологии ядерной физики как верх научного развития, и никаких ИИ, виртуальных реальностей и генной инженерии 🙂 Сравнивая с лучшими образцами более поздней фантастики, история с одной стороны простовата, но с другой — не напрягает и захватывает. Замечательный сплав космооперы (галактическая империя, тысячи миров, межпланетная политика) с космическими приключениями в духе Светлячка (торговые корабли, личная хитрость капитанов и лидеров, находящих неожиданные решения и выходы из ситуаций). То что надо для ненапряжного чтения 🙂

Нил Гейнман — Американские боги

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

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

Наверно Нил Гейнман просто не мой автор 🙂 Т.к. подобные же ощущения в свое время были от Neverwhere — вроде и мир необычный и сюжет закручен, но как-то всё читается через силу и не увлекает. А в Американских богах дополнительным минусом были описания всяческой человеческой жестокости и мерзостей, которые я и не люблю и сюжету они тут на мой взгляд никак не сопутствовали и можно было без них обойтись.

Ильяхов, Сарычева — Пиши, сокращай

Книга представляет собой сборник советов и правил как писать понятный текст в информационном стиле.

У книги есть несколько минусов:

  • авторы очень безапелляционны и считают, что их мнение единственно верное (но с другой стороны сам жанр бизнес-книг к таком подталкивает)
  • у них профдеформация и им кажется, что все тексты — это реклама и инструкции в каком-либо виде (тут особенно пригорало с своветов как оформлять заметки о путешествии 🙂 )
  • вместе с тем, как надо писать тексты, они проталкивают свою философию, что всегда надо писать правду, причём даже приближаясь к резать правду-матку. Подход похож на то, что пропагандирует Далио в «Принципах», но там он хоть оговаривает, что «да, это не всем подойдет, но я считаю, что правильно так»

Но если оставить за скобками эти моменты и понимать книгу, как советы как писать рекламу, объявления и инструкции, так чтобы это было понятно — то книга очень полезная. Содержит кучу практических советов как сделать текст понятнее и полезнее, начиная от того какие слова / конструкции не стоит использовать и заканчивая тем, как в целом строить текст. Я её слушал, но правильнее было бы всё-таки читать — на слух некоторые советы про абзацы и структуру текста воспринимались тяжело.

Улучшение оптимизатора запросов в MySQL 8.0.17 (по сравнению с 8.0.16)

Минорные релизы MySQL 8 совсем не минорные и у этого есть как минусы (в случае проблем откатиться обратно на предыдущий минорный релиз не выйдет), так и плюсы, т.к. в них появляются новые фишки и улучшения.

В 8.0.17 к примеру завезли оптимизацию запросов с NOT EXISTS:

The optimizer now transforms a WHERE condition having NOT IN (subquery)NOT EXISTS (subquery)IN (subquery) IS NOT TRUE, or EXISTS (subquery) IS NOT TRUE internally into an antijoin, thus removing the subquery.

Пример, имеем запрос:

SELECT task.TaskID
FROM contact
INNER JOIN login ON login.LoginID = contact.LoginID
INNER JOIN task ON task.TaskID = contact.TaskID
LEFT OUTER JOIN taskstar ON taskstar.TaskID = task.TaskID AND taskstar.LoginID = 858636
INNER JOIN taskaccess accesslogined ON task.TaskID = accesslogined.TaskID AND accesslogined.LoginID = 858636
WHERE 1
AND contact.ContactBool_1 = 0
AND contact.ContactSpam = 0
AND task.TaskType = 4
AND contact.ContactIsDeleted = 0
AND task.TaskIsDeleted = 0
AND (NOT EXISTS(SELECT 1
FROM task
WHERE ClientID = contact.ContactID
AND task.TaskIsDeleted = 0
AND (task.TaskType = 0)
AND task.TaskStatusSetID = 57450)
)
GROUP BY task.TaskID
ORDER BY task.TaskID
LIMIT 0,5

Выполняем его в MySQL 8.0.16 и получаем:

5 rows in set (1 min 9.92 sec)

Больше минуты, совсем некомфортно.
Обновляем MySQL и выполняем его же в 8.0.17:

5 rows in set (1.02 sec)

Профит 🙂