CRaC (Coordinated Restore at Checkpoint)
- свежая фича с большим потенциалом. Свежая настолько, что ее нет в базовой OpenJDK, только в отдельной сборке.
В основе CRaC лежит простая и интересная идея. Расскажу, в чем суть, и как это применимо к практике.
Как стартует типичный сервис в java вселенной:
✨ Запускается JVM: считывает файлики с классами, загружает их в оперативку и тд
✨ Запускается контекст спринга. Конфиги, бины, постпроцессоры, прокси классы
Общий запуск занимает несколько минут. В основном благодаря спрингу.
Какую схему предлагает CRaC:
▫️ Берём работающее приложение
▫️ Делаем снимок оперативки
▫️ Разворачиваем этот снимок на другой машине
▫️ Приложение стартует за пару секунд🥹
Но это в теории. А что на практике?
На деле пока не всё гладко. Если приложение сложнее HelloWorld, нас ждут сложности с БД соединениями, задачами по расписанию, безопасностью параметров, развертыванием и тд. Вот тут человек запускал нормальное приложение, и это стоило немалых трудов. Но в итоге оно стартовало на 90% быстрее🚀
Проблемы в целом не критичные. Большую часть может взять на себя Spring, если решит всерьез поддержать CRaC. Сейчас поддержка минимальная - можно сделать снимок сразу после создания бинов. Надо, конечно, что-то посерьезнее.
Работает CRaC только в Linux, в других ОС нет поддержки снэпшотов памяти. Но можно запустить сервис в докере на основе Linux. И здесь тоже хочется автоматизации. Сейчас собрать и запустить образ с CRaC - сложная консольная многоходовочка.
Несмотря на незрелость, я вижу у CRaC большие перспективы. При хорошей поддержке он серьезно повлияет на расстановку сил в джава мире.
Мнение субъективное, но опыт позволяет делать такие прогнозы. Ставьте огонечки, если надо рассказать подробнее 🔥
Post #601
10.4K
- 🔥 347
- 👍 40
- ❤ 21
- 👎 4