Listino Supporto Partner Contatti 800 13.40.41

KNOWLEDGE BASE

Knowledge Base
× Non sei ancora nostro cliente RocketWeb? Diventa Partner CoreTech e visita il nostro configuratore prezzi

Vai al Video

Webhosting - Analisi del mercato Summit 2018

Sempre più realtà, specialmente aziendali, si affidano ai servizi di Webhosting nell’ottica della virtualizzazione non solo delle infrastrutture ma anche delle proprie attività sul web.

Per Webhosting si intende ospitare su un sistema informatico di un provider i siti di terzi e per il cliente vuol dire lasciar gestire i servizi e i siti web da un MSP, quindi la gestione e la creazione di siti anche con fini commerciali e di marketing, creazione contenuti quindi news, articoli, approfondimenti, schede dei prodotti e quant’altro. In pratica il Webhosting è un servizio di rete che consiste nell’allocare su un server web delle pagine web di un sito web o di un’applicazione web, rendendolo così accessibile da Internet e ai suoi utenti.

Secondo un recente studio pubblicato da Market Research Future, il mercato dei servizi di Webhosting è in rapidissima crescita e ci si aspetta che il relativo fatturato raggiungerà I 154 miliardi di dollari entro il 2022; quindi si tratta di qualcosa da non trascurare affatto.

Scopo di questo tutorial è spiegare in cosa consiste e quali vantaggi offre il Webhosting, con una breve ma utile panoramica sull’offerta di mercato fatta dai vari provider di tale servizio.

Webhosting: cosa offre il mercato

La situazione del mercato del Webhosting vede una suddivisione tra vari soggetti: con riferimento ai dati estratti da Host Advice, il principale a livello mondiale è GoDaddy (5,8% della quota di mercato), Blue Host (con il 2,5%) e Host Gator (2,1%).

Per quanto riguarda l’Italia, il primo provider di Webhosting è Aruba, con una quota di mercato pari al 32% e al secondo posto si colloca Register.it (12%); un dato interessante è che nove dei primi 10 provider in classifica sono italiani (tranne OVH, che detiene una quota di mercato dell’1,9%).

La situazione è analoga in altri paesi europei: in Germania Hetzner ha una quota del 22%, 1&1 del 16%, OVH dell’1% e Lease Web dello 0,4%; in Francia c’è OVH che detiene la principale quota (il 65%) e Gandi.net che si prende il 4,5% del mercato e Planet Hoster che è presente con uno 0,5%. In generale in Europa c’è una netta tendenza a preferire provider nazionali.

In questa panoramica non sono stati inclusi servisi come AWS Amazon, Digital Ocean e Google Cloud Computing, perché non offrono dei veri e propri piani di Webhosting ma soluzioni Cloud complesse, che vanno bene per determinati scopi.

Lo scopo del vero Webhosting dev’essere concentrare l’intera gestione dell’infrastruttura e del software nel provider, in modo che il cliente si possa concentrare sulla creazione dei contenuti e del proprio sito.

Banner

Per quanto riguarda la tecnologia usata per lo sviluppo dei siti web, una ricerca dice che sostanzialmente il 49% dei siti analizzati non usa un CMS, mentre il 51% ne fa uso. Tra questi, spiccano WordPress (60% di market share, il 31% a livello globale), Joomla (6%, 3%), Drupal (4%, 2%), poi Magento, PrestaShop, osCommerce, Shopify e altri, che in totale fanno percentuali di 4% e 2% circa.

Webhosting: confronto tra Provider

Esistono vari provider di servizi Webhosting ed è interessante conoscerli e confrontarli in base alle loro caratteristiche e a ciò che implicano per il cliente che volesse appoggiarsi ad essi. Facciamo una panoramica su quelli adottati in Italia, partendo da Aruba (immagine seguente).

Aruba fornisce un unico piano e di per sé potrebbe essere una cosa utile soprattutto agli utenti che non avendo esperienza non vogliono confondersi con troppi tecnicismi, tuttavia per chi ha le competenze ciò potrebbe rappresentare un limite; infatti il piano offerto non è personalizzabile.

Le informazioni date dal provider circa le risorse disponibili con il piano sono piuttosto scarse e comunque tali risorse ammontano a:

  • 1GB di DB;
  • spazio disco e traffico illimitato.

