Aplikační server nad více databázemi rubrika: Programování: .Net
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.
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:
Nebo se přihlaste jménem a heslem:
Komentáře