;

Jak hluboko mohou klesnout ceny cloudu? (1.)

3. 4. 2013
Doba čtení: 3 minuty

Sdílet

Autor: © Mopic - Fotolia.com
Poskytovatelé IaaS (infrastructure-as-a-service) cloudových služeb bojují v cenové válce, v rámci níž došlo v posledních 14 měsících u čtyř hlavních poskytovatelů ke 29 různým slevám. Analytici očekávají, že jde o trend, který jen tak neskončí.

RightScale, služba, která funguje jako vstupní brána k různým poskytovatelům, vydala analýzu více než ročního objemu dat spojených se snižováním cen, a zjistila, že v porovnání s konkurencí (Google Compute Engine, Microsoft Azure a Rackspace) nejčastěji zlevňovala společnost Amazon Web Services (AWS).

AWS měla v onom čtrnáctiměsíčním období celkem osm slev klíčových služeb, včetně výpočetního výkonu nebo úložiště, a zároveň také dalších 11 snižování cen na službách ne-klíčových, jako jsou databázové služby, systémy zasílání zpráv, vyhledávání a vyrovnávací paměť. Pro srovnání: Rackspace za stejnou dobu zažil čtyři, zatímco GCE a Azure po třech klíčových slevováních.

„Se všemi těmito změnami je poměr ceny a výkonu cloudového IaaS stále atraktivnější,“ píše RightScale ve své tiskové zprávě.

Takže na jakou úroveň mohou ceny ještě klesat? Někteří poskytovatelé již nyní nabízejí služby za nejnižší možnou cenu: zdarma. Například AWS nabízí bezplatnou úroveň svých služeb, v níž mohou zákazníci využívat až 750 hodin mikro VM případů na Microsoftu nebo Linuxu, a také 30 GB tzv. Elastic Block Storage (EBS) a 5 GB jednoduché služby úložiště (Simple Storage Service).

„Cenová válka bude pokračovat až na dno,“ říká Krishnan Subramanian, hlavní analytik firmy Rishidot Research. „Společnosti jako Amazon a Google budou mít výhodu díky úsporám z velkého rozsahu. Jestliže lze něco usuzovat z historie, půjde Amazon při podrývání cen konkurence na jakoukoliv úroveň. Poskytovatelé služeb, které nemohou výhod velké firemní základny, se budou snažit nad svou infrastrukturu dodat nějakou nadhodnotu, a to proto, aby se vyhnuli strmému pádu.“

Někteří analytici věří tomu, že poskytovatelé služeb budou pokračovat ve snižování cen, a to dokonce až do bodu bezplatné nabídky služeb, s cílem nalákat zákazníky k tomu, aby umísťovali svá data do jejich cloudů, a potom své služby zdraží, případně zkomplikují možnosti, jak dostat data z cloudu. Například v cloudu AWS je nahrávání dat na cloud u mnoha služeb bezplatné, dostat svá data zpět už ale něco stojí.

Cyber25

Poskytovatelé cloudu využívají slevy jako způsob, jak na sebe upoutat pozornost. Alespoň tak soudí analytici společnosti Technology Business Research, Inc. Takže přestože může znít krásně, že AWS snižuje ceny každých pár týdnů či měsíců, RightScale poukazuje na to, že mnoho těchto snižování cen se týká podmnožin služeb společnosti, a mají tedy vliv pouze na malé množství zákazníků. RightScale například tvrdí, že u dvou třetin cloudových služeb slevové akce zákazníkům pomáhají v tom, aby implementovali i výpočetní zdroje, pouze 23 procent těchto slev ze strany velkých poskytovatelů však zahrnovalo právě také tyto výpočetní služby.

Pokračování

'; 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'; } }