Zářivější zítřky čekají jen levnější servery

28. 2. 2014

Sdílet

Autor: Alexander Orlov - Fotolia.com
Ve čtvrtém čtvrtletí loňského roku se globálně prodalo o 3 % více serverů než o rok dříve. Přesto obrat meziročně poklesl o téměř 7 %. Celoročně se pak prodalo o 2 % více při poklesu příjmu dodavatelů o téměř 5 %.

Pokračuje tak trend snižování průměrné ceny za jeden dodaný server. Uvádí to zpráva, kterou uveřejnil Gartner. „Rok 2013 ukázal prohlubující se rozdíly mezi jednotlivými serverovými segmenty,“ říká Jeffrey Hewitt, viceprezident Gartneru. Podle něj je zjevný růst webově orientovaných instalací, zatímco tradiční korporátní trh zůstává poněkud omezený.

Nejlépe si ve čtvrtém čtvrtletí vedl asijsko-pacifický region, který jako jediný zaznamenal růst jak počtu dodaných jednotek (+16,3 %), tak obratu výrobců, i když příjmy dodavatelů stouply jen minimálně (+0,6 %).

Světovému trhu v minulém kvartálu vládl Hewlett-Packard, jenž utržil 3,8 miliardy dolarů (díky čemuž získal na trhu podíl 28 %). To je o šest procent více než o rok dříve.

Mezi top 5 dodavateli se pouze HP a Cisco (+35 %) prezentují meziročním vzestupem obratu. Nejhoršího výsledku v dynamice naopak dosáhlo IBM (–29 %), které část svého serverového byznysu (platfiormy x86) nedávno prodalo Lenovu

Co se týče kusových dodávek, stejně jako v obratu i v tomto ukazateli vévodí Hewlett-Packard s 28% podílem (meziročně o 9 % více). Z první pětky má pozitivní dynamiku kromě HP také Huawei (+188 %) a Fujitsu (+4 %), naopak Dell a IBM ztrácejí (–5 %, resp. –21 %).

Středem zájmu nákupčích byly stroje na platformě x86, jejichž prodej se zvýšil o 4 % při podobně vysokém vzestupu příjmů jejich dodavatelů. Blade servery x86 hlásí trochu nižší dynamiku (obrat vyšší jen minimálně při vzestupu kusových dodávek o 3 %). Trh bladů přitom ovládlo HP s kusovým podílem 40 %, na druhém místě je Cisco se 16 %.

V regionu EMEA poklesl ve čtvrtém čtvrtletí 2013 jak obrat, tak kusové dodávky. Příjmy výrobců na tomto trhu dosáhly výše 3,6 miliardy dolarů, což je o 6 % méně než o rok dříve. Serverů se přitom prodalo 613 tisíc jednotek, což je o 2,5 % méně než ve čtvrtém čtvrtletí 2012.

Za celý rok 2013 se pak prodalo 2,3 milionu serverů (–5,6 %) za 12,4 miliardy dolarů (–6,3 %). Největší pokles je přitom vidět ve východní Evropě, kde prodeje klesly o více než 14 %.

„Trh  se servery v EMEA zaznamenal již desátý kvartál po sobě, kdy došlo k poklesu prodejů,“ tvrdí Adrian O'Connell, šéf výzkumu v Gartneru. Na vině je podle něj složitá tamější ekonomická situace. Pro porovnání – příjmy dodavatelů v roce 2013 byly pouze na dvou třetinách toho, čeho se dosáhlo v roce 2007.

Z výsledků je také zjevné, že skončilo období růstu segmentu serverů s „jinými CPU“, kam se obvykle řadí mainframy. Obrat s těmito produkty totiž poklesl o plnou třetinu.

„Dobrou zprávou pro výrobce je, že se situace začíná stabilizovat, i když zůstává určitá polarizace mezi high-end a low-end platformami – dodavatelé těch levnějších mohou počítač s vyššími příjmy, zatímco výrobci dražších systémů budou i nadále čelit určitým výzvám,“ uzavírá O'Connell.

Prodej serverů v EMEA

linux_sprava_tip

Podíl výrobců podle kusových dodávek, 4. čtvrtletí 2013

HP
39,4 %
Dell
19,6 %
IBM
11,3 %
Fujitsu
5,4 %
Cisco
2,3 %
ostatní
22,0 %

Zdroj: Gartner, únor 2014

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