È comunque acuistare servizi aggiuntivi a pagamento per estendere le risorse del piano come lo spazio per il Database, l’uso della memoria e del processore, la gestione DNS e via di seguito.

Il prezzo del piano base è € 29,99/anno (IVA esclusa) che spesso è in promozione.

Andiamo ora a Register.it, che per caratteristiche somiglia molto ad Aruba; ne vedete la pagina di acquisto nell’immagine seguente.

Banner

Anche Register.it propone una sola offerta (piano web hosting regolare) che perà è differenziabile in Smart, Advanced ed Enterprise. Il piano non è comunque personalizzabile.

Diversamente da Aruba, però, qui le caratteristiche del piano che viene venduto sono abbastanza dettagliate, tant’è che per il piano regolare già  si sa che è possibile contare du Database da 1GB, 512MB di memoria sulla macchina virtuale, 1virtual CPU, I/O 1024 kbps e uno storage di 100GB di spazio disco.

Il prezzo è un po’ più alto di quello di Aruba, perché si parla di 42 euro/anno, però IVA inclusa.

Passiamo ad OVH, che inizia a distinguersi dai due precedenti per versatilità, dato che mette a disposizione del cliente ben tre offerte: Personale, Pro e Performance (immagine seguente) ciascuna con un prezzo e caratteristiche differenti.

Tuttavia anche in questo caso le offerte non si possono personalizzare (tantomeno per Wordpress), cioè sono pacchetti fatti e finiti, quindi quando occorrono risorme più consistenti di quelle contemplate nel piano attuale occorre passare all’offerta di livello (e costo) superiore.

Un altro limite è che vengono fornite scarse informazioni sulle caratteristiche, come ad esempio spazio su disco, caselle di posta elettronica, traffico utilizzabile. Qualche informazione in più è disponibile nel processo di checkout, dove si va a scegliere, per il database, tra 200MB, 2GB e 4GB.

OVH offre un traffico mensile illimitato, ma vincoli sul numero di visitatori contemporanei stimato; a questo riguardo va precisato che non vengono fornite informazioni su come avviene tale stima, quindi ci si deve fidare del provider e la cosa non facilita le valutazioni sull’utilizzo del servizio.

I prezzi sono, in questo caso, ragguagliati al mese: € 1,99/mese, € 4,99/mese, € 9,99/mese (IVA esclusa) però con impegno annuale, vale a dire che le tariffe valgono solo a condizione di sottoscrivere un contratto della durata minima di un anno.

Più interessante è Go Daddy, le cui offerte (spesso in promozione) sono quelle visibili nella pagina web mostrata nell’immagine seguente.

 

I servizi di GoDaddy sono declinati in quattro offerte, ossia Basic, Deluxe, Ultimate, Sviluppatore, che, come negli altri casi, non sono personalizzabili.

Le singole offerte si distinguono per numero visitatori mensili consentito, spazio su disco disponibile, numero di siti ospitabili.

Da notare che solo il piano Ultimate ha incluso certificato SSL (altrimenti costa € 85,39/anno) ma solo per il primo anno; dopo il certificatp SSL costa come per gli altri piani, ossia 85,39 euro l’anno. I piani non prevedono il supporto Let’s Encrypt che è un servizio che fornisce certificati SSL gratuiti; volendo è possibile installare un certificato ottenuto da Let’s Envrypt, ma la procedura è talmente complessa che non ne vale la pena.

I prezzi dei piani GoDaddy sono € 8,53/mese, € 10,97/mese, € 18,29/mese, € 30,49/mese rispettivamente, impegno 1/3/6/12/36 mesi; sono quindi più altri dei competitor analizzati sinora, ma il servizio è di livello adeguato.

Vediamo ora un altro servizio di Webhosting che è SiteGround, del quale proponiamo qui di seguito la schermata del sito Internet riepilogativa dell’offerta.

Anche questo provider propone tre piani: StartUp, GrowBig, GoGeek; anche questi non sono personalizzabili. I piani sono sostanzialmente definiti in base al numero di visite mensili, però non si trovano indicazioni su come questo numero venga calcolato; lo spazio di storage, web ecc. è studiato sulla base del numero di visitatori e cresce con esso.

Le risorse disponibili sono elencate chiaramente, ma non si trovano a prima vista nel sito.

