# Понедельник 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@backendsecret16:01
Tests cover code
And time trieth truth
Но все-же вещью которая как по мне не имеет смысла, это тесты сквозь всю систему, когда подымается весь бекенд и селениумом дергается фронт
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У меня была проблема связанная с тем что я не мог найти какой из докер контейнеров выжирал все 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
Кстати небольшой вброс, вот если с стейтлесс приложениями и их контейнеризацией все понятно, то что делать с бд?
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: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: потому-что репликация
Многие вещи из этой статьи в итоге оспорили, но основное отличие и причина по которой они перешли на mysql это мутабельность.
16:33Postgres иммутабелен внутри, и вместо изменения записи, он создает новую, с таким-же id (спойлер, primary key в postgres это не primary key)
16:34Это генерирует кучу мусорных ивентов, заставляет делать сборку мусора в таблицах и еще ряд вытекающих последствий для работы с памятью.
16:34MySQL же мутабельный, и вроде как решает проблемы с которыми они столкнулись в 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:23Примерами того как можно украсть ваши ключи, является когда-то нашумевший heartbleed.com
13:25Суть была в том, что при определенном запросе вы могли увидеть рандомный кусочек памяти и таким образом получить ключи.
13:26Еще одним интересным примером не из серверной разработки является Pegasus.
bgr.in/news/pegasus-s…
По сути это эксплуатация набора уязвимостей iOS, которая в итоге аккуратно запаковывала память нужных приложений и отправляла куда нужно.
13:29Для решения проблемы того что кто-то когда-то украдет ваши ключи и расшифрует трафик, были найдены Эфемерные ключи
13:39SSL 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
- http://www.scala-native.org/
- https://www.scala-js.org/
- http://sun.java/
- https://github.com/densh/scala-offheap
- https://github.com/google/leveldb
- http://dimaip.github.io/2015/03/03/hybrid-deploy-with-docker-and-surf/
- https://www.infoq.com/articles/build-a-container-golang
- https://habrahabr.ru/company/wix/blog/283158/
- https://eng.uber.com/mysql-migration/
- http://heartbleed.com/
- http://www.bgr.in/news/pegasus-spyware-can-jailbreak-and-hack-any-iphone-with-an-sms-apple-issues-ios-9-3-5-update-to-patch-exploit/