;

Jak vnímá Microsoft obchodní modely v cloudu?

15. 12. 2011
Doba čtení: 3 minuty

Sdílet

Autor: © Jakub Jirsák - Fotolia.com
Microsoft uspořádal on-line konferenci s názvem Den ve veřejném cloudu. Partneři a zákazníci se mohli seznámit s příležitostmi, které aktuálně otevírá platforma Windows Azure.

Obchodní modely v cloudu podle Microsoftu Dopoledního livemeetingu na téma obchodní modely na Windows Azure, který měl odhalit možnosti obchodních modelů měnících se s příchodem cloud computingu, se zúčastnilo na 30 partnerů a zákazníků.

Ondřej Štrba, platform strategy advisor, který radí partnerům Microsoftu při vývoji a dodávkách řešení na Windows Azure, na počátku zopakoval vývoj výpočetní techniky od mainframu přes model klient/server až po současný svět mobilních zařízení a dodávky zpracovaných dat z cloudu.

Jaké aplikace a řešení má posle Microsoftu smysl přesouvat do cloudu? Existují čtyři základní varianty zátěže pro vstup do cloudu:

  • Aplikace, která běží v jasně daných intervalech, jindy je vypnuta.
  • Relativně rychlý růst popularity/uživatelů aplikace, a tím i požadované zátěže resp. výkonu.
  • Aplikace s předpokládanými špičkami zatížení (sezónní zátěže hardwaru – např. e-shopy o Vánocích, každodenní špičky – např. ranní příchod zaměstnanců).
  • Aplikace s neočekávanými špičkami zatížení (nelze zajistit provisioning pro extrémní nepředvídatelné situace).

Dále po zopakování, co to vlastně cloud je a jaké jsou jeho výhody, Ondřej Štrba připomenul rozdíly mezi infrastrukturou (IaaS - základní výpočetní zdroje a úložiště), platformou (PaaS - aplikační infrastruktura) a softwarem (SaaS - aplikace v cloudu) jako službou.

Cloud podle Microsoftu
Zdroj: Microsoft

V případě SaaS zákazník jednoduše službu/aplikaci koupí a užívá, kompletní infrastrukturu vč. softwaru však spravuje dodavatel. V případě PaaS uživatel aplikaci staví na infrastruktuře dodávané partnerem. U IaaS se do ní pak migrují stávající řešení. Rozdíly mezi jednotlivými modely naleznete v obrázku níže. U tradičního on-přemise nasazení má klient nejsilnějši kontrolu nad celým systémem, avšak za cenu nejvyšších nákladů. Ty se pak snižují směrem k modelu softwaru jako služby.

Nasazení aplikace v cloudu
Zdroj: Microsoft

Veřejný cloud podle Microsoftu

Windows Azure je cloudová služba (platforma) pro hostování webových služeb a aplikací v datových centrech Microsoftu. Azure, poskytuje tři základní služby – výpočetní výkon a úložiště, SQL databáze a integrační služby (Service Bus, Cache…). Ondřej Štrba účastníky upozornil, že při využívání Azure se po splnění podmínek automaticky na uživatele vztahuje SLA.

Pro vývoj aplikací na Azure vývojáři používají Visual Studio. Aplikace pak do Azure nasazují je přes samoobslužný portál. Pokud vás zajímá, na kolik vyjde využití Azure v data centru Microsoftu, zkuste si spočítat zatížení podle níže uvedené tabulky.

Tab: Přehled cen za využití Microsoft Azure

Přehled cen za využití Microsoft Azure
Zdroj: Microsoft

Jak argumentovat s SaaS u zákazníka?

Mezi výhody softwaru jako služby patří rychlejší implementace, cena závislá na spotřebě, snížení finančních rizik (zbytečné náklady), nižší spotřeba on-premise zdrojů a jednodušší upgrade.

Naopak nevýhodou a překážkou mohou být požadavek důvěry poskytovateli, možnost zákonných omezení (data mimo infrastrukturu zákazníka), menší možnosti uživatelských úprav aplikací, složitější integrace s lokálními aplikacemi a případně nižší výkonnost ve srovnání s on-premise.

Detailní pohled na cloud v podání Microsoftu v kombinaci s příležitostmi pro partnery přinesl sesterský server ChannelWorld:

https://www.channeltrends.cz/sluzby/obchodni-modely-v-cloudu-podle-microsoftu-5418

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »