Hosting for Java Web App

tessob
Уже с Приветом
Posts: 549
Joined: 07 Jan 2016 13:04

Re: Hosting for Java Web App

Post by tessob »

Лапша в микросервисах - проблема архитектора, а не микросервисов. У таких архитекторов обычно еще проблема с NoSQL, т.к. джойны не работают.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу... :o
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот springBoot, спасибо!
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Hosting for Java Web App

Post by valchkou »

Montchik wrote: 08 May 2018 19:34 Отцы, куда-то вас не туда понесло. Мне нужны не resful микросервисы а вполне обычная веб аппка. Чесно скажу,что засовывать application server в аппку звучит сильно через жопу... :o
Однако я вебом не занимался последние шесть лет, может теперь так принято. Посмотрю на этот 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 - ну куда проще то
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

Установил 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 со спринг бутом.

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] ------------------------------------------------------------------------
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Hosting for Java Web App

Post by iDesperado »

Montchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1G
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Hosting for Java Web App

Post by valchkou »

Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

iDesperado wrote: 10 May 2018 06:17
Montchik wrote: 10 May 2018 04:13 Установил spring-boot, скомпилил пример Hello World with embedded tomcat, запустил джарик, подключил java visual vm. Ну че могу сказать, аппка влет сожрала 120MB RAM
ручки кривые или не туда смотришь. jre 1.8 без ничего сразу должно 124 мб отжирать. с веб сервером и хибером под 200. смысла в облаке эти пару байт экономить нет никакого, все равно даже микро образы идут с 1G
Причем здесь ручки? Я пример с спринг-бута забрал и запустил как в ихнем reference написано, никакой отсебятины. :pain1:

Кстати, 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);
		}
    }
}
вот usage stats:
Heap: 9MB
Meta: 800KB
10 threads
OS RAM: 15MB

Ну и где тут "jre 1.8 без ничего сразу должно 124 мб отжирать", мистер специалист по кривым ручкам? :funny:

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)
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

valchkou wrote: 10 May 2018 16:35
Montchik wrote: 10 May 2018 04:13 Вот такое maven dependency tree для запуска джарика. В принципе не очень печально с левыми зависимостями. Hibernate validator только непонятно зачем и он еще за собой jboss logging тянет! Зло этот ваш maven, народ с ним расслабился очень, совсем за classpath не следит.
народ не расслабился, народ внимательно следит за класспасс и удаляет оттуда весь ненужный мусор используя exclusions.
если с бутом выгорит советую добавить actuator
эта депенденси добавляет REST API через который можно смотреть много интересной внутренней инфы про жвм, проперти, окружение, и даже логи.
Имеется бесплатная тулза которая визиализирует всю эту служебную инфу
https://github.com/codecentric/spring-boot-admin
Спасибо, посмотрю. :fr:
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

Запустил спринг бут SampleController пример с помошью gradle и вот что получил:

Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads

Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс! :-)
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Hosting for Java Web App

Post by valchkou »

Montchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:

Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads

Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс! :-)
правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулза
tessob
Уже с Приветом
Posts: 549
Joined: 07 Jan 2016 13:04

Re: Hosting for Java Web App

Post by tessob »

Мне это уже анекдот напоминает ))

Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

Неплохой бородатый анекдот. А по теме есть че сказать?
tessob
Уже с Приветом
Posts: 549
Joined: 07 Jan 2016 13:04

Re: Hosting for Java Web App

Post by tessob »

По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

valchkou wrote: 11 May 2018 19:01
Montchik wrote: 11 May 2018 04:46 Запустил спринг бут SampleController пример с помошью gradle и вот что получил:

Tomcat/Gradle:
Heap: 40MB
Meta: 32MB
26 Threads

Какалось бы та же самая аппка только стартуется другим тулом, а хипа жрет в два раза меньше. Парадокс! :-)
правильней было бы сбилдить жар и запускать его, тогда результат скорее всего будет одинаков. На продакшн ведь жар идет а не тулза
Логично, но я почему-то думал что тулза просто стартует jvm и запускает в ней jar. Попробую jetty вместо томката для сравнения.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Hosting for Java Web App

Post by Montchik »

tessob wrote: 12 May 2018 07:50 По теме. В чем сакральный смысл данных тестов? Spring Boot нацелен на упрощение процесса разработки. Не на супер перфоманс из коробки. Разрабатывать стало реально быстрее и проще. У меня в продакшене уже несколько сотен апок в AWS на бинсталке и в Хероку. Весь web-контент внутри. В некоторых случаях даже JNI либы внутри. Если у меня начинаются проблемы с GC, я просто добавляю еще инстансов и проблемы уходят. Понятно, что это не отменяет оптимизацию, но это точно не то с чего я начинал бы. Просто жизненный цикл софта с каждым годом все короче и короче.
Спасибо за пояснение. А тест драйвлю я спринг бут чтобы убедиться что это действительно for real, а не очередная глюкавая хрень якобы могущая делать все что надо и под эту тему жрущая ресурсы как не в себя. За хостинг платить придется из собственного кармана.

Горизонтальное скалирование системы не всегда возможно, хотя для веба наверное это не проблема. Не уловил связи межцу укорачиванием жизненного цикла софта и веб хостингом. :pain1:

Return to “Вопросы и новости IT”