Professioneel advies

Da's altijd wel lastig, ken genoeg profs die beter amateur hadden kunnen blijven. En er zijn genoeg hobbyisten die heeel professioneel bezig zijn.
Maar da's denk ik niet je vraag. Je wilt weten van mensen die doen alsof ze er verstand van hebben wat de beste oplossing is... En surprise, die is er niet.
Voor de duidelijkheid, N-Tier is niet hetzelfde als multi-layered. N-Tier heeft vooral te maken met hoe je applicatie gedraait wordt (meerdere processen, eventueel over meerdere servers verspreid) . En multi-layered is applicatie design (presentatie, business logica, data opslag). Dus N-Tier = fysiek, multi-layered = logisch.
Maar ok, ik zal wat uitgangspunten aannemen. Anders wordt dit ook zo'n flauwe post. Je wilt dus weten wat de beste verhouding is in aanpasbaarheid en performance. Die twee eigenschappen hoeven niet haaks op elkaar te zijn. Voorbeeld.. Een single tier (spaghetti) applicatie, kan heeeel snel zijn. Alle data is globaal toegangelijk, en je hebt geen restricties om bij data te komen;alles is globaal. De toepassing draait op 1 machine, en wordt maar door een gebruiker tegelijk gebruikt. Maar wat nou als je opeens veel meer gebruikers wilt ondersteunen, en je loopt tegen een capacitieitslimiet aan van je hardware? Of je komt erachter dat de opslag van data te langzaam gaat. Hoe schaalt je applicatie dan?
Uit het oogpunt van design zijn meerdere lagen welkom. Dat maakt de overzichtelijkheid van je code een stuk groter. Daarbij kunnen spelregels je helpen bij het netjes houden van je applicatie. Voorbeelden : Data layer mag niet de UI layer gebruiken. UI layer mag wel de business logic layer aanspreken. Geen business logica in UI layer.
Dus als jij zegt, de database kan wel 100.000 to 1 miljoen records bevatten. Zeg je dus impliciet, dat je voorziet dat je database een stuk groter kan worden dan initieel het geval is. Dus dan kom je redelijk snel (in de praktijk automatisch) op een database server, en hup daar heb je je eerste tier te pakken. Ik ga er ook ff vanuit dat je een UI hebt die niet door de database wordt aangeboden, dus dat zijn 2 tiers. Da's dus makkelijk. Maar nu moet je bepalen of je een derde tier nodig hebt?
Je hebt in ieder geval al wel 2 layers (UI en Data logic). Als je applicatie vooral CRUD is en je kunt allerlei restricties (business logica zoals, een auto mag maar 1 stuur hebben) afdwingen in je database, zou je ermee weg kunnen komen om maar 2 layers te hebben. Maar als je applicatie redelijk veel business logica bevat, dan loont het zeker om een business logica laag te hebben. Dus dan zou je op 3 layers kunnen komen : UI->Business->Data.
Terug bij de vraag of je een 3e tier wilt? Da's afhankelijk van het feit hoe zwaar je business logica is, en dan bedoel ik zwaar in termen van cpu power, en of er bottlenecks ontstaan doordat je requests op je business logica niet parallel kunt verwerken. Zo ja, dan zorg je dat je een 3e tier hebt waar je je business logica in draait en die schaalbaar is opgezet (thread safe).
Over het algemeen (70% van de applicatie) zijn applicatie 2 tier, met UI en Business logica in 1 tier, en data logica in een andere tier.
Bij grote toepassingen, heb je vaak een multi tier oplossing. Verschillende business logica draait op dedicated servers (webservices bijv.). De UI (web) draait op meerdere webservers, en er zijn verschillende databronnen (verschillende databases, eventueel externe databronnen).