Aplikační server nad více databázemi rubrika: Programování: .Net

4 pilif
položil/-a 3.9.2017

Zdravím ve spolek,
pokračoval bych v dalších konzultacích... :)

Požadavek:
Desktop aplikace se připojuje na aplikační server. Při přihlašování dochází k volbě databáze (pro uživatele v podstatě volba firmy). Přes aplikační server se poté uživatel tedy připojuje na jinou DB. Jako konkrétní DB je vždy použit Oracle a samotné DB jsou rozlišeny uživatelem a schématem.
Datová vrstva je postavena na Entity Farmeworku.

Uvažuji tato dvě řešení:

Jeden aplikační server
Rozhodnutí o připojení k dané DB "implementuje" samotný app. server, který pro danou session uživatele změní connectionstring - přesněji řečeno mění pouze uživatelské jméno, heslo a DB schéma.
Výhody:

  • jedna instance app. serveru, možnost sdílet prostředky
  • jednodušší deployment a údržba

Nevýhody:

  • jedna instance app, serveru, restart nebo deployment "shodí" všechna připojení
  • složitější implementace - aplikace si musí dokázat držet DB transakce, které zahájí uživatel např. editací, toto by se muselo udržovat napříč všemi použitými DB připojeními
  • složitější řešení cache - při restartu/aktualizaci opět ztráta cache dat
  • nejsme si jistý zda takto vůbec lze korektně implementovat dynamickou změnu DB schématu současně pro více uživatelů

Více aplikačních serverů
Desktop klient se připojí na vybraný aplikační server, který přistupuje pouze na jednu konkrétní DB (firmu).
Výhody:

  • každá instance app. serveru pracuje pouze ve svém poolu, neovlivňují jí ostatní
  • jednodušší implementace transakcí a cache
  • každá instance má svůj pool a tím pádem by to mělo být stabilnější
  • možnost škálovat výkon na více různých serverů

Nevýhody:

  • nelze sdílet jednoduše data v rámci jedné aplikace mezi více různými DB (cache)
  • problematičtější deplyment - některé instalace by mohly obsahovat i 20 app. serverů

Jaké myslíte, že by bylo vhodné řešení?

Díky.

Komentáře

  • KamilZ : Raději upřesni, jak to myslíš, protože si podle mě protiřečíš. Máš skutečně více instancí databází, nebo náš vše v jedné databázi, ale ve více schématech? 3.9.2017
  • archenroot : Ja to ctu, zda se mi, ze tomu rozumim, pak si prectu dalsi vetu a jsem zas mimo, to zadani mi je nejasne.... co je presne ta databaze (firma), jsou stejne, nebo uplne rozdilne z pohledu modelu? Proc uvazovat linkovani jednoho aplikacniho serveru k jeden databazi? At uz jsou modely a tedy i aplikace stejne nebo ruzne, nejake parovani aplikacnich serveru k databazi nema smysl. Stale muzes provozovat ruzny pocet jak aplikacnich tak databazovych serveru (pocet resi zatez, ne rozdeleni kodu). Trochu mi to ale zavani mixovanim monolitu a mikrosluzeb... no chtelo by to trochu upresnit zadani... 2.12.2017
odkaz
8 rmaslo
odpověděl/-a 4.9.2017
 
upravil/-a 4.9.2017

Otázka tak jak je položená, v sobě zahrnuje tvrzení, že "počet aplikačních serverů je stejný jako počet rozhraní aplikačních serverů". Z toho pak vycházejí výhody a nevýhody jednotlivých řešení.
S tímto obecně nesouhlasím. Dovedu si představit i naprosto opačné situace:

  • Jedno rozhraní, více serverů. Prostě se použije load balancer.
  • Jeden server, více rozhraní. Nasměrovat apachem dvě URL do jednoho adresáře je triviální (IIS to snad taky umí), případně se dají použít symlinky atd..

Otázku bych tedy rozdělil na dvě jiné:

  • Kolik aplikačních serverů mám mít mám mít za rozhraním aplikačního serveru (tj. směrem dovnitř k db)?

Odpověď je triviální - tolik, kolik je v hlediska výkonu potřeba.

  • Pokud mám jednu aplikaci pracující nad dvěma (či více) různými množinami dat, mají mít společné rozhraní (třeba URL) a volbu dat předávat jako parametr anebo má mít každá množina dat své rozhraní (tj. URL)?

Jako první bych řekl, že odpověď není nijak kritická. Uživatel to stejně neuvidí. A je to zřejmě jen otázka jestli má být název dat (schematu) v URL "jako adresář" nebo jako parametr v "query stringu". Což se stejně běžně přemapovává přes rewrite mod.
A dokonce lze provozovat obě varianty zároveň. Tj. mohu mít aplikační server na adrese intranet.lan/ucetnictvi/ a očekávat v url parametr firma=firma_01 a zároveň to mít na adrese intranet.lan/ucetnictvi/firma_01.
Fakt je to skoro jedno, ale asi bych zvolil jedno rozhraní. Protože nikdy nevím, jestli nebudu potřebovat nějaký zdroj informací "přes všechny firmy" typicky třeba "vrat mi seznam všech firem (tj. schemat)".

Komentáře

  • mamatoto : podla mna autor prispevku neriesi url ale pripojenie na databazu, tzn. tvoja odpoved odpoveda na nejaku uplne inu otazku 6.9.2017
  • rmaslo : Tak to ať rozhodne autor jestli odpovídám na otázku ... 7.9.2017

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.