I prezzi delle offerte sono € 7,95/mese, € 12,95/mese, € 23,95/mese rispettivamente (IVA esclusa) ma spesso sono in promozione per attrarre nuovi clienti; infatti nell’immagine precedente i prezzi sono quelli scontati. Una particolarità di GoDaddy è che mostra più flessibilità, in quanto offre sia l’impegno mensile sia quello annuale.

Per quanto riguarda il backup, GoDaddy ne offre uno integrato ma non personalizzabile, quindi il cliente non può impostare una propria schedulazione; volendo, è possibile disporre di un backup manuale, ma si paga a parte.

Webhosting con RocketWeb

Un provider di Webhosting che si distingue per versatilità dell’offerta è RocketWeb, perché prevede una sola offerta ma configurabile in base alle esigenze del cliente; questa offerta si chiama SUN ed esiste una sua variante che è il piano MOON, pensato per siti statici o vetrine (quindi è spovvisto di Database). Quindi, nella pratica le offerte sono due, sebbene la seconda sia qualcosa di diverso da quello che viene proposto dai competitor.

Le principali caratteristiche di RocketWeb sono riportate nella schermata proposta nell’immagine seguente.

 

Come vedete, caratteristiche e risorse disponibili al cliente sono elencate chiaramente, meglio che in altri servizi di Webhosting.

Il piano è configurabile secondo necessità e le risorse si possono configurare linearmente, vale a dire che il piano è scalabile: il cliente può aumentare solo quel che gli serve e non deve, come nelle altre soluzioni di Webhosting analizzate sinora, comprare tutto un pacchetto. In altre parolem, se occorre più spazio di storage si compra solo quello e non è richiesto di dover prendere più CPU, RAM o altro semplicemente per avere quello.

Il prezzo dell’offerta è a partire da € 7,42/mese (IVA esclusa) e cambia in base alla configurazione scelta e alle risorse allocate.

Considerazione sul mercato del Webhosting

Il mercato ha un ampio margine di crescita ma è ancora acerbo, soprattutto in quanto a chiarezza dell’offerta e trasparenza.Troppi provider forniscono informazioni spesso limitate sulle caratteristiche dei piani:

  • informazioni approssimative su prestazioni e funzionalità incluse;
  • offerte non del tutto chiare; l’impressione è che le offerte orientate a WordPress mantengano un profilo basso, come se fossero rivolte a un pubblico poco tecnico cui per molto tempo sono state rivolte le offerte di Webhosting;
  • piani non personalizzabili e aumento delle risorse allocate che comporta il passaggio al piano superiore;
  • i prezzi in genere sono scontati per il primo anno, i componenti addizionali gratuiti il primo anno, mentre dal secondo anno costa tutto di più perché lo sconto è solo un modo di attrarre il cliente, il quale poi non saprà cosa andrà a pagare.

 

Quest’ultima considerazione è rilevante perché per i clienti, una volta appoggiato un proprio sito (specie se è fonte di profitto come un e-commerce) a un provider, è molto difficoltoso e oneroso spostarlo su un altro provider laddove quello attuale cambi le regole del gioco; quindi il provider può tenere in pugno il cliente e alzargli il canone, certo che fino a un determinato prezzo questo non rterrà conveniente staccarsi.

 

Un’altra considerazione che scaturisce dall’analisi del mercato è che i prezzi richiesti dai provider europei sono in media minori di quelli degli americani.

Alcuni utilizzano tattiche per fuorviare il cliente adducendo prestazioni di livello a fronte di offerte economiche (e quindi prestazioni non garantite), ma nel lungo termine non è una strategia che paga, in quanto c’è una crescente competenza e maggiore consapevolezza da parte del cliente, cui consegue una richiesta di offerte chiare e ben definite.

RocketWeb risponde a queste esigenze e supera, per versatilità, chiarezza e garanzia delle prestazioni, anche i più blasonati provider di Webhosting; possiamo esporre ciò proponendo un confronto fra RocketWeb e SiteGround, che trovate nella tabella seguente.

 

 

RocketWeb

SiteGround

Basato su sistema

CloudLinux

LXC

Pannello di controllo

Plesk

cPanel

Offerta configurabile

Piani predefiniti

Funzioni disponibili

Tutte

Dipende dal piano

Prezzo

Da € 7,42/mese

