ERP system založený na PHP/MySQL: lepší jeden server nebo dva samostatné?

Fungující ERP systém naprogramovaný v Nette, PHP, MySQL - budu nyní aktualizovat velmi starý OS a přecházet na novější verze PHP, MySQL(MariaDB) a otázka zní, je lepší to rozdělit na dva samostatné (virtuální) servery, jeden kde budou scripty samotné a PHP, tedy aplikační server a druhý pouze s MySQL (MariaDB) nebo to mít jako doteď na jednom serveru?

Domnívám se, že je lepší to rozdělit. Hlavní výhodu vidím v tom, že fyzicky mohu každý z virtuálů dát na jiné železo, a tedy celkově systém může být tím pádem rychlejší, za druhé lépe se to spravuje a MySQL(MariaDB) server může být využitelný i pro jiné aplikace, lépe se to zálohuje a pokud se v budoucnu budou opět dělat upgrady PHP nebude to ovlivňovat db server.

Jsou nějaká proti nebo uvažuju správně?
« Poslední změna: 05. 09. 2019, 10:50:16 od Petr Krčmář »


Pro debian má mariadb velice slušnou podporu starších (i nových) verzí, pro nejnovější řadu 10.3 mají deby i pro oldoldoldstable wheezy. Takže aktualizace mariadb bych se nebál.

Pokud umíte správně používat SQL, pak je rozdělení na místě - rozdělit dopředu, sloučit se to dá vždycky. Opačně se to dělá hůř.

Co se týče správného použití SQL, tak tam mám snad jen poznámku k tomu, že SQL se používá pro maximální optimalizaci práce s daty, a aby se přenášelo minimum dat - pak nevadí ani oddělený server. Bohužel, MySQL se dá optimalizovat jen velmi omezeně - spíš se používá na mnoho malých selectů než na jeden velký. V takovém případě se oddělení serverů projeví poklesem výkonnosti. (U ERP systémů není nic divného mít select na tři stránky, dvanáct joinů, pět subselectů apod., ale s tím Vám MySQL nepomůže).

Takže odpověď zní: při správném použití to smysl dává. Při nesprávném (které díky výběru technologií trochu předpokládám) to ubere na výkonu.

Pokud umíte správně používat SQL, pak je rozdělení na místě - rozdělit dopředu, sloučit se to dá vždycky. Opačně se to dělá hůř.
Já nejsem programátor daného systému. Takže mohu jen doufat.

Co se týče správného použití SQL, tak tam mám snad jen poznámku k tomu, že SQL se používá pro maximální optimalizaci práce s daty, a aby se přenášelo minimum dat - pak nevadí ani oddělený server. Bohužel, MySQL se dá optimalizovat jen velmi omezeně - spíš se používá na mnoho malých selectů než na jeden velký. V takovém případě se oddělení serverů projeví poklesem výkonnosti. (U ERP systémů není nic divného mít select na tři stránky, dvanáct joinů, pět subselectů apod., ale s tím Vám MySQL nepomůže).

Nemůže ani pomoct to, že se to fyzicky rozdělí na dvě železa? Každý ze serverů bude virtuální a db mohu dát na jiné železo než aplikační server. Nyní je to ne jednom virtuálu tudíž na jednom železe.

Takže odpověď zní: při správném použití to smysl dává. Při nesprávném (které díky výběru technologií trochu předpokládám) to ubere na výkonu.

A jaká technologie by pro ERP byla lepší? Těžko to změním, je to již několik let dobře fungující systém a řekl bych dost veliký - není to jen o ERP ale vlastně o chodu celé manufaktury.

...

Pokud má oddělený SQL server smysl, pak je to jedině v tom, že dotazy budou co nejkomplexnější a směřovat k tomu, aby co nejvíc početního výkonu převzal SQL server, ale zároveň bylo potřeba nejméně přenosového pásma. Pokud mezi PHP a MySQL serverm putuje příliš mnoho dat nebo příliš mnoho dotazů, oddělení serverů se nevyplatí. V prvním případě to zpomalí kapacita linky (1 Gbbps?), v druhém případě se nasčítají latence.

Bez měření se k tomu nedá nic víc říct.


Odpoved tady neni trivialni ano/ne.
Muze bejt, ze rozdelenim se to zpomaly kvuli navazovani spojeni. Ano je to extremni pripad, ale chci poukazat na to, ze tezko tady muzeme sypat odpovedi.

EDIT: koukam, ze kolega Šilhavý to napsal prede mnou (mel jsem to tu dele otevrene)
Děkuji za možnost editace příspěvku.

EDIT: koukam, ze kolega Šilhavý to napsal prede mnou (mel jsem to tu dele otevrene)

To je jedno.

faha

  • *
  • 34
  • František Havel
    • Zobrazit profil
    • František Havel
    • E-mail
U zakazniku ktere spravuje se mi ve vetsine pripadu vyplatilo rozdelit, pokud se nabavime o nejakem microserveru, kde bezi jeden web aplikace.

Pro zatizene aplikace se nam overil setup nginx/varnish/haproxy -> backend servery (php/python) -> backend DB, DB server navic ma vetsinou master-slave replikaci minimalne pro zalohy, setup umoznuje navic odladit samostatnou konfiguraci pro kazdy server v retezci, protoze aplikacni stroj potrebuje trochu neco jineho nez ten DB.

Me osobne oddelene role prijde jako dobry koncept
(navic tomuhle dnes "preje" i doba kde se masivne nasazuji kontejnerove technologie apod).
FH

Fungující ERP systém naprogramovaný v Nette, PHP, MySQL - budu nyní aktualizovat velmi starý OS a přecházet na novější verze PHP, MySQL(MariaDB) a otázka zní, je lepší to rozdělit na dva samostatné (virtuální) servery, jeden kde budou scripty samotné a PHP, tedy aplikační server a druhý pouze s MySQL (MariaDB) nebo to mít jako doteď na jednom serveru?

Domnívám se, že je lepší to rozdělit. Hlavní výhodu vidím v tom, že fyzicky mohu každý z virtuálů dát na jiné železo, a tedy celkově systém může být tím pádem rychlejší, za druhé lépe se to spravuje a MySQL(MariaDB) server může být využitelný i pro jiné aplikace, lépe se to zálohuje a pokud se v budoucnu budou opět dělat upgrady PHP nebude to ovlivňovat db server.

Jsou nějaká proti nebo uvažuju správně?

Jak už zde bylo řečeno, nevíme jak je aplikace napsána, takže těžko soudit. Každopádně to že nejste autorem aplikace neznamená že nemůžete analyzovat jaké a kolik dotazů se provadí. Bez této analýzy se těžko rozhodnete správně. Jinak obecně mám zkušenost že aplikace využívající frameworky typu Nette a MySQL většinou rozdělením utrpí.

Pokud jde o izolaci, tak je zde stále možnost využít docker nebo podobné technologie.