Hosting for Java Web App
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
Лапша в микросервисах - проблема архитектора, а не микросервисов. У таких архитекторов обычно еще проблема с NoSQL, т.к. джойны не работают.
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу...
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
отцы плохого не посоветуют! прежде чем возмущаться ты попробуй и зацени простоту, изящность и гибкость данного подхода. Он непросто так набрал популярность на рынке.Montchik wrote: 08 May 2018 19:34 Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу...
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
твой UI должен какимто образом разговаривать с бакэндом, и если не через rest/json то как? не jsp же?
в springBoot для простоты весь UI можно поместить в то же проект в одно из след мест
src/main/resources/META-INF/resources/index.html
src/main/resources/resources/index.html
src/main/resources/static/index.html
src/main/resources/public/index.html
java -jar your.jar поднимет и UI и бакенд на любом клауде, машине, VM - ну куда проще то
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM и почему-то продолжара отжирать даже в idle пока gc не случился. Не нравится мне это ибо если хостить в облаке, то за каждую лишнюю сотню мегов придется платить...
Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
Надо теперь попробовать cradle и embedded jetty со спринг бутом.
Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
Надо теперь попробовать cradle и embedded jetty со спринг бутом.
Code: Select all
package hello;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
Code: Select all
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------< net.montchik.springboot.poc:maven >------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:3.0.2:tree (default-cli) @ maven ---
[INFO] net.montchik.springboot.poc:maven:jar:0.0.1-SNAPSHOT
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] | | | +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] | | | \- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile
[INFO] | | | \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile
[INFO] | | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] | +- org.springframework:spring-core:jar:5.0.6.RELEASE:compile
[INFO] | | \- org.springframework:spring-jcl:jar:5.0.6.RELEASE:compile
[INFO] | \- org.yaml:snakeyaml:jar:1.19:runtime
[INFO] +- org.springframework.boot:spring-boot-starter-json:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.5:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.5:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.5:compile
[INFO] | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.5:compile
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.31:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.31:compile
[INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.31:compile
[INFO] +- org.hibernate.validator:hibernate-validator:jar:6.0.9.Final:compile
[INFO] | +- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
[INFO] | \- com.fasterxml:classmate:jar:1.3.4:compile
[INFO] +- org.springframework:spring-web:jar:5.0.6.RELEASE:compile
[INFO] | \- org.springframework:spring-beans:jar:5.0.6.RELEASE:compile
[INFO] \- org.springframework:spring-webmvc:jar:5.0.6.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:5.0.6.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:5.0.6.RELEASE:compile
[INFO] \- org.springframework:spring-expression:jar:5.0.6.RELEASE:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.453 s
[INFO] Finished at: 2018-05-09T21:53:50-05:00
[INFO] ------------------------------------------------------------------------
-
- Уже с Приветом
- Posts: 1349
- Joined: 28 Nov 2008 17:50
Re: Hosting for Java Web App
ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1GMontchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Причем здесь ручки? Я пример с спринг-бута забрал и запустил как в ихнем reference написано, никакой отсебятины.iDesperado wrote: 10 May 2018 06:17ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1GMontchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
Кстати, 120MB heap usage было до первого minor GC, потом устаканилось на следующем.
Tomcat/Maven:
Heap: 83MB
Meta: 48MB
27 Threads
Не поленился и запустил в cmd следующий HelloWorld,
Code: Select all
package hello;
public class HelloWorld {
public static void main(String[] args) throws Exception {
System.out.println("Hello World!");
while (true){
Thread.sleep(2000);
}
}
}
Heap: 9MB
Meta: 800KB
10 threads
OS RAM: 15MB
Ну и где тут "jre 1.8 без ничего сразу должно 124 мб отжирать", мистер специалист по кривым ручкам?
FYI - how to check jvm heap size params:
Code: Select all
C:\Projects\SpringBootPOC\plain>java -XX:+PrintFlagsFinal -version | findstr HeapSize
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 65011712 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1040187392 {product}
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Спасибо, посмотрю.valchkou wrote: 10 May 2018 16:35народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Hosting for Java Web App
правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулзаMontchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
Мне это уже анекдот напоминает ))
Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Hosting for Java Web App
По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Логично, но я почему-то думал что тулза просто стартует jvm и запускает в ней jar. Попробую jetty вместо томката для сравнения.valchkou wrote: 11 May 2018 19:01правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулзаMontchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:
Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads
Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс!
-
- Уже с Приветом
- Posts: 2119
- Joined: 27 Dec 1999 10:01
- Location: Воронеж -> Naperville, IL
Re: Hosting for Java Web App
Спасибо за пояснение. А тест драйвлю я спринг бут чтобы убедиться что это действительно for real, а не очередная глюкавая хрень якобы могущая делать все что надо и под эту тему жрущая ресурсы как не в себя. За хостинг платить придется из собственного кармана.tessob wrote: 12 May 2018 07:50 По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
Горизонтальное скалирование системы не всегда возможно, хотя для веба наверное это не проблема. Не уловил связи межцу укорачиванием жизненного цикла софта и веб хостингом.