Serwer aplikacji webowej JAVA

0

Witajcie

Posiadam serwer Intel Xeon E3-1265L v4 + 16gb ram (32gb ram jak będą kości)
Internet 250/25mbps
Łączne ze zmiennym IP (będzie tunelowane przez ddns.net)

Chcę postawić środowisko do serwera webowego + bazy danych

  1. Wybór bazy danych to MySQL Community Edition lub MariaDB z silnikiem InnoDB
    MySQL Community Edition ma problem z licencją a projekt jest na razie niekomercyjny
    Wymaganie aby baza danych była tranzakcyjna (można rollback'ować tranzakcje)
    Po stronie samej bazy danych będzie dużo widoków, funkcji i wyzwalaczy więc takie funkcje się przydadzą
  2. Serwer Tomcat/Wildfly
    Generalnie poza interfejsem chyba różnicy nie ma i od strony programistycznej nie ma potrzeby nic robić
    System kontroli wersji jest na GitHUB jako niepubliczny

Jak to ma wyglądać od strony serwer:
Sieć będzie VPN'em lub ddns.net zainstlowany na routerze (UPC Connect BOX)
Sama przepustowość wystarczy.

Dwie koncepcje na instalacje systemu:
CentOS 7 jako supervaisor oraz wirtualki (2gb ram):
CentOS 7 + MySQL/MariaDB jako serwer bazy danych (baza produkcyjna + testowa) (2gb ram)
CentOS 7 + Tomcat jako serwer aplikacji (4gb ram)
CentOS 7 + Tomcat jako serwer testowy (2gb ram)
CentOS 7 + Eclipse jako środowisko developerskie po RDP/VNC (2gb ram)

Ewentualnie zainstlować DOCKER'a i zrobić to na kontenerach (preferowany doświadczenia innych osób)

Dysk twardy na razie SSD bez RAID gdyż chciałbym mieć SSD na SAS z kontrolerem i RAID oraz systemem backupu na zewnątrz jednak to są bardziej plany

Nad projektem pracują dwie osoby
Zależy mi aby zamiana sprzętu nie wpłynęła na zmianę softu (szybkie przeniesienie)
Zależy mi aby ewentualny backup był szybki do odtworzenia.

Plany na HA:
Drugi taki sam serwer jako klaser active-active

Proszę o doświadczenia jak stawialiście takie rozwiązania - koncepcja rozdzielenia bazy danych i aplikacji jest w celu ewentualnie przeniesienia serwera bazy danych na inny serwer gdy pojawi się potrzeba

0

Jeśli chodzi o bazy danych, to rozważ Postgresa. MySQL jest jakiś upośledzony (prywatna opinia).

Dlaczego potrzebujesz serwera aplikacji?

0

Dlaczego Postgress SQL?

W MySQL jest dużo rzeczy w necie o rekurencyjnym przechodzeniu drzewa dla tabel z samozłączeniem, rollbackowanie tranzakcji dla wyzwalaczy oraz mam doświadczenie w przypadku tworzenia czegoś na to

Chciałbym MariaDB + InnoDB a nie MySQL Community Edition

Dlaczego potrzebujesz serwera aplikacji?
Aplikacji którą piszemy z kolegą jako prywatny projekt
będzie to środowisko "produkcyjne" lecz bardziej aby mieć już domenę i nie bawić się w symulowanie, mieć pocztę oraz aby całość działała bo już coś z tego jest

0

Nie mówię, że masz brać postgresa, tylko rozważyć ;)

Nie wiem czy pod mysqlem już można łatwo podzielić np. "a,b,c,d,e,f" na osobne wiersze. Pod postgresem banał.

0

screenshot-20190511171039.png

Mam takie coś
Chcę zrobić z tego tak aby zamiast wierszy były kolumny z nazwami

MySQL średnio może to zrobić

0

Tak generalnie to bym wolał aby w temacie było poruszane jak zrobić serwera a nie jak wybrać bazę danych

Na początku był MSSQL a następnie MySQL do którego przepisuję wszystko co jest wraz wyzwalaczami co nie jest tak prostą sprawą jakby mi się wydawało

Projekt jest nowy tz. piszemy od początku a nie przepisujemy to co jest

0
Marcin Marcin napisał(a):

screenshot-20190511171039.png

Mam takie coś
Chcę zrobić z tego tak aby zamiast wierszy były kolumny z nazwami

MySQL średnio może to zrobić

Może to zrobić za pomocą funkcji agregujących i nazywa się to pivotem. Pod postgresem jest masa ciekawych rozszerzeń, np. dla pivota pewne usprawnienie: https://www.postgresql.org/docs/11/tablefunc.html

0

Z Twojego opisu jawią się 3 wymagania:
a) Zależy mi aby zamiana sprzętu nie wpłynęła na zmianę softu (szybkie przeniesienie)
b) Zależy mi aby ewentualny backup był szybki do odtworzenia.
c) HA - klaster active-active