Da € 7,95/mese

 

Qui vengono paragonate le due soluzioni confrontando alcuni aspetti tecnici come il sistema operativo host, la console utente (pannello di controllo), la versatilità dell’offerta, le funzionalità disponibili e il costo; quest’ultimo potrebbe sembrare simile, ma valutando complessivamente ciò che viene offerto è decisamente concorrenziale. Inoltre non è promozionale per attrarre il cliente, ma è quello vero.

Dalla tabella emergono alcune considerazioni che possiamo distinguere per punto analizzato, a partire dal sistema host: nella tabella che segue è proposto il confronto fra CloudLinux e i container.

 

CloudLinux

Container

CentOS + cgroups + LVE

Linux + LXC

CageFS

Separazione LXC

LVE

Gestione risorse e limiti LXC

LVE Stats

top, stat, ss, ps, ...

mod_lsapi, php selector, KernelCare

///

Supporto dedicato e professionale

Supporto interno (prodotti personalizzati)

Caching: NGINX

Caching: memcached

 

CloudLinux è basato su CentOS, nonché sulle tecniche di virtualizzazione cgroups ed LVE, mentre  in SiteGround si utilizza una distribuzione Linux simile, però la virtualizzazione è basata su container e ciascun container ospita un sito, con le relative configurazioni, eseguibili real-time e software dedicati. Ad esempio SiteGround riesce a fare caching con memcache, che è una soluzione valida ma presenta problemi di isolamento della sicurezza, che viene superato inserendo la cache in un container LXC; invece con CloudLinux il caching è realizzato mediante NGINX.

In SiteGround la separazione fra account è ottenuta dalla separazione nativa dei container LXC, mentre CloudLinux la ottiene tramite CageFS.

 

Andiamo oltre e vediamo come avviene la gestione delle risorse: se un sito comincia a richiedere più delle risorse previste può accadere che vada a prendersi quelle di altri siti ospitati; questo può accadere con LXC, dove l’allocazione delle risorse è dinamica, mentre con LVE (Lightweight Virtual Environment), che è quello che si occupa della gestione delle risorse in CloudLinux. LVE assegna un ammontare di risorse ben definito e per il relativo sito non è possibile attingere a quelle di altri. 

 

Quanto ai componenti aggiuntivi, CloudLinux utilizza mod_lsapi, php selector, KernelCare, mentre il sistema basato sui container utilizza top, stat, ss, ps.

 

Spostiamoci ora sul confronto fra i due tipi di interfaccia utente, ossia i pannelli di controllo, che si basa su Plesk nel caso di RocketWeb e su cPanel per quel che riguarda SiteGround; la tabella che segue sintetizza le caratteristiche di ciascuno.

 

Plesk

cPanel

Aspetto grafico chiaro e interfaccia personalizzabile

Aspetto grafico confuso

WordPress Toolkit

Alcuni strumenti di gestione WP

Advisor, Git, Google PageSpeed Insights, copia sito

Git, strumento sicurezza limitato

Controllo Apache, NGINX, PHP

Controlli limitati

Supporto NGINX

Supporto NGINX solo tramite estensione

Log completi

Solo registro errori (log solo da scaricare)

Backup semplice, granulare, schedulabile

Backup complesso (e a pagamento)

 

Come vedete, Plesk permette di avere una grafica più chiara e l’interfaccia è personalizzabile; inoltre dispone dell’intero Toolkit WordPress ed è quindi più orientato all’hosting di siti WordPress, mentre cPanel supporta solo alcuni strumenti di tale CMS.

Ancora, in Plesk c’è una più nutrita serie di strumenti come Advisor, Git, Google PageSpeed insights ecc. C’è il pieno controllo a livello server Apache, PHP e NGNIX ed il supporto di quest’ultimo è nativo, a differenza di cPanel, dove il supporto a NGNIX è ottenuto da un’estensione.

Peraltro dalla console di Plesk è possibile ottenere log completi degli eventi, mentre con cPanel i log sono limitati al registro errori e si possono solo scaricare ma non visualizzare e gestire da console. Anche il backup è più completo e gestibile da Plesk, dove peraltro può essere selettivo e programmabile, senza alcun costo (in cPanel è previsto un corrispettivo).  

Come si utilizza RocketWeb

