Arhelmus

28 ноября 2016, Днепр / Мюнхен

# Понедельник 47 твитов

Всем привет, с вами @Arhelmus, адепт Scala секты и любитель поговорить на тему того что ООП не нужно.

6:48

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

6:51

Пожалуй одной из главных мотиваций для меня оставаться со Scala является то что я могу лаконично писать функциональный код

6:55

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

6:57

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

6:58

Есть те кто юзают активно ФП в своем коде? На чем пишете? Мне вот одно время очень нравился Эрланг.

6:59

Но только чет Эрланг не может в маркетинг, поэтому интерес слегка угас, не так много проектов.

7:00

Тут в комментах появилась мысль что все эти модные языки от лукавого, и бизнесу лучше то где побольше девелоперов подешевле, что думаете?

7:19

Ну и раз тема имеет отклик, давайте сделаем небольшой опрос с уклоном больше к дэвам. Нужны ли новые языки или девелоперы с жиру бесятся?

7:46

Раз был разговор об Эрланге, то давайте поговорим о модели акторов, есть кто пишет распределенные системы на них?

7:48

@backendsecret как-то было желание соскочить на них из-за того что были проблемы с реализацией валидации в евентсорсном проекте

7:49

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

7:49

Кажется все те кто пишут распределенные системы на акторах сейчас работают, а не в твиттере сидят :)

7:58

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

8:11

В мире Scala есть такая эксперементальная штука как scala-native.org которая соберет ваш код через тот-же LLVM в бинарник.

8:12

Но несмотря на это, большим удивлением было то что на том-же Rust есть свои sinatra-like фреймворки. Веб на низкоуровневом языке?

8:14
@backendsecret писать веб часть не на языке с динамической типизацией – знатный мазохизм
8:18

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

8:23

В Wix мы переходим к этому так как есть разделение между back и front. Благодаря этому фронты смогут сами делать себе такое апи как захотят

8:25

Альтернативным решением есть генерация JS либ из сервер кода, aka ScalaJS scala-js.org.

8:26
@backendsecret тут и котлин аннонсировали что собираются бинарники генерить
8:42

Тут кстати наброс был про то что C лучше этих ваших JVM ибо в нем нет GC. У меня есть знакомые которые пишут трейдерских ботов на джаве.

8:44

Особенность их в том, что они работают с выключенным GC :)

8:45

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

8:45

Это я к чему, для всего есть свой инструмент. Но к слову о Rust, у них gc делается через коомпиляцию, что как по мне просто мега фича.

8:46
@theaspect @backendsecret Никто и не спорит. Но может быть резон отказаться от jre и использовать что-то более тонкое, или предсказуемое.
8:57
@backendsecret @theaspect у SUN когда-то был такой неофиц.лозунг: если тормозит sun.java - просто купи ещё один сервер Sun :)
9:16

В последнее время очень модным стал подход иммутабельности данных, насколько вам жаль вашу оперативную память?)

9:21

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

9:22

Единственный кто был со мной не согласен, это знакомый андроид девелопер, не сложилось у него с хорошим железом для запуска кода :)

9:23

Единственная проблема это то что в моем случае GC отжирает больше процессорного времени на очистку мусора.

9:25

Но для этого @den_sh запилил github.com/densh/scala-of… , так что если сильно запарится по этому поводу, то проблема решаема

9:27
@backendsecret тут важен баланс, если новый инструмент позволяет эффективней решать задачи, то надо использовать. Разработчики подтянуться
9:29
@backendsecret а мы используем для 2х задач: многопоточность (все остальные либы синхронные), и обработка не логических ошибок супервизорами

Юзкейсы акторов twitter.com/QwestUA/status…

9:41

Пойду поработаю немного, после обеда продолжим ;)

9:44

Я вернулся, мне тут из моей старой компании посоветовали делать меньше инсайдов о том что мы используем, пришлось немножно потереть твиты)

12:43

Одной из вещей которую мне привили в Wix это TDD. Как вы относитесь к написанию тестов до реализации?

12:44

Как по мне это отличная практика в случае если ты знаешь что хочешь получить, когда речь шла об ковырянии чего-то новго тесты только мешали

12:46

Еще как по мне tdd вполне себе заменяет статическую типизацию, просто вместо коомпилятора, тесты покроют код.

12:48
@backendsecret
Tests cover code
And time trieth truth
13:01

