Apache Ignite Zero Deployment: Ρ‚ΠΎΡ‡Π½ΠΎ Zero?

Apache Ignite Zero Deployment: Ρ‚ΠΎΡ‡Π½ΠΎ Zero?

ΠœΡ‹ β€” ΠΎΡ‚Π΄Π΅Π» развития Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ€ΠΎΠ·Π½ΠΈΡ‡Π½ΠΎΠΉ сСти. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ руководство поставило Π·Π°Π΄Π°Ρ‡Ρƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Π΅ вычислСния Π·Π° счСт использования Apache Ignite Π² связкС с MSSQL, ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ сайт с прСкрасными ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΠΌΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Java-ΠΊΠΎΠ΄Π°. На сайтС сразу понравился Zero Deployment, описаниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ чудСса: you don’t have to manually deploy your Java or Scala code on each node in the grid and re-deploy it each time it changes. По Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ оказалось, Ρ‡Ρ‚ΠΎ Zero Deployment ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ спСцификой использования, особСнностями ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΠΈ Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ. Под ΠΊΠ°Ρ‚ΠΎΠΌ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ ΠΈ подробности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π‘ΡƒΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. Π•ΡΡ‚ΡŒ справочник Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆ SalesPoint ΠΈ справочник Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Sku (Stock Keeping Unit). Π’ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ «Ρ‚ΠΈΠΏΠœΠ°Π³Π°Π·ΠΈΠ½Π°» со значСниями «ΠΌΠ°Π»Ρ‹ΠΉ» ΠΈ «Π±ΠΎΠ»ΡŒΡˆΠΎΠΉ». К ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ (загруТаСтся ΠΈΠ· Π‘Π£Π‘Π”) ассортимСнт (список Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆ) ΠΈ подаСтся информация ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠ²Π°Ρ€
ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ· ассортимСнта ΠΈΠ»ΠΈ добавляСтся Π² ассортимСнт.

ВрСбуСтся ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ кСш Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€Π°Ρ… Π½Π° мСсяц Π²ΠΏΠ΅Ρ€Π΅Π΄. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±ΠΎΠ΅Π²ΠΎΠΉ систСмой Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ клиСнтского ΡƒΠ·Π»Π° Ignite Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ‚ Π²ΠΈΠ΄Π° (Ρ‚ΠΈΠΏΠœΠ°Π³Π°Π·ΠΈΠ½Π°, ΠΊΠΎΠ΄Π’ΠΎΠ²Π°Ρ€Π°, дСнь, число_Ρ‚ΠΎΡ‡Π΅ΠΊ_ΠΏΡ€ΠΎΠ΄Π°ΠΆ) ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π‘Π£Π‘Π”.

2. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠžΠΏΡ‹Ρ‚Π° ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ ΠΏΠ»ΡΡΠ°Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠ΅Ρ‡ΠΊΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ с ΠΎΠ±Π·ΠΎΡ€Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ 2016 Π³ΠΎΠ΄Π° Знакомство с Apache Ignite: ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги содСрТит ссылку Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Apache Ignite ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΡƒΠΏΡ€Π΅ΠΊ Π² нСвнятности этой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Π» ΠΏΠ°Ρ€Ρƒ Ρ€Π°Π·, ΡΡΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ наступаСт. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Ρƒ getting-started, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
оптимистично ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ «You’ll be up and running in a jiffy!». Π Π°Π·Π±ΠΈΡ€Π°ΡŽΡΡŒ с настройками ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды, ΡΠΌΠΎΡ‚Ρ€ΡŽ Π΄Π²Π° Π²ΠΈΠ΄Π΅ΠΎ Apache Ignite Essentials, для ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ½ΠΈ оказались Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. УспСшно Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Ignite ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки со стандартным Ρ„Π°ΠΉΠ»ΠΎΠΌ «example-ignite.xml», ΡΠΎΠ±ΠΈΡ€Π°ΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Compute Application с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Maven. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Zero Deployment, какая красота!

Π§ΠΈΡ‚Π°ΡŽ дальшС, Π° Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сразу ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ affinityKey (создан Ρ€Π°Π½Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· SQL-запрос), Π΄Π° Π΅Ρ‰Π΅ ΠΈ примСняСтся Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ BinaryObject:

IgniteCache<BinaryObject, BinaryObject> people 
        = ignite.cache("Person").withKeepBinary(); 

ΠŸΠΎΡ‡ΠΈΡ‚Π°Π» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ: Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ рСфлСксии, доступ ΠΊ полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ дСсСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (экономия памяти). Но Π·Π°Ρ‡Π΅ΠΌ вмСсто Person ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ BinaryObject, вСдь Π΅ΡΡ‚ΡŒ Zero Deployment? Π—Π°Ρ‡Π΅ΠΌ IgniteCache<Key,Person> пСрСводится Π² IgniteCache<BinaryObject, BinaryObject>? Пока нСясно.

ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°ΡŽ Compute Application ΠΏΠΎΠ΄ свой случай. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ справочника Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π² MSSQL ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ [id] [int] NOT NULL, создаю кСш ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ

IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")

Π’ xml-ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ кСш ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½

<bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="spCache"/>
    <property name="cacheMode" value="PARTITIONED"/>
</bean>

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ построСн Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ кластСра для ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π°ΠΌ записСй salesPointCache, послС Ρ‡Π΅Π³ΠΎ клиСнтский ΡƒΠ·Π΅Π» Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ суммированиС.