Bene, viò detto si può vedere in pratica come funziona RocketWeb, analizzando la console di Plesk, proposta dall’immagine seguente e aperta sulla finestra relativa alla voce di menu Websites & Domains. 

Da questa sono riepilogate le caratteristiche dei siti oggetto dell’hosting ed è possibile, ad esempio, consultare e gestire i log (immagine seguente). Questi log sono riportati in maniera chiara ciascuno in una riga che evidenzia la data, il tipo di evento, l’indirizzo IP di provenienza, il relativo codice e il messaggio, oltre alla sorgente.

RocketWeb assegna una certa importanza ai log, perché quando si verifica un problema su un sito ospitato è fondamentale, prima di impostare la strategia di azione, vedere cosa dicono i log.

Andiamo oltre e vediamo Google PageSpeed Insights, funzionalità accessibile dalla voce di menu Domains, la quale apre una finestra da dove è possibile eseguire un test di velocità di Google delle pagine web (immagine seguente).

La finestra mostra i risultati e dà la possibilità di scaricare i file utilizzati (immagini o parti di codice). Questa funzione è interessante perché viene eseguita all’interno di plesk, senza la necessità di aprire una pagina web esterna.

Passiamo ad Advisor, che è un componente nuovo rilasciato con l’ultima versione diPlesk e permette l’esecuzione di un controllo sulla sicurezza; in particolare, esegue controlli sulla versione di php (segnalando se è aggiornato o obsoleto) sui siti WordPress e sulla sicurezza del sito relativamente alle estensioni installate ed ai certificati SSL. 

Banner

