Arhelmus

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

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

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

9:48

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

9:51

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

9:55

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

9:57

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

9:58

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

9:59

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

10:00

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

10:19

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

10:46

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

10:48

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

10:49

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

10:49

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

10:58

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

11:11

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

11:12

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

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

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

11:23

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

11:25

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

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

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

11:44

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

11:45

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

11:45

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

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

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

12:21

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

12:22

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

12:23

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

12:25

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

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

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

12:41

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

12:44

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

15:43

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

15:44

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

15:46

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

15:48
@backendsecret
Tests cover code
And time trieth truth
16:01

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

16:03

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

16:04

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

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

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

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

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

17:05

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

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

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

11:11

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

11:16

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

11:18

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

11:19

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

11:21

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

11:21

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

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

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

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

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

11:39

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

11:45

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

11:45

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

11:46

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

11:47

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

11:48

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

11:48

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

11:49

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

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

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

12:06

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

13:33

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

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

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

16:13

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

16:29

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

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

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

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

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

16:19

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

16:21

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

16:23

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

16:24

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

16:25

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

16:26

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

16:27

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

16:28

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

16:28

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

16:29

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

16:31

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

16:32

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

16:33

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

16:34

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

16:34

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

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

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

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

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

16:42

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

16:49

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

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

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

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

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

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

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

15:05

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

15:06

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

15:07

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

15:07

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

15:09

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

15:09

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

15:10

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

15:10

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

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

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

16:25

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

16:27

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

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

13:09

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

13:13

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

13:14

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

13:16

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

13:17

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

13:18

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

13:19

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

13:22

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

13:23

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

13:25

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

13:26

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

13:27

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

13:29

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

13:39

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

13:41

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

13:42

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

13:43

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

13:44

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

13:45

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

13:46

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

13:47

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

13:48

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

13:53

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

13:53

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

13:56

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

13:57

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

13:58

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

13:58

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

13:59

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

14:01

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

14:01

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

14:02

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

14:10

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

14:10

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

14:13

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

14:15

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

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

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

14:34

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

14:37

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

14:45

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

14:46

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

14:48

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

14:48

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

14:49

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

21:06

other