Π§ΠΈΡ‚Π°ΡŽ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» First Ignite Compute Application, дСлаю ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ кластСра Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ IgniteRunnable(), ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

  @Override
  public void run() {
    SalesPoint sp=salesPointCache.get(spId);
    sp.calculateSalesPointCount();
    ..
  }

Π”ΠΎΠ±Π°Π²Π»ΡΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π½Π° тСстовом Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ Π½Π° сСрвСрС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π—Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π΄Π²Π° тСстовых сСрвСра CentOs, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ip-адрСса Π² default-config.xml, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ

./bin/ignite.sh config/default-config.xml

Оба ΡƒΠ·Π»Π° Ignite Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ видят Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π£ΠΊΠ°Π·Ρ‹Π²Π°ΡŽ Π½ΡƒΠΆΠ½Ρ‹Π΅ адрСса Π² xml-ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ клиСнтского прилоТСния, ΠΎΠ½ΠΎ запускаСтся, добавляСт Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΠ·Π΅Π» Π² Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ ΠΈ сразу ΠΆΠ΅ ΡƒΠ·Π»ΠΎΠ² становится снова Π΄Π²Π°. Π’ Π»ΠΎΠ³Π΅ значится «ClassNotFoundException: model.SalesPoint» Π² строкС

SalesPoint sp=salesPointCache.get(spId);

StackOverflow Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ошибки β€” Π½Π° сСрвСрах CentOs Π½Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса SalesPoint. ΠŸΡ€ΠΈΠ΅Ρ…Π°Π»ΠΈ. Как ΠΆΠ΅ «you don’t have to manually deploy your Java code on each node» ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ тСксту? Или «your Java code» β€” это Π½Π΅ ΠΏΡ€ΠΎ SalesPoint?

ВСроятно я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил β€” снова Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ ΠΈΡΠΊΠ°Ρ‚ΡŒ, Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ снова ΠΈΡΠΊΠ°Ρ‚ΡŒ. Π§Π΅Ρ€Π΅Π· врСмя Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ всС, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠΆΠ΅ Π½Π΅Ρ‚. Пока искал, нашСл нСсколько интСрСсных Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ.

Valentin Kulichenko, Lead Architect at GridGain Systems, ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° StackOverflow, Π°ΠΏΡ€Π΅Π»ΡŒ 2016:

Model classes are not peer deployed, but you can use withKeepBinary() flag
on the cache and query BinaryObjects. This way you will avoid deserialization
on the server side and will not get ClassNotFoundException.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅: Denis Magda, Director of product management, GridGain Systems.

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π° Π₯Π°Π±Ρ€Π΅ ΠΏΡ€ΠΎ микросСрвисы ссылаСтся Ρ‚Ρ€ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ Denis Magda: Microservices Part I, Microservices Part II, Microservices Part III 2016-2017 Π³ΠΎΠ΄ΠΎΠ². Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Denis ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» кластСра Ρ‡Π΅Ρ€Π΅Π· MaintenanceServiceNodeStartup.jar. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запуск с xml-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠ·Π΅Π» кластСра:

That's it. Start (..)  node using MaintenanceServiceNodeStartup file or pass
maintenance-service-node-config.xml to Apache Ignite's ignite.sh/bat scripts.
If you prefer the latter then make sure to build a jar file that will contain
all the classes from java/app/common and java/services/maintenance directories.
The jar has to be added to the classpath of every node where the service
might be deployed.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, that’s it. Π’ΠΎΡ‚ ΠΎΠ½, оказываСтся, Π·Π°Ρ‡Π΅ΠΌ, этот Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚!

3. SingleJar

Denis занял Π² ΠΌΠΎΠ΅ΠΌ Π»ΠΈΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто, ΠΈΠΌΡ…ΠΎ самый ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠ· всСх доступных. Π’ Π΅Π³ΠΎ MicroServicesExample Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅ содСрТится ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ настройки ΡƒΠ·Π»ΠΎΠ² кластСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся Π±Π΅Π·ΠΎ всяких Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… присСданий.

Π”Π΅Π»Π°ΡŽ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΈ подобию, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» jar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт «data node» Π»ΠΈΠ±ΠΎ «client node» Π² зависимости ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π‘Π±ΠΎΡ€ΠΊΠ° запускаСтся ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Zero Deployment ΠΏΠΎΠ±Π΅ΠΆΠ΄Π΅Π½.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ΠΎΠ² тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ дСсяткам Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΎΠ² Π±ΠΎΠ΅Π²Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сущСствуСт Π½Π΅ зря. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ расход памяти Π½Π° Π½ΠΎΠ΄Π°Ρ…, ΠΈ Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ BinaryObject оказался ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½.

4. Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ встрСчСнный ΡƒΠΏΡ€Π΅ΠΊ Π² нСвнятности Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Apache Ignite оказался справСдлив, с 2016 Π³ΠΎΠ΄Π° помСнялось Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Новичку нСпросто ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° основС сайта ΠΈ/ΠΈΠ»ΠΈ рСпозитория.

По ΠΈΡ‚ΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ слоТилось Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Zero Deployment Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° систСмном ΡƒΡ€ΠΎΠ²Π½Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ: BinaryObject примСняСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ кластСра Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ классами; Zero Deployment β€” Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ
самого Apache Ignite ΠΈ распространяСт ΠΏΠΎ кластСру систСмныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

НадСюсь, ΠΌΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Apache Ignite.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com