In termini di certificati, da questa schermata è disponibile un link per la generazione (tramite Let’s Encrypt - https://letsencrypt.org/) e il caricamento dei certificati SSL nel sito.

Una cosa interessante riguardo alla sicurezza di WordPress è che da Plesk è possibile eseguire il controllo di alcune caratteristiche di WordPress: se non sono state eseguite la azioni di sicurezza consigliate, vengono segnalate in rosso (immagine seguente) ed è possibile andare a eseguirle automaticamente.

 

Nell’immagine vedete segnate in verde le azioni eseguite, in giallo quelle che richiedono attenzione e in rosso quelle tassative non svolte; tra le azioni ci sono la protezione del database (ad esempio modificando le estensioni dei file) o la limitazione dell’esecuzione php solo da parte del server e non dall’esterno. Altro controllo è quello sul protocollo XML RPC, ossia se è utilizzato o meno, perché laddove non serva è bene disabilitarlo perché consente a un potenzialòe attaccante esterno di sfruttare un sito web unico per estendere il proprio attacco. E di controlli ce ne sono tanti altri…

Cliccando sulla voce di menu WordPress è possibile accedere al relativo Toolkit attraverso una pagina dedicata (immagine seguente), che consente di sfruttare tutti gli strumenti di WordPress, con grande praticità quando si deve operare sui siti ospitati realizzati con tale CMS.

Banner

Il Toolkit si applica al sito selezionato dalla sezione Websites & Domains e permette di gestire la parte operativa del sito; in particolare, nella scheda Informations & Tools si trovano degli interruttori a slide con i quali è possibile, ad esempio, attivare la Maintenance Mode utile quando si deve eseguire un’attività di manutenzione sul sito, per rendere lo stesso non disponibile in modo da non creare problemi di ottimizzazione SEO.

Con uno switch specifico è possibile inserire una password per accedere al sito ed anche disattivare l’indicizzazione da parte dei motori di ricerca, utile quando un sito è in costruzione e si desidera evitare che i motori di ricerca vadano a indicizzarlo quando non è ancora completo e definitivo. Un’altra funzionalità attivabile è il debugging ed una molto interessante è l’abilitazione del sistema di caching di NGNIX.

Altra cosa molto interessante è la gestione degli aggiornamenti: nella schermata viene mostrata sempre la versione attuale di WordPress, ossia quella con la quale il sito corrispondente è stato creato e quando diventa disponibile una nuova versione (Plesk lo rileva collegandosi automaticamente al sito di WordPress...) appare di lato un link, cliccando il quale si accede alla pagina web di aggiornamento. Prima di aggiornare il CMS, il sito viene sottoposto a backup  

Stesso discorso si applica ai plugin, la cui gestione avviene dalla tab omonima: se ci sono dei plugin disponibili, vebngono evidenziati ed è possibile, cliccando sui rispettivi link, effettuarne l’aggiornamento. La gesione dei plugin da installare è possibile dalla console Plesk grazie all’integrazione con Addendum. I plugin a pagamento possono essere installati anche senza un’attivazione. Molto importante è installare i plugin che WordPress ha creato per la compliance GDPR.

Ritornando alla voce di menu Websites & Domains, da qui è possibile gestire le impostazioni del server Apache e di NGNIX (immagine seguente); quando ad Apache, è possibile inserire degli hearder specifici (la sintassi da utilizzare è la stessa da utilizzare nei file di configurazione di Apache).

Quanto ad NGNIX, tra le impostazioni troviamo quella relativa alla possibilità di utilizzarlo in modalità Proxy: in tal caso è possibile abilitare la consegna dei file statici direttamente da NGNIX, come ad esempio file HTML, PDF, immagini, audio, video ecc.

Poi, novità portata dalle ultime versioni di plesk, è possibile abilitare la cache di NGNIX direttamente dal pannello di controllo; in precedenza si poteva fare, ma solo aggiungendo un file di configurazione con le stringhe del caso. Per la cache è possibile impostare parametri importanti come dimensioni e time-out; quest’ultimo si spiega considerando che quando viene eseguito un file relativo a una pagina statica, le risorse associate definite in precedenza vengono messe in cache e rimangono per un tempo pari al time-out. Se nel frattempo vengono richieste nuovamente per altre ragioni, sono fornite direttamente dalla cache NGNIX. Il vantaggio si traduce in un’esecuzione più veloce.

La cache funziona bene, ovvero si mostra utilissima, su siti che hanno un gran numero di richieste e il time-out può essere impostato da pochi secondi anche ad ore, in base alle esigenze del sito, che a volte vanno verificate sperimentalmente, ad esempio facendo dei test con uno strumento come AB (Apache Bench) il quale esegue una sorta di stress test; in pratica effettua delle chiamate ripetute in modo da aprire più sessioni di comunicazione anche simultanee. Se si esegue il test con e senza cache, si vede la differenza: ad esempio impostando un time-out di 5 secondi ed eseguendo il test per un tempo ben superiore, fino a due sessioni contemporanee la cache non viene utilizzata, ma inizia a lavorare a 15 richieste contemporanee, per poi dare il meglio intorno alle 30 sessioni aperte, dove si vede effettivamente la differenza e l’importanza di impostare correttamente la cache.

Dalla solita voce di menu Websites & Domains, è anche possibile operare la gestione di php (immagine seguente); abbiamo a disposizione diverse versioni di php e le più recenti (ad esempio php7) consentono di migliorare la gestione della sicurezza e dei certificati, quindi se il sito in questione utilizza ancora php 5, per esempio, si può aggiornarlo.

La ragione è che con php5 il caricamento dei certificati SSL (specie se sono molti) rallenta l’esecuzione del sito stesso, cosa che è stata risolta in php7. È comunque possibile utilizzare una versione “inferiore” di php per aggiiornare il CMS e una volta fattto l’aggiornamento, passare a una versione 7.x di php.

All’interno di Plesk e della schermata mostrata nell’immagine precedente è possibile impostare dei parametri di php (tipo limite di memoria, tempo di esecuzione ecc.) come se lo si facesse in un file php, solo che lo si fa nel pannello Plesk e poi questo provvede a costruire il file del caso.

Sempre da Websites & Domains, si accede alla funzione Backup Manager, che consente di eseguire i backup, impostandone la modalità di esecuzione (incrementale, completo, granulare ecc.) e la schedulazione; è prevista la generazione di alert nel caso i backup non vadano a buon fine o si verifichino problemi. È inoltre possibile escludere determinati file.

Passiamo alla sezione Databases, accessibile dall’omonimo comando di menu, la quale corrisponde alla schermata mostrata nell’immagine seguente.

Qui sono disponibili funzioni di importazione ed esportazione dei Dump, funzione check e repair molto utile nei database di grandi dimensioni, che se vengono riscontrate incongruenze va a riparare le tabelle mantenendo il sito più efficiente e più veloce, giacché problemi nel database rallentano l’esecuzione.

Ripe Ncc Member
vmware
CloudLinux
Plesk
HP
Microsoft