# Sistema informatico

Un sistema informatico (o sistema di elaborazione dati) è un sistema meccanografico, un computer o un insieme di più computer, apparati o sottosistemi elettronici (come server, database, mainframe, supercomputer, switch, router, modem, terminali), tra loro interconnessi in rete, in un'architettura di base di tipo client-server, e preposti a una o più funzionalità o a servizi di elaborazione a favore degli utenti; a volte più genericamente è detta infrastruttura IT di un'azienda ovvero il complesso delle risorse informatiche a livello hardware e software di un'azienda.

## Descrizione

Il sistema è composto da hardware e software, tipicamente a uso intranet, eventualmente connesso a internet, centralizzato oppure geograficamente distribuito e interconnesso (es. tramite VPN), con un'architettura che varia a seconda delle esigenze e della sua progettazione e, attraverso opportune applicazioni (es. applicazioni web), elabora dati e informazioni per restituire altri dati e informazioni utili. Il personal computer è un esempio di sistema informatico relativamente semplice. Tipici sono i sistemi informatici aziendali per i propri servizi di business e logistici interni ed esterni. Il sistema informativo è invece l'insieme delle attività logiche di gestione delle informazioni, delle relative modalità e degli strumenti tecnologici usati a tale scopo, di cui il sistema informatico ne costituisce la parte infrastrutturale.
Un sistema informatico riveste un'importanza strategica all'interno del contesto aziendale giacché un sistema efficiente e ben progettato e realizzato in prestazioni, efficienza, affidabilità, disponibilità e sicurezza garantisce una migliore gestione delle informazioni aziendali con ricadute positive sulla produttività stessa e quindi sull'operato o business dell'azienda stessa. Una volta progettato e realizzato, la gestione del sistema informatico in tutte le sue componenti passa tipicamente attraverso un team di sistemisti o amministratori di sistema, mentre agli utenti rimangono assegnate l'insieme delle funzionalità offerte.
I progettisti dei sistemi non sempre si preoccupano di progettarli prevedendo la futura necessità di collegarli ad altri sistemi. Per questo motivo gli amministratori di sistema (sysadmins) sono spesso obbligati a riconfigurare i sistemi per poterli far comunicare, usando un set di regole e vincoli chiamati protocolli, che, in sostanza, descrivono come il sistema "è visto dal mondo esterno" e che definiscono le condizioni necessarie perché i sistemi possano dialogare e interoperare. Quando due sistemi sono "visti dal mondo esterno" nello stesso modo, allora possono essere interconnessi per formare un unico sistema più grande.
Questa "immagine dall'esterno" viene di solito codificata da uno standard, che è un documento che descrive tutte le regole che un dispositivo o un programma devono rispettare. Esistono organismi internazionali, come l'IETF e l'IEEE che si occupano della preparazione e dell'approvazione di questi standard. Quando un sistema rispetta tutte le regole di un certo standard, si dice che "è conforme" (in inglese "compliant") allo standard.
A causa della complessità dei sistemi informatici (dovuta alla sovrapposizione di più strati di HW e SW), della conseguente non-linearità dei fenomeni coinvolti e dell'interazione che alcuni sistemi hanno con input provenienti da decisioni umane, non risulta ancora formalizzata una Teoria dei Sistemi Informatici intesa come formalizzazione matematica (Ingresso-Stato-Uscita) delle relazioni causa-effetto tra gli input (dati) e gli output (dati elaborati) di un sistema informatico.
Pertanto, diversamente da quanto accade in altre specializzazioni dell'Ingegneria, non risulta ancora formalizzato l'analogo di una Tecnica delle Costruzioni (sotto quali leggi e fenomeni fisici i vari sottosistemi informatici interagiscono). Risultano invece standardizzati (de facto) i procedimenti di realizzazione di singoli sistemi isolati, attraverso metodologie consolidate, come ad esempio ER "Entity-Relationship", UML "Unified Modelling Language" e RUP "Rational Unified Process".
Sono formalizzati alcuni procedimenti, basati sulla Teoria delle code, utili per il dimensionamento degli Impianti di Elaborazione Dati e per l'allocazione dei task sulle CPU. Tali procedimenti modellano il fenomeno per mezzo delle classi di servizio delle pratiche da elaborare e delle distribuzioni delle frequenze di arrivo delle stesse all'impianto di elaborazione (p.es distribuzione poissoniana). Esistono metodi basati sull'utilizzo di "best practice" ITIL (Information Technology Infrastructure Library) che vengono proposti per la gestione di processi tipici delle configurazioni dei sistemi informatici.

### Componenti e requisiti

Il sistema informatico è dunque composto da una parte hardware e una parte software rispettivamente sotto forma di architettura hardware e architettura software tra loro dipendenti.
In generale un sistema informatico deve soddisfare requisiti espressi in termini di:
* disponibilità;
* affidabilità;
* sicurezza;
* scalabilità.

### Funzionalità

In un sistema informatico tipicamente si distinguono tre strati logici di funzionalità in comunicazione tra loro:
* logica di presentazione (presentation layer) o front-end ha il compito di presentare i dati all'utente ed inviare le richieste di questi verso la parte centrale-elaborativa del sistema, facendo dunque da interfaccia uomo-macchina.
* logica applicativa o di business (application o business layer) fornisce gli applicativi agli utenti, tipicamente sotto forma di un application server o un web server, per poter usufruire dei servizi offerti dal sistema informativo.
* logica di accesso ai dati (access data layer) o back-end attraverso server dati che interrogano il database aziendale o il sistema legacy.

### Architetture

In generale i tre strati logici precedenti possono essere implementati in architetture fisiche cosiddette a n-tier, più o meno centralizzate o distribuite:
* architettura 1-tier: le tre funzionalità logiche sono ospitate su una macchina come sistema centralizzato tipo mainframe;
* architettura 2-tier: le tre funzionalità logiche sono ospitate su due tipi di macchine, quella di presentazione sui client e le altre su un application e database server;
* architettura 3-tier: le tre funzionalità logiche sono implementate ognuna su una macchina o sistema di macchine indipendenti;
* architettura N-tier: le tre funzionalità logiche sono implementate su più di tre livelli, con architetture molto più distribuite.
Rispetto ad un sistema centralizzato un siffatto sistema distribuito su più layer possiede una maggiore complessità di gestione e prestazioni inferiori, ma può vantare una maggiore scalabilità del sistema, cioè la possibilità di estensione del sistema in funzione della necessità di aumento di terminali utenti, di server e database nei vari strati, un'alta disponibilità, affidabilità e sicurezza dovute al fatto che il guasto o la violazione su una macchina non inficia il funzionamento o la sicurezza del restante sistema.

### Progettazione e gestione

La progettazione architetturale dei sistemi è affidata alle figure di architetto del software e architetto dei dati.