Ad. a) Kontenery wyglądają na dużo lżejsze rozwiązanie do przenoszenia niż VM. Możesz sobie odseparować infrastrukturę (kontener tomcata), aplikacje (*.war) i dane (baza). Dyski wirtualnej maszyny mogą z czasem trochę spuchnąć i stać się nieporęczne w transferze (pamiętam przypadek, gdzie development dostarczył virtualkę z dyskiem 2 terabajty, a samej aplikacji było raptem kilkadziesiąt MB, z czego większość to biblioteki springowe...).

Dla Dockera, możesz mieć np. obraz tomcata i wrzucać tylko *.war na dedykowany wolumen, więc szybkie przenoszenie aplikacji sprowadziłoby się do:

  • przygotowania pliku konfiguracyjnego Dockera
  • wrzucenia *.war do dedykowane wolumenu
  • uruchomienie kontenera

b) A po co backup szybki do odtworzenia? Czy Twoje wymaganie nie powinno brzmieć inaczej, np. "maksymalna niedostępność serwisu to X" i pod to wymaganie robisz architekturę rozwiązania?
Prędkość odtwarzania będzie uzależniona od rozmiaru bazy, rozmiaru pełnego backupu, ilości danych przyrostowych, szybkości sieci, dysków itp.

Masz 2 brzegowe przypadki do rozważenia:

  • baza 10 TB i zmiany dzienne rzędu 1gb
  • baza 1 gb i zmiany dzienne rzędu 10TB

Dla drugiego przypadku opłaca się robić "full backup" często, bo transfer 1GB "z backupowni" na dedykowany serwer nie powinien być jakiś mega czasochłonny. Dla pierwszego full backup robi się rzadko, ale za to backupy przyrostowe często. Można trzymać bazę "standby" i tam aplikować te przyrostowe, w efekcie przełączenie na bazę backupową będzie wiązało się z odtworzeniem "delty" (co jakiś czas robisz full backup, np. w niedzielę, a delty w pozostałe dni tygodnia, możesz trzymać bazę "prawie odtworzoną" )

Możesz też dedykowaną sieć pod potrzeby backupu.

c) Klaster HA w opisanym scenariuszu to jakieś puste słowo, bO co chcesz klastrować? Serwery aplikacyjne, bazy, komponenty aplikacyjne?
Trochę to HA kłoci się z jednym dyskiem SSD i 1 ścieżką do internetu (łącze UPC?), bo tracisz łączność między węzłami klastra i co dalej?

2
Marcin Marcin napisał(a):

Projekt jest nowy tz. piszemy od początku a nie przepisujemy to co jest

I chcecie tam Tomcat / Wildfly, ale dlaczego? Chcecie mieć od razu projekt spadkowy, czy co?

0

I chcecie tam Tomcat / Wildfly, ale dlaczego? Chcecie mieć od razu projekt spadkowy, czy co?

Dlaczego projekt spadkowy? O co chodzi?

W sprawie MySQL i PostgreSQL
Poczytałem, sprawdziłem i ogarnąłem dlaczego każdy przerzuca się na MariaDB a ucieka od MySQL
Swoje rozwiązanie przeniosę na PostgreSQL

W sprawie wyboru języka
Nie wiem czy nowe rozwiązanie tworzy się w javie jednak nie wydaje mi się aby była ona spadkowa.
Alternatywą jest python jednak zaczęliśmy już to pisać w javie pod Open JDK

W sprawie serwera to Tomcat/Wildfly nie jest chyba czymś co jest przestarzałe i nadal oba te rozwiązania są rozwijane

1
Marcin Marcin napisał(a):

W sprawie serwera to Tomcat/Wildfly nie jest chyba czymś co jest przestarzałe i nadal oba te rozwiązania są rozwijane

Są przestarzałe mentalnie.

COBOL też jest nadal rozwijany, ale też nie polecam.

0

Są przestarzałe mentalnie.

Co robić? Jak żyć?

Mam zainstalować coś innego do Javy?

1

Nic nie musisz instalować. Java Ci starczy.
Zrób co potrzebujesz na spring-boot. start.spring.io . Jest pełno tutoriali.
Aplikacja końcowa to jar, mozesz go odpalać z basha, albo pod dockerem.

Btw. jestem gorącym przeciwnikiem springa, ale jak nie masz doświadczenia, to będzię Ci z tym springiem najłatiwej.

Możecie popatrzeć na SparkJava, Ratpack, WebFlux - mniej chory sposób programowania , ale może być nie dla was.

0

Bardziej bym chciał dockera jednak nie bardzo wiem czy na tak małej aplikacji ma to sens?
Czy mógłby ktoś się wypowiedzieć czy na jednym serwerze do tego testowym warto zainstalować dockera?

1 użytkowników online, w tym zalogowanych: 0, gości: 1