Но все-же вещью которая как по мне не имеет смысла, это тесты сквозь всю систему, когда подымается весь бекенд и селениумом дергается фронт

13:03

Мало того что для прогона тестов нужно поднять абсолютно все, так еще имеется множество мест где что-то может упасть по таймауту

13:04

В итоге получается тест шредингера, он вроде как упал, но вообще проходит.

13:04
@backendsecret Я слышал в одноклассниках гоняют тесты прям на продакшине в том числе. И все работает. :)

Слухи на backendsecret :) twitter.com/Dronmdf/status…

13:08
@backendsecret не, проверка и вывод типов на этапе компиляции дорогого стоит, я уж молчу про фичи IDE оттуда вытекающие
13:35
@backendsecret в том-то и дело, что VM более шустрая, тем Java. А на низком уровне Имхо можно писать уж совсем узкие места. Иначе изврат

Про Эрл: twitter.com/den4ikbyte/sta…

14:05

# Вторник 26 твитов

Ну и раз тема имеет отклик, давайте сделаем небольшой опрос с уклоном больше к дэвам. Нужны ли новые языки или девелоперы с жиру бесятся?

Доброе утро, вчера мы решили что хайп на новые языки сильнее чем желание стабильности: twitter.com/backendsecret/…

8:11

Давайте сегодня поговорим немного о девопс и сразу же опрос, чем вы менеджите свое приложение в продакшене?

8:16

У меня все начиналось с банального git clone в /www папку, но все закончилось когда мне рассказали что я не закрыл .git для доступа из вне)

8:18

После был шеф, который настраивал не я, и в принципе меня все устраивало, пока не пришлось руками ранить скрипт на каждой машине

8:19

Сеичас в своем проекте я использую docker и swarm. То чего я добился этим, это оперированием кластером серверов разом.

8:21

В docker compose конфиге можно описать все зависимости между контейнерами и после просто скормить этот конфиг master ноде.

8:21

Расскажите что интересного у вас было для того чтобы построить деплой?

8:22
@ruxeg @backendsecret Ты не так понимаешь TDD, это не про защиту от багов и проверку всех ситуаций.

Не знаю троллинг это или нет, но я согласен) twitter.com/Nicklasos/stat…

8:36
@backendsecret namespace на каждое окружение, petset для кластера кассандр, автоскейлинг aws-кластера в зависимости от загрузки (из коробки)

То зачем нужен kubernetes вместо swarm. twitter.com/public_void_gr…

8:39

Сеичас на самом деле очень много хайпа вокруг докера, есть те кто сьели пуд соли на этом?

8:45

Кастую @fxposter сюда, думаю тебе есть о чем рассказать

8:45

У меня была проблема связанная с тем что я не мог найти какой из докер контейнеров выжирал все IO.

8:46

Я хостил некоторые девелоперские штуки типо репозиториев приватных на сервере за 3 бакса, и иногда он просто намертво вис

8:47

Самое веселое было в том, что процессор и память были свободны, а load average пробивал очередную высоту

8:48

В итоге после поочередного отключения контейнеров проблемой оказался docker-registry, который что-то очень активно делал с диском

8:48

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

8:49

Кстати ни docker stats, ни iotop не показывали адекватные данные в момент таких зависаний

8:50
@backendsecret вот примерно так, только вместо Surf ansible стал использовать dimaip.github.io/2015/03/03/hyb…
8:54

Кстати клевая статья о том как написать свой менеджер контейнеров:
infoq.com/articles/build…
Увы, все на golang

9:06

Кстати небольшой вброс, вот если с стейтлесс приложениями и их контейнеризацией все понятно, то что делать с бд?

10:33

У себя я все-же держу бд в докере, но делаю маунт на жесткий диск, держите ли вы бд в докере?

10:33
@backendsecret конечно есть что рассказать! Начнем с того, что докер скрывает внутри себя кучу вещей.

Вот небольшой рассказ о докере, от того кто его сует в большой продакшн twitter.com/fxposter/statu…

13:13

В новой компании все будет хоститься на aws, что в принципе уже стандарт для веба, кто сравнивал стоимость aws с своими серверами в дц?

13:29

И кстати я слышал что не все что предлогает амазон такое-уж отказоустойчивое, допустим их elastic search, @pvoznenko расскажешь?

