Дайджест интересных событий из мира Java, и вокруг нее #2 (09.05.2016 — 22.05.2016)
В этом выпуске
— Новики в Java: иммутабельные коллекции в JDK9, новые опции для обработки out-of-memory в JDK8
— Как зареордерить чтения на x86?
— Опен-сорс наступает: гиганты IT индустрии выкладывают новые фреймворки
— «Слухи о моей смерти сильно преувеличены»: Twitter на защите Scala
— Терабайты RAM в облаке: новое предложение от Amazon
— Как HR-ы Google приглашают на собеседование?
… и многое другое
1. Новости
1.1. Иммутабельные коллекции в Java 9
В JDK9 влили иммутабельные коллекции. Да не простые, а компактные! Например, пары ключ-значение в Map хранятся в обычном массиве, внутри которого они расположены согласно хэша ключей.
Оригинальный JIRA-тикет: bugs.openjdk.java.net/browse/JDK-8139233
1.2. Новые опции для обработки out-of-memory в Java 8
Начиная с последнего релиза восьмерки 8u92, в JVM появляется два новых флажка: CrashOnOutOfMemoryError и ExitOnOutOfMemoryError. Обе опции грохают Java-процесс при возникновении первого OutOfMemoryError.
Очень полезная фича. В случае OOM серверные приложения могут очень долго не реагировать на внешние воздействия. Единственное, что с ними можно сделать в этом случае — прибить руками. В случае использования этих опций Java-процесс умрет сам собой, а в случае CrashOnOutOfMemoryError еще и создаст крэш-дамп.
1.3. LinkedIn открыл исходный код распределенного хранилища Ambry
Когда компания масштаба LinkedIn открывает исходники своих продуктов, это всегда интересно. Когда это сопровождается подробнейшим описанием архитектуры системы и историей ее создания — это интересно вдвойне.
В двух словах, Ambry работает примерно так:
Источник: engineering.linkedin.com
Ну, а если серьезно, то обязательно прочитайте статью от и до. Такое подробное описание мотивации и процесса принятия технических решений будет в миллион раз полезней, чем чтение сухих исходников на GitHub.
Любопытно, что через некоторое время после выхода статьи, появилась информация о взломе LinkedIn и утечке паролей. Многим из вас наверняка пришло письмо счастья с рекомендацией поменять пароль. Простое совпадение? Не думаю.
1.4. Twitter открыл исходный код системы для распределенного логирования DistributedLog
Когда компания масштаба… ну вы поняли.
Репозиторий: github.com/twitter/distributedlog
Описание архитектуры: blog.twitter.com/2015/building-distributedlog-twitter-s-high-performance-replicated-log-service
1.5. Сколько Scala в Twitter?
Хроники умирающей Scala. Stu Hood, инженер Twitter, оценил долю бэкэнда, написанного на Scala в 50%. Хорошо это или плохо, жива Scala или нет — решайте сами.
Любопытно, что буквально за неделю до этого акции Twitter едва не обновили свой абсолютный минимум, упав до отметки 13.90$ за акцию. Простое совпадение? Не думаю.
1.6. X1 — новый продукт Amazon
Amazon анонсировал выход нового флагманского инстанса X1. Что бы вы понимали — 128 ядер, 2Tb оперативки, 10Gbps сеть. Компания любезно предлагает переносить на эти инстансы Ваши SAP-ы, Spark-и, и прочие монструозные конструкции.
Источник: www.businessinsider.com
Это звоночек. Понятно, что за активное использование таких мощностей придется отваливать Amazon очень серьезные суммы. Но это сейчас, когда операционная прибыль Amazon Web Services измеряется десятками процентов. Пройдет несколько десятков лет, железо еще больше подешевеет, конкуренция усилится, маржа упадет, и покупка серверного hardware станет редкостью.
2. Почитать
2.1. Интервью Мартина Томпсона
Ссылка: https://www.infoq.com/interviews/thompson-high-performance-java/
Интересный разговор про сеть, профайлеры, аллокации и производительность.
2.2. Post-mortem: разбор причин падений известных сервисов и приложений
Ссылка: https://github.com/danluu/post-mortems
Крайне занимательный репозиторий, в котором собраны ссылки на описание причин всевозможных багов, аутэджей и прочих проблем популярных сервисов и приолжений, таких как Amazon, Google, Microsoft и т.д.
Захватывающее чтиво, в духе «в дата-центр A ударила молния, из-за этого возрос трафик на дата-центр B, но в его ПО была concurrency-бага, которая воспроизводилась только под нагрузкой, в итоге половина наших сервисов померла». Заставляет задуматься о пределе человеческих возможностей в обуздании распределенных систем.
2.3. Статья о внутренностях C2-компилятора
Ссылка: http://marcelinorc.com/2016/05/11/phases-of-the-java-hostpot-c2s-compiler/
Для любителей хардкора. В статье рассказано о том, как С2 анализирует код, и какие конкретно оптимизации применяет. Все это снабжено ссылками на соответствующие исходники OpenJDK.
2.4. Демонстрация «реордеринга» на примере теста из jcstress
Ссылка: http://stackoverflow.com/questions/37240208/reordering-of-reads/37241534#37241534
Алексей Шипилев наглядно показывает, как игнорирование Java Memory Model может приводить к непредсказуемым последствиям даже на достаточно спокойных архитектурах, вроде x86. Никакой Total Store Ordering вас не спасет.
3. Мудрость
3.1. О жизненном цикле Вашего кода
The code does not belong to you. It is in your care for a time. Others may need to use it, maintain it, or patch it. #WriteCleanCode
— Eric Elliott (@_ericelliott) 10 мая 2016 г.
3.2. Бенчмарки: приятные цифры или корректность на примере GC
Stop trying to avoid GC in your benchmarks! If a code produces garbage, it has to pay with GC. And that should affect performance metrics.
— Aleksey Shipilëv (@shipilev) 11 мая 2016 г.
3.3. О дистрибутивных системах
The principle «single source of truth» is responsible for more bad design in distributed systems than any other misguided principle we know
— Paul Borrill (@plborrill) 13 мая 2016 г.
3.4. Про отношение к багам
Many teams spend > 70% time fixing bugs.
— Tim Ottinger (@tottinge) 15 мая 2016 г.
If zero bugs, they’d be > 3x productive.
The safe way is the fast way. @jbrains @JasonKerney
3.5. О том, какой должна быть первая версия Вашего продукта
A nice way to visualize what an MVP (Minimum Viable Product) should accomplish pic.twitter.com/1QJnf8Gnps
— Lean Startup Co. (@leanstartup) 19 мая 2016 г.
4. Юмор
4.1. Хайрим правильно
HR-ы Google решили проблему найма персонала. Теперь они создают позиции под конкретного человека.
4.2. Последствия перехода на микросервисную архитектуру
when u have converted everything to #microservices pic.twitter.com/QfUWIVzhgD
— fresh tweets (@tweets_so_fresh) 15 мая 2016 г.
4.3. А это поймут только опен-сорсники
Hopen Source, n. When a company throws a complex codebase over the wall, believing a community will magically form to fix and support it.
— Jeff Waugh (@jdub) 16 мая 2016 г.