Π’Π°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈΠΌ ΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ,
Java ΠΈ JVM Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Ρ Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½ΠΈ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΠΈ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ, Java ΠΈ Π΄ΡΡΠ³ΠΈ JVM Π΅Π·ΠΈΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, Π·Π°ΡΠΎΡΠΎ Π·Π°Π΅ΠΌΠ°Ρ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΡΡΡΠΎ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΡΠ° ΡΠ²ΡΡΠ΄Π΅ Π±Π°Π²Π½ΠΈ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΈ ΠΏΡΠ°Π²ΠΈ Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Ρ ΠΊΡΠ°ΡΡΠΊ ΠΆΠΈΠ²ΠΎΡ. ΠΠ° ΡΠ°ΡΡΠΈΠ΅ ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅Π³Π° Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Quarkus.
Π‘ΡΠΏΠ΅ΡΠ±ΡΡΠ·Π°ΡΠ° ΡΡΠ±Π°ΡΠΎΠΌΠ½Π° Java Π΄ΠΎΡΡΠΈΠ³Π½Π° Π½ΠΎΠ²ΠΎ Π½ΠΈΠ²ΠΎ!
42 ΠΈΠ·Π΄Π°Π½ΠΈΡ, 8 ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π² ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΠΈ 177 Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ - ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π· Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2019 Π³.
ΠΠ½Π΅Ρ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Quarkus ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² Π΅Π΄Π½ΠΎ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΄ΡΠΎ. Π©Π΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΊΡΠ°ΡΠΊΠ° ΠΈΡΡΠΎΡΠΈΡ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°Π²Π»Π΅Π·Π΅ΠΌ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π΄ΡΠ°Π»ΠΈΠ·ΠΌΡΡ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΠΎ ΡΠ΄ΡΠΎ ββΠ½Π° Quarkus ΠΈ ΠΊΠ°ΠΊ
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π² ΠΈΡΡΠΎΡΠΈΡΡΠ°.
ΠΠΎΡΠΎΡΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ Ρ Π²Π΅ΡΡΠΈΡ 8u131, Java Π·Π°ΠΏΠΎΡΠ½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π΅ΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, JVM Π²Π΅ΡΠ΅ Π·Π½Π°Π΅ Π½Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ½ΠΈ ΡΠ΄ΡΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΏΡΠ»ΠΎΠ²Π΅ ΠΎΡ Π½ΠΈΡΠΊΠΈ β ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡΠ»ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅/ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΎΠ²Π° Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ, Π½ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° HTTP ΡΡΡΠ²Π»Π΅ΡΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠΈ Π² Tomcat, Jetty ΠΈ Ρ.Π½. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ Π΄Π°Π΄Π΅ Π½Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° ΠΎΡΠ΄Π΅Π»Π½Π° Π½ΠΈΡΠΊΠ° ΠΈ ΡΠ΅ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ°Π·ΠΈ Π½ΠΈΡΠΊΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°ΠΊΠ° I/O ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ»ΡΠ³ΠΈ. Π’ΠΎΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ°ΠΊΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ Π±ΡΠΎΡ Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΄ΡΠ°, Π° ΠΎΡ Π±ΡΠΎΡ Π½Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΊΠ²ΠΎΡΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π² Kubernetes Π·Π° Π±ΡΠΎΡ Π½Π° ΡΠ΄ΡΠ°ΡΠ° Π½ΡΠΌΠ° Π΄Π° ΡΠ° ΠΎΡ Π³ΠΎΠ»ΡΠΌΠ° ΠΏΠΎΠ»Π·Π° ΡΡΠΊ ΠΈ Π²ΡΠΏΡΠΎΡΡΡ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ Π·Π°Π²ΡΡΡΠΈ Ρ Π΄ΡΠΎΡΠ΅Π»ΠΈΡΠ°Π½Π΅.
ΠΠ·ΡΠ΅ΡΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°
ΠΠΈΡΠΊΠΈΡΠ΅ ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ. Π Π²ΡΡΡΠ΅ΡΠ½ΠΎΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² Π½ΠΈΠΊΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ ΡΠ° ΠΏΠ°Π½Π°ΡΠ΅Ρ. ΠΡΠΎΡΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΡΠ΅ Π±ΡΠΎΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΈ Π½ΠΈΡΠΊΠΈΡΠ΅ ΠΈ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π²Π»ΠΎΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΌΠΊΠΈ Π·Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ ΠΈΠ»ΠΈ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅, ΠΈΠ»ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π²ΡΡΡΠ΅ Π² JVM ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π±Π΅Π· Π΄Π° Ρ ΡΠ±ΠΈΠ²Π°. Π‘Π°ΠΌΠ°ΡΠ° JVM (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ XX:+UseCGroupMemoryLimitForHeap). Π Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ»Π΅Π΄ Java 9 JVM ΡΠ΅ Π½Π°ΡΡΠΈ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ° cgroups ΠΈ Π΄Π° ΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠ° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΎΡΡΠ°Π²Π° Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ Π²ΡΠΏΡΠΎΡ.
ΠΠ²ΠΎΡΠΈ ΠΈ Π»ΠΈΠΌΠΈΡΠΈ
Java 11 Π²ΡΠ²Π΅Π΄Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΊΠ²ΠΎΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° (ΠΊΠ°ΡΠΎ PreferContainerQuotaForCPUCount). Kubernetes ΡΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΊΠ²ΠΎΡΠΈ. ΠΠ°, Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ», Π½ΠΎ Π°ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π½Π°Π΄Ρ
Π²ΡΡΠ»ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΊΠ²ΠΎΡΠ°, ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° - ΠΊΠ°ΠΊΡΠΎ Π΅ Π² ΡΠ»ΡΡΠ°Ρ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ - ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΡ Π±ΡΠΎΡ Π½Π° ΡΠ΄ΡΠ°ΡΠ° ΠΈ ΡΡΡ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π½Π° Π½ΠΈΡΠΊΠ° Π·Π° Π²ΡΡΠΊΠΎ ΠΈΡΠΊΠ°Π½Π΅, ΡΠΎΠ³Π°Π²Π° Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» ΠΎΡ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠ²ΠΎΡΠΈ ΠΈ Π»ΠΈΠΌΠΈΡΠΈ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° Kubernetes, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ ΡΡΡΠΎ Π½Π΅ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° ΡΠ°ΠΌ. ΠΡΠΎΡΡΠΎ Ρ
Π°ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΠ»ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΏΡΠ΅ΡΠ°Π·Ρ
ΠΎΠ΄Π²Π°ΠΌΠ΅. Π Π°ΠΊΠΎ ΡΠΎΠ²Π° Π΅ ΡΠΈΡΡΠ΅ΠΌΠ° Ρ Π³ΠΎΠ»ΡΠΌΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π² ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΠΎΠ±Π»Π°ΠΊ, ΠΏΠΎΡΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π°.
Π ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Ρ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°?
ΠΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΈ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ I/O Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΠ°ΠΌΠΊΠΈ ΠΊΠ°ΡΠΎ Netty,
ΠΡΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ I/O Π±ΡΠΎΡΡ Π½Π° ΡΠ΄ΡΠ°ΡΠ° ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΠΊΠ»ΡΡΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π·Π°ΡΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π±ΡΠΎΡ Π½Π° I/O Π½ΠΈΡΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, ΡΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΄ΡΠ°ΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ΡΡΡΡΠΈ.
ΠΠ°ΠΊ, ΡΠΎΠ²Π° Π»ΠΈ Π΅?
ΠΠ΅, ΠΈΠΌΠ° Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ. Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, Π½ΠΎ ΠΈΠΌΠ° ΠΈ ΡΠ²ΠΎΡΡΠ° ΡΠ΅Π½Π°. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° I/O Π½ΠΈΡΠΊΠΈ. Π ΡΠΎΠ²Π° Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. Π Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠΊ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΠ²Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΡΠ°Π΄ΠΈΠΊΠ°Π»Π½Π° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ Π½Π°ΡΠΈΠ½ Π½Π° ΠΌΠΈΡΠ»Π΅Π½Π΅.
ΠΡΡΠ²ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΡΡΠΈΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ I/O, ΡΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°. ΠΡΠΎΡΡΠΎΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π²ΡΠΈΡΠΊΠΎ: Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ I/O, ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΊΠ°ΠΊΡΠΎ ΠΎΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ ΡΡΡΠ²ΡΡΠΈ, ΡΠ°ΠΊΠ° ΠΈ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅. Π ΡΠ»ΡΡΠ°Ρ Ρ HTTP Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ ΠΈΠΌΠ° ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ.
Π Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ ΠΎΡ ΠΊΡΠ°ΠΉ Π΄ΠΎ ΠΊΡΠ°ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ°, ΡΠ°ΠΊΠ°Π²Π° ΠΏΡΠΎΠΌΡΠ½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡΠ΄Π½Π° Π·Π° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄ ΡΡΠ°Π²Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ°Π²ΠΊΠ°, Π·Π° Π΄Π°:
- ΠΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π² Π½Π°ΠΉ-Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°;
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΏΠΎ-ΠΎΠΏΡΠΎΡΡΠ΅Π½ ΡΡΠΈΠ»ΠΎΠ² ΠΊΠΎΠ΄ Π² ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ Π²ΠΈ Quarkus
ΠΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° Π΅ ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° Quarkus - Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅.
Quarkus Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Vert.x ΠΈ Netty, Ρ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΠ°ΠΌΠΊΠΈ ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΠ³ΠΎΡΠ΅, Π·Π° Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. Quarkus Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° HTTP ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ, Π½ΠΎ ΠΈ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ΠΈ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠ²ΠΎΡΡΠ° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΈΡΠΎΠ΄Π°, ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ (Apache Kafka, AMQP ΠΈ Π΄Ρ.).
ΠΠΎΠΌΠ΅ΡΡΡ Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» ΠΊΠ°ΠΊΡΠΎ Π·Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½, ΡΠ°ΠΊΠ° ΠΈ Π·Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄.
Quarkus ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π° Π±ΡΠΈΠ»ΡΠ½ΡΠ½ΠΎ. ΠΠ·Π±ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΄ΡΠΎ ββΠΈ Π·Π° Π΄Π²Π΅ΡΠ΅. Π’ΠΎΠ²Π°, Ρ ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΏΠΎΠΌΠ°Π³Π°, Π΅ Π±ΡΡΠ·, Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡΠ΅Π· Π½ΠΈΡΠΊΠ°ΡΠ° Π·Π° ΡΠΈΠΊΡΠ» Π½Π° ΡΡΠ±ΠΈΡΠΈΡ, ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΎΡΠ΅ ΠΊΠ°ΡΠΎ IO Π½ΠΈΡΠΊΠ°. ΠΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠΈ REST ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Quarkus ΠΈΠΌΠ° Π³ΠΎΡΠΎΠ² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, HTTP ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π² Quarkus ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» (Eclipse Vert.x ΠΈ Netty). ΠΡΠΈΡΠΊΠΈ HTTP Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΡΠ΅Π· ΡΠΈΠΊΡΠ» Π½Π° ΡΡΠ±ΠΈΡΠΈΡ (IO Thread) ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π΄ΠΎ ΡΠ°ΡΡΡΠ° ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΌΠ΅ΡΡΠΎΠ½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ Π² ΠΎΡΠ΄Π΅Π»Π½Π° Π½ΠΈΡΠΊΠ° (ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΡΡΠ²Π»Π΅ΡΠΈ ΠΈ Jax-RS) ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° I/O Π½ΠΈΡΠΊΠ° (ΡΠ΅Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΌΠ°ΡΡΡΡΡ).
ΠΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π²ΡΡΡ Ρ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Vert.x. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΡΠ΅, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΌΠΈΠ΄ΡΠ»ΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π‘Π°ΠΉΡΡΡ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΌΠ°ΡΡΡΡΡΠΈ Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΈ SQL ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Apache Kafka Ρ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° AMQP Ρ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Vertx API
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΠ·Π΄Π°Π΄ΠΎΡ
ΠΌΠ΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎΡΠΈ, Π·Π° Π΄Π° Π²ΠΈ Π½Π°ΡΡΠΈΠΌ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡ, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ IDE ΠΈ Π±Π΅Π· ΠΊΠΎΠΌΠΏΡΡΡΡ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΡΡΠΎΡΠΈ
ΠΠΎΠ»Π΅Π·Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ
4 ΠΏΡΠΈΡΠΈΠ½ΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Quarkus - Π£Π΅Π±ΡΠ°ΠΉΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Quarkus β
quarkus.io - ΠΡΠΎΠ΅ΠΊΡ Quarkus Π² GitHub β
github.com/quarkusio/quarkus - ΠΡΠΎΠ΅ΠΊΡ Quarkus Twitter β
twitter.com/QuarkusIO - Π§Π°Ρ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Quarkus β
quarkusio.zulipchat.com - Π€ΠΎΡΡΠΌΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Quarkus β
groups.google.com/forum/# !ΡΠΎΡΡΠΌ/quarkus-dev
10 Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊΠ° Π·Π° Quarkus, Π·Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Ρ ΡΠ΅ΠΌΠ°ΡΠ°
ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΊΠ°Π·Π²Π° Π² ΡΠ°ΠΉΡΠ°
ΠΠ° Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΠΌ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠ°, ΠΈΠ·Π±ΡΠ°Ρ ΠΌΠ΅ 10 Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊΠ°, ΠΊΠΎΠΈΡΠΎ ΠΎΠ±Ρ Π²Π°ΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° Quarkus ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ:
1. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Quarkus: Π‘Π»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Java Framework Π·Π° Kubernetes
ΠΡ Π’ΠΎΠΌΠ°Ρ ΠΠ²Π°ΡΠ½ΡΡΡΠΎΠΌ ΠΈ ΠΠΆΠ΅ΠΉΡΡΠ½ ΠΡΠΈΠΉΠ½
Π¦Π΅Π»ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Quarkus Π΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Java ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° Kubernetes ΠΈ Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ ΠΈ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Π΅Π΄Π½Π° ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π³ΡΠ²ΠΊΠ°Π²ΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΡΠ²ΠΎΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ ΡΠΈΡΠΎΠΊΠ° Π³Π°ΠΌΠ° ΠΎΡ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π² ΡΠ²ΠΎΠ΄Π½Π°ΡΠ° Π»Π΅ΠΊΡΠΈΡ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
2. Quarkus: Π‘ΡΠΏΠ΅ΡΠ±ΡΡΠ·Π° ΡΡΠ±Π°ΡΠΎΠΌΠ½Π° Java
ΠΡ: ΠΡΡ Π‘ΡΡΡΡ
Π’ΠΎΠ·ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊ ΠΎΡ DevNation Live Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Quarkus Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΈ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, API, ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· ΡΡΡΠ²ΡΡ Π² ΡΡΠ΅Π΄Π° Kubernetes/OpenShift, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΈ ΠΏΡΠ°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ, ΠΏΠΎ-Π±ΡΡΠ·ΠΈ ΠΈ ΠΏΠΎ-ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΈ.
3. Quarkus ΠΈ GraalVM: ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° Hibernate Π΄ΠΎ ΡΡΠΏΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΡΠ²ΠΈΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π΄ΠΎ ΡΡΠ±Π°ΡΠΎΠΌΠ½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΈ
ΠΠ²ΡΠΎΡ: Π‘Π°Π½Π΅ ΠΡΠΈΠ½ΠΎΠ²Π΅ΡΠΎ
ΠΡ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ Π½Π°ΡΡΠΈΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ Π΅ ΠΏΠΎΡΠ²ΠΈΠ» Quarkus, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΈ ΠΊΠ°ΠΊ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠ°ΡΠΎ Hibernate ORM, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ Ρ ΡΠΎΠ΄Π½ΠΈΡΠ΅ GraalVM ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
4. ΠΠ°ΡΡΠ΅ΡΠ΅ ΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΡΡΠ²ΡΡ
ΠΠ²ΡΠΎΡ: ΠΠ°ΡΡΠΈΠ½ ΠΡΡΡΡ
ΠΠΈΠ΄Π΅ΠΎΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Quarkus ΠΈ Π΄Π° Π³ΠΎ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΡΡΡΠ²ΡΡ Π½Π° Knative.
5. Quarkus: ΠΠ°Π±Π°Π²Π»ΡΠ²Π°ΠΉΡΠ΅ ΡΠ΅ Ρ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ
ΠΠ²ΡΠΎΡ: ΠΠ΄ΡΡΠ½ Π―Π½Π°Π³Π°
ΠΠΈΠ΄Π΅ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡ ΠΏΡΡΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Quarkus, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π·Π°ΡΠΎ Quarkus ΠΏΠ΅ΡΠ΅Π»ΠΈ ΡΡΡΡΠ°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅.
6. Java ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ β ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΡ Π½ΠΎΡΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Π±ΡΠ΄Π΅ΡΠ΅
ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΎ ΠΎΡ ΠΠ°ΡΠΊ ΠΠΈΡΡΠ»
Π’Π°Π·ΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ ΠΈΡΡΠΎΡΠΈΡΡΠ° Π½Π° Java ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Π·Π°ΡΠΎ Quarkus Π΅ Π±ΡΠ΄Π΅ΡΠ΅ΡΠΎ Π½Π° Java.
7. Quarkus: Π‘ΡΠΏΠ΅ΡΠ±ΡΡΠ·Π° ΡΡΠ±Π°ΡΠΎΠΌΠ½Π° Java
ΠΠ²ΡΠΎΡ: ΠΠΈΠΌΠΈΡΡΠΈΡ ΠΠ½Π΄ΡΠ΅Π°Π΄ΠΈΡ
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° Quarkus, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΠ΅ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅: ΠΏΡΠΎΡΡΠΎΡΠ°, ΡΠ²ΡΡΡ
Π²ΠΈΡΠΎΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ, Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ.
8. ΠΠ²Π°ΡΠΊΡΡ ΠΈ ΡΡΠ±Π°ΡΠΎΠΌΠ½ΠΈ ΡΠ°ΠΊΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ
ΠΠ²ΡΠΎΡ: ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΠΡΠΊΠΎΡΠΈΠ΅
Π§ΡΠ΅Π· ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ GraalVM, Quarkus ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΠ»ΡΡΠ°-Π±ΡΡΠ· ΠΎΠΏΠΈΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΡΠ±Π°ΡΠΎΠΌΠ½Π° ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ²ΡΠΎΡΡΡ Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΡΡΡΠ°Π½Π° Π½Π° Quarkus ΠΈ ΠΊΠ°ΠΊ Π΄Π° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΠΈ ΡΡΡΠΈΠΉΠΌΠΈΠ½Π³ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
9. Quarkus ΠΈ Π±ΡΡΠ·ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Eclipse MicroProfile
ΠΠ²ΡΠΎΡ: ΠΠΆΠΎΠ½ ΠΠ»ΠΈΠ½Π³Π°Π½
Π§ΡΠ΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Eclipse MicroProfile ΠΈ Quarkus, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈ MicroProfile ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π·Π° Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏΡΡ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MicroProfile Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Kubernetes.
10. Java, "Turbo" Π²Π΅ΡΡΠΈΡ
ΠΠ²ΡΠΎΡ: ΠΠ°ΡΠΊΡΡ ΠΠΈΠΉΠ»
ΠΠ²ΡΠΎΡΡΡ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Quarkus Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠΏΠ΅Ρ-ΠΌΠ°Π»ΠΊΠΈ, ΡΡΠΏΠ΅Ρ-Π±ΡΡΠ·ΠΈ Java ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΠΏΡΠΎΠ±ΠΈΠ²ΠΈ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π² ΡΡΠ΅Π΄Π° Π±Π΅Π· ΡΡΡΠ²ΡΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com