13:30
@backendsecret из личного опыта, я гоняю докер 2 года для хостинга простых веб-проектов в in-house среде, очень даволен
14:39
@backendsecret свое дешевле, но когда нужна гибкость но денег на собственное облако нет, AWS неплохой вариант.
14:39

# Среда 24 твита

Давайте сегодня поговорим немного о девопс и сразу же опрос, чем вы менеджите свое приложение в продакшене?

Всем привет, по итогам вчерашнего опроса, в основном люди просто посмотреть заходили)
twitter.com/backendsecret/…

13:19

О чем мы еще не говорили, так это про базы данных, признавайтесь в каких базах храните данные и почему?

13:21

В Wix мы все храним в MySQL и некоторые команды пробуют Cassandra. И да, не спешите кидать помидоры "а почему не постгрес/монга/etc".

13:23

Данные хранятся в денормализированном виде и как итог, в принципе все равно где хранить key-value.

13:24

На эту тему есть отличная статья на хабре от нашей компании, habrahabr.ru/company/wix/bl….

13:25

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

13:26

Много кто поддался хайпу монги? Есть те кто у в итоге остались довольными тем что протащили в проект?

13:27

У нас одно время был кластер монги, но это время было недолгим, ибо мастер нода отваливалась стабильно раз в неделю.

13:28

Главной фишкой было то, что новый мастер не выбирался, по какой-то магической причине и в итоге мы отвечали дольше чем обычно.

13:28

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

13:29

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

13:31

Та самая, крутая статья: eng.uber.com/mysql-migratio…
TLDR: потому-что репликация

13:32

Многие вещи из этой статьи в итоге оспорили, но основное отличие и причина по которой они перешли на mysql это мутабельность.

13:33

Postgres иммутабелен внутри, и вместо изменения записи, он создает новую, с таким-же id (спойлер, primary key в postgres это не primary key)

13:34

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

13:34

MySQL же мутабельный, и вроде как решает проблемы с которыми они столкнулись в Postgres.

13:35
@backendsecret у нас монга, в проекте не из-за хайпа. Не очень то и счастливы, но без неё нам сложнее будет.

Расскажи, почему без монги никак? Чего такого она умеет без чего вы не можете? twitter.com/FlyDieFly/stat…

13:36
@backendsecret да-да, та самая в которой уберовские инженеры расписались в том, что использовали старую версию и не знают про HOT.
13:39
@backendsecret blog.2ndquadrant.com/thoughts-on-ub… Вот здесь уже все рассказали товарищи поумнее меня.

Вот в коментах и ссылку на критику статьи подогнали. twitter.com/netcreeper/sta…

13:42

А есть среди нас люди которые хранят данные (именно хранят, а не кешируют что-то) в redis, elasticsearch итд? Расскажите как спится по ночам

13:49

@backendsecret кастую в тред @ptico, я помню был у тебя на докладе где ты очень хвалил redis, поделись опытом

13:51
@backendsecret сталкивался с попытками использовать репликацию данных OLTP-системы на MSSQL/Oracle для финучреждений и это было ужасно

OLTP, что за зверь? twitter.com/grim_juz/statu…

13:53
Держу базы исходных слов для твитов @zapretbot @eto_kogda_ebut @HarryTwibotter в redis, читаю ленту этого аккаунта… twitter.com/i/web/status/8…
13:56
@backendsecret есть ли те, кто хотя бы пробовал tarantool?)
17:34

# Четверг 13 твитов

@backendsecret через "да еб твою мать" слышал, что у нас так делают. А так я не в теме, я на клиенте.
11:23
О чем мы еще не говорили, так это про базы данных, признавайтесь в каких базах храните данные и почему?

Привет всем, как неудивительно, но в основном все хранят данные в SQL twitter.com/backendsecret/…

12:05

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

12:06

Мне когда-то попадал в руки проект, где был прокси сервер на Java, который выделял по треду на реквест.

12:07

В итоге это была такая себе дробилка ресурсов сервера, которая давала нам авторизацию и безопасную среду внутри, огромной ценой

12:07

В общем тема сегодняшнего опроса, пишите ли вы асинхронный серверный код?

12:09

Одной из вещей которая мешает писать приложение полностью асинхронными является jdbc драйвер

12:09

По определенным причинам, мне не понятным, единственный способ сделать jdbc драйвер асинхронным, это добавить костыль с очередью

12:10

В итоге на общение с бд выделяется пул тредов, которые выгребают задачи из очереди, а на выходе это выглядит асинхронно

12:10

Есть кто может рассказать в чем проблема сделать тру асинхронный jdbc драйвер? Ведь всего-то нужно делать запросы по сети не синхронно, не?

12:11
@backendsecret вся работа со statement'ами и транзакционным контекстом должна быть привязана к одному соединению (~потоку)
12:16

Вопрос ближе к системному уровню, когда вы запускаете асинхронную операцию IO, по сути вы говорите ОС вычитать/записать данные и сообщить

13:25

@backendsecret как ос выделяет ресурсы на эту операцию? тред на задачу?

13:27

# Воскресенье 45 твитов

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

10:09

Надеюсь воскресенье не скажется на активности опроса, как вы защищаете трафик при передаче по сети?

10:13

Для начала хотелось бы развеять миф о том что перехватив handshake клиента и сервера возможно расшифровать весь последующий трафик

10:14

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

10:16

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

10:17

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

10:18

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

10:19

Однако у ассиметричных ключей есть проблемы:
1) Возможность украсть ключ для расшифровки через уязвимости сервера
2) Подбор секретного ключа

10:22

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

10:23

Примерами того как можно украсть ваши ключи, является когда-то нашумевший heartbleed.com

10:25

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

10:26

Еще одним интересным примером не из серверной разработки является Pegasus.
bgr.in/news/pegasus-s…

10:27

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

10:29

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

10:39

SSL DHE: Diffie–Hellman ephemeral. Эфемерные значит временные.

10:41

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

10:42

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

10:43

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

10:44

Не поможет если ваше приложение взломано в течении времени, но в таком случае можно не парится насчет того как расшифровать трафик из сети.

10:45

С проблемой украденных ключей разобрались, а что делать с подбором ключа? И возможно ли это?

10:46

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

10:47

Большей проблемой является то что процессоры становятся мощнее, а вычисления дешевле.

10:48

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

10:53

Однако этого всеравно мало чтобы допустим быстро взломать RSA 4096. Как было сказано в комментариях. Но...

10:53

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

10:56

И да, если есть кто-то кто может обьяснить отличие квантовых компьютеров от обычных, было бы круто) Я не особо в этом разбираюсь.

10:57

Ну а теперь давайте поговорим о том что делать дабы ваш RSA в течении времени не подобрали.

10:58

Ответ - не использовать RSA ;)

10:58

Есть такая вещь как эллиптическая криптография, SSL ECC - elliptic curves cryptography.

10:59

Это асимметричное шифрование построенное на основе эллиптической кривой, в четырехмерном пространстве

11:01

@backendsecret И если честно, я не могу представить такую кривую в своей голове, ну да ладно :)

11:01

Для шифрования с помощью этих кривых используются проекции на плоскости.

11:02

На основе этих проекций можно понять, о той ли части кривой идет речь, а дальше идет матан в который я так и не докопал

11:10

Главное здесь то, что повышается сложность подбора ключа, что позволяет использовать более короткие ключи чем в RSA.

11:10

Таким образом, венцом безопасности будет использование ECDHE шифрования (ефемерные эллиптические ключи), но нужно ли оно вам?)

11:13

Есть те кто работали над приложениями для которых действительно было важно сохранить данные скрытыми даже через десятки лет?

11:15

@backendsecret было бы круто послушать

11:16
@backendsecret премьер Канады вкратце может: youtube.com/watch?v=Tk0Xg0…

Отличное объяснение разницы квантовых и простых компьютеров :) twitter.com/phillennium/st…

11:34

@backendsecret @phillennium а что насчет помех, ведь 0 и 1 не просто так выбраны в качестве основы, это уровни напряжения

11:37

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

11:45

@backendsecret строилась на примере о передаче посылки сквозь заведомо небезопасные точки

11:46

@backendsecret алгоритм решения был, А вешает замок и отправляет посылку к Б, Б вешает свой замок и отправляет к А, А открывает замок

11:48

@backendsecret в результате Б получал посылку закрытую своим же ключем, но невозможно снять шифр с сообщения в произвольном порядке

11:48

@backendsecret что в принципе и послужило основой идеи, что невозможно безопасно передавать данные заранее не договорившись о ключах)

11:49

Спасибо всем за внимание, на этой неделе с вами был @Arhelmus, надеюсь вам понравилось (а если нет, ну и черт с ним). Удачи ;)

18:06

other