/*! elementor - v3.16.0 - 14-09-2023 */ "use strict"; (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["accordion"],{ /***/ "../assets/dev/js/frontend/handlers/accordion.js": /*!*******************************************************!*\ !*** ../assets/dev/js/frontend/handlers/accordion.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js")); class Accordion extends _baseTabs.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(); return { ...defaultSettings, showTabFn: 'slideDown', hideTabFn: 'slideUp' }; } } exports["default"] = Accordion; /***/ }), /***/ "../assets/dev/js/frontend/handlers/base-tabs.js": /*!*******************************************************!*\ !*** ../assets/dev/js/frontend/handlers/base-tabs.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class baseTabs extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { tablist: '[role="tablist"]', tabTitle: '.elementor-tab-title', tabContent: '.elementor-tab-content' }, classes: { active: 'elementor-active' }, showTabFn: 'show', hideTabFn: 'hide', toggleSelf: true, hidePrevious: true, autoExpand: true, keyDirection: { ArrowLeft: elementorFrontendConfig.is_rtl ? 1 : -1, ArrowUp: -1, ArrowRight: elementorFrontendConfig.is_rtl ? -1 : 1, ArrowDown: 1 } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $tabTitles: this.findElement(selectors.tabTitle), $tabContents: this.findElement(selectors.tabContent) }; } activateDefaultTab() { const settings = this.getSettings(); if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) { return; } const defaultActiveTab = this.getEditSettings('activeItemIndex') || 1, originalToggleMethods = { showTabFn: settings.showTabFn, hideTabFn: settings.hideTabFn }; // Toggle tabs without animation to avoid jumping this.setSettings({ showTabFn: 'show', hideTabFn: 'hide' }); this.changeActiveTab(defaultActiveTab); // Return back original toggle effects this.setSettings(originalToggleMethods); } handleKeyboardNavigation(event) { const tab = event.currentTarget, $tabList = jQuery(tab.closest(this.getSettings('selectors').tablist)), // eslint-disable-next-line @wordpress/no-unused-vars-before-return $tabs = $tabList.find(this.getSettings('selectors').tabTitle), isVertical = 'vertical' === $tabList.attr('aria-orientation'); switch (event.key) { case 'ArrowLeft': case 'ArrowRight': if (isVertical) { return; } break; case 'ArrowUp': case 'ArrowDown': if (!isVertical) { return; } event.preventDefault(); break; case 'Home': event.preventDefault(); $tabs.first().trigger('focus'); return; case 'End': event.preventDefault(); $tabs.last().trigger('focus'); return; default: return; } const tabIndex = tab.getAttribute('data-tab') - 1, direction = this.getSettings('keyDirection')[event.key], nextTab = $tabs[tabIndex + direction]; if (nextTab) { nextTab.focus(); } else if (-1 === tabIndex + direction) { $tabs.last().trigger('focus'); } else { $tabs.first().trigger('focus'); } } deactivateActiveTab(tabIndex) { const settings = this.getSettings(), activeClass = settings.classes.active, activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass, $activeTitle = this.elements.$tabTitles.filter(activeFilter), $activeContent = this.elements.$tabContents.filter(activeFilter); $activeTitle.add($activeContent).removeClass(activeClass); $activeTitle.attr({ tabindex: '-1', 'aria-selected': 'false', 'aria-expanded': 'false' }); $activeContent[settings.hideTabFn](); $activeContent.attr('hidden', 'hidden'); } activateTab(tabIndex) { const settings = this.getSettings(), activeClass = settings.classes.active, $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'), $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'), animationDuration = 'show' === settings.showTabFn ? 0 : 400; $requestedTitle.add($requestedContent).addClass(activeClass); $requestedTitle.attr({ tabindex: '0', 'aria-selected': 'true', 'aria-expanded': 'true' }); $requestedContent[settings.showTabFn](animationDuration, () => elementorFrontend.elements.$window.trigger('elementor-pro/motion-fx/recalc')); $requestedContent.removeAttr('hidden'); } isActiveTab(tabIndex) { return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active')); } bindEvents() { this.elements.$tabTitles.on({ keydown: event => { // Support for old markup that includes an `` tag in the tab if (jQuery(event.target).is('a') && `Enter` === event.key) { event.preventDefault(); } // We listen to keydowon event for these keys in order to prevent undesired page scrolling if (['End', 'Home', 'ArrowUp', 'ArrowDown'].includes(event.key)) { this.handleKeyboardNavigation(event); } }, keyup: event => { switch (event.code) { case 'ArrowLeft': case 'ArrowRight': this.handleKeyboardNavigation(event); break; case 'Enter': case 'Space': event.preventDefault(); this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); break; } }, click: event => { event.preventDefault(); this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); } }); } onInit() { super.onInit(...arguments); this.activateDefaultTab(); } onEditSettingsChange(propertyName) { if ('activeItemIndex' === propertyName) { this.activateDefaultTab(); } } changeActiveTab(tabIndex) { const isActiveTab = this.isActiveTab(tabIndex), settings = this.getSettings(); if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) { this.deactivateActiveTab(); } if (!settings.hidePrevious && isActiveTab) { this.deactivateActiveTab(tabIndex); } if (!isActiveTab) { this.activateTab(tabIndex); } } } exports["default"] = baseTabs; /***/ }) }]); //# sourceMappingURL=accordion.c16b88b2e8a0c50189bc.bundle.js.map(function(e,t){"use strict";var n=e.History=e.History||{},r=e.jQuery;if(typeof n.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");n.Adapter={bind:function(e,t,n){r(e).bind(t,n)},trigger:function(e,t,n){r(e).trigger(t,n)},extractEventData:function(e,n,r){var i=n&&n.originalEvent&&n.originalEvent[e]||r&&r[e]||t;return i},onDomLoad:function(e){r(e)}},typeof n.init!="undefined"&&n.init()})(window),function(e,t){"use strict";var n=e.console||t,r=e.document,i=e.navigator,s=!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;try{s=e.sessionStorage,s.setItem("TEST","1"),s.removeItem("TEST")}catch(d){s=!1}l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!="undefined")throw new Error("History.js Core has already been loaded...");h.init=function(e){return typeof h.Adapter=="undefined"?!1:(typeof h.initCore!="undefined"&&h.initCore(),typeof h.initHtml4!="undefined"&&h.initHtml4(),!0)},h.initCore=function(d){if(typeof h.initCore.initialized!="undefined")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.disableSuid=h.options.disableSuid||!1,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.options.html4Mode=h.options.html4Mode||!1,h.options.delayInit=h.options.delayInit||!1,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!="undefined"&&t!==null){for(e=0;e")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.options.html4Mode?h.emulated={pushState:!0,hashChange:!0}:h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||h.getLocationHref(),n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=h.getLocationHref().replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.getLocationHref=function(e){return e=e||r,e.URL===e.location.href?e.location.href:e.location.href===decodeURIComponent(e.URL)?e.URL:e.location.hash&&decodeURIComponent(e.location.href.replace(/^[^#]+/,""))===e.location.hash?e.location.href:e.URL.indexOf("#")==-1&&e.location.href.indexOf("#")!=-1?e.location.href:e.URL||e.location.href},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};return t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(e.url?e.url:h.getLocationHref()),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data),(t.title||n)&&h.options.disableSuid!==!0&&(t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id),t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r,i;return e.indexOf("#")!=-1?i=e.split("#")[0]:i=e,n=/(.*)\&_suid=([0-9]+)$/.exec(i),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getCurrentIndex=function(){var e=null;return h.savedStates.length<1?e=0:e=h.savedStates.length-1,e},h.getHash=function(e){var t=h.getLocationHref(e),n;return n=h.getHashByUrl(t),n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=decodeURIComponent(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(h.busy(!0),n=h.extractState(e,!0),n&&!h.emulated.pushState?h.pushState(n.data,n.title,n.url,!1):h.getHash()!==e&&(h.bugs.setHash?(i=h.getPageUrl(),h.pushState(null,null,i+"#"+e,!1)):r.location.hash=e),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.encodeURIComponent(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(h.getLocationHref()),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var v=function(){};h.pushState=h.pushState||v,h.replaceState=h.replaceState||v}else h.onPopState=function(t,n){var r=!1,i=!1,s,o;return h.doubleCheckComplete(),s=h.getHash(),s?(o=h.extractState(s||h.getLocationHref(),!0),o?h.replaceState(o.data,o.title,o.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(r=h.Adapter.extractEventData("state",t,n)||!1,r?i=h.getStateById(r):h.expectedStateId?i=h.getStateById(h.expectedStateId):i=h.extractState(h.getLocationHref()),i||(i=h.createStateObject(null,null,h.getLocationHref())),h.expectedStateId=!1,h.isLastSavedState(i)?(h.busy(!1),!1):(h.storeState(i),h.saveState(i),h.setTitle(i),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(m){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(h.getLocationHref(),!0))),s&&(h.onUnload=function(){var e,t,n;try{e=l.parse(s.getItem("History.store"))||{}}catch(r){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),n=l.stringify(e);try{s.setItem("History.store",n)}catch(i){if(i.code!==DOMException.QUOTA_EXCEEDED_ERR)throw i;s.length&&(s.removeItem("History.store"),s.setItem("History.store",n))}},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},(!h.options||!h.options.delayInit)&&h.init()}(window){"id":1987,"date":"2021-09-13T21:55:16","date_gmt":"2021-09-13T14:55:16","guid":{"rendered":"https:\/\/uetacad.com\/?p=1987"},"modified":"2021-09-13T21:55:20","modified_gmt":"2021-09-13T14:55:20","slug":"lam-sao-de-lua-chon-dich-vu-cloud","status":"publish","type":"post","link":"https:\/\/uetacad.com\/lam-sao-de-lua-chon-dich-vu-cloud\/","title":{"rendered":"L\u00e0m sao \u0111\u1ec3 l\u1ef1a ch\u1ecdn d\u1ecbch v\u1ee5 Cloud"},"content":{"rendered":"\n

M\u1edf \u0111\u1ea7u<\/h1>\n\n\n\n

\u0110\u1eebng qu\u00e1 lo l\u1eafng, tr\u00f4ng c\u00f3 v\u1ebb kh\u00f3 nh\u01b0ng th\u1ef1c ra n\u00f3 \u0111\u01a1n gi\u1ea3n h\u01a1n r\u1ea5t nhi\u1ec1u so v\u1edbi n\u00f3 . M\u1ed7i nh\u00e0 cung c\u1ea5p \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y \u0111ang h\u01b0\u1edbng t\u1edbi m\u1eabu kh\u00e1ch h\u00e0ng v\u00e0 c\u00e1ch s\u1eed d\u1ee5ng kh\u00e1c nhau. V\u1edbi t\u00f4i, t\u00f4i nh\u00f3m c\u00e1c nh\u00e0 cung c\u1ea5p \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y theo lo\u1ea1i nh\u01b0 ph\u00eda d\u01b0\u1edbi. V\u00e0 t\u00f4i s\u1ebd gi\u1ea3i th\u00edch m\u1ee5c \u0111\u00edch c\u1ee7a m\u1ed7i lo\u1ea1i l\u00e0 g\u00ec? Ch\u00fang kh\u00e1c nhau nh\u01b0 th\u1ebf n\u00e0o ? L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 s\u1eed d\u1ee5ng ph\u00f9 h\u1ee3p nh\u1ea5t trong m\u1ed7i tr\u01b0\u1eddng h\u1ee3p ? V\u00e0 nh\u00e0 cung c\u1ea5p d\u1ecbch v\u1ee5 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y l\u00e0 t\u1ed1t nh\u1ea5t trong m\u1ed7i lo\u1ea1i t\u01b0\u01a1ng \u1ee9ng ?<\/p>\n\n\n\n

  • Cloud cho m\u1ee5c \u0111\u00edch chung (GCE, AWS, Azure)<\/li>
  • Cloud gi\u00e1 r\u1ebb (Digital Ocean, Linode)<\/li>
  • Dedicated clouds (SoftLayer, OVH)<\/li>
  • Server \u0111\u1eb7t \u1edf DC – kh\u00f4ng ph\u1ea3i Cloud<\/li><\/ul>\n\n\n\n

    1. Cloud cho m\u1ee5c \u0111\u00edch chung<\/h1>\n\n\n\n

    C\u00e1c nh\u00e0 cung c\u1ea5p:<\/h2>\n\n\n\n

    Amazon AWS, Google Compute Engine, Microsoft Azure<\/h3>\n\n\n\n

    C\u00e2u h\u1ecfi:<\/h2>\n\n\n\n

    Cloud ph\u00f9 h\u1ee3p nh\u1ea5t n\u1ebfu b\u1ea1n c\u00f3 c\u00e2u tr\u1ea3 l\u1eddi cho b\u1ea5t k\u1ef3 c\u00e2u h\u1ecfi sau \u0111\u00e2y.<\/h3>\n\n\n\n
    • B\u1ea1n ch\u1ea1y h\u01a1n 50 m\u00e1y \u1ea3o?<\/li>
    • B\u1ea1n c\u00f3 chi h\u01a1n 1.000 USD \/ th\u00e1ng v\u00e0o l\u01b0u tr\u1eef?<\/li>
    • C\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n c\u00f3 n\u1eb3m r\u1ea3i r\u00e1c \u1edf nhi\u1ec1u trung t\u00e2m d\u1eef li\u1ec7u?<\/li><\/ul>\n\n\n\n

      S\u1eed d\u1ee5ng:<\/h2>\n\n\n\n

      M\u1ee5c \u0111\u00edch m\u1ed9t cloud c\u00f3 ngh\u0129a l\u00e0 \u0111\u1ec3 ch\u1ea1y b\u1ea5t c\u1ee9 \u0111i\u1ec1u g\u00ec v\u00e0 t\u1ea5t c\u1ea3 m\u1ecdi th\u1ee9. N\u00f3 c\u00f3 th\u1ec3 thay th\u1ebf m\u1ed9t rack c\u1ee7a server, n\u00f3 c\u00f3 th\u1ec3 thay th\u1ebf ho\u00e0n to\u00e0n cho m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u. N\u00f3 cung c\u1ea5p c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng th\u00f4ng th\u01b0\u1eddng c\u1ed9ng v\u1edbi m\u1ed9t s\u1ed1 c\u1ea3i ti\u1ebfn m\u00e0 c\u00f3 th\u1ec3 r\u1ea5t kh\u00f3 \u0111\u1ec3 t\u00ecm 1 c\u00e1ch kh\u00e1c.<\/h3>\n\n\n\n

      \u0110\u00f3 l\u00e0 \u0111\u01b0\u1eddng \u0111i \u0111\u1ebfn gi\u1ea3i ph\u00e1p cho ch\u1ea1y nhi\u1ec1u \u1ee9ng d\u1ee5ng \u0111\u1ed3ng nh\u1ea5t \u0111\u00f2i h\u1ecfi m\u1ed9t lo\u1ea1t c\u00e1c ph\u1ea7n c\u1ee9ng. \u0110\u00f3 l\u00e0 t\u00ednh linh ho\u1ea1t l\u00e0m cho n\u00f3 l\u00fd t\u01b0\u1edfng \u0111\u1ec3 ch\u1ea1y to\u00e0n b\u1ed9 ho\u1ea1t \u0111\u1ed9ng trong c\u00e1c \u0111\u00e1m m\u00e2y. \u0110\u00f3 l\u00e0 ho\u00e0n to\u00e0n ph\u00f9 h\u1ee3p cho m\u1ed9t c\u00f4ng ty c\u00f4ng ngh\u1ec7, ho\u1eb7c m\u1ed9t d\u1ef1 \u00e1n [l\u1edbn] c\u00f4ng ngh\u1ec7 cao. M\u1ee5c \u0111\u00edch c\u1ee7a cloud l\u00e0 l\u00e0m cho c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng ph\u1ee9c t\u1ea1p lu\u00f4n c\u00f3 s\u1eb5n trong tay b\u1ea1n :<\/p>\n\n\n\n

      • C\u00e1c m\u00e1y ch\u1ee7 c\u1ee7a c\u00e1c k\u00edch c\u1ee1 kh\u00e1c nhau v\u00e0 c\u00e1c lo\u1ea1i ph\u1ea7n c\u1ee9ng<\/li>
      • Thi\u1ebft k\u1ebf m\u1ea1ng v\u00e0 t\u01b0\u1eddng l\u1eeda c\u1ee7a ri\u00eang b\u1ea1n (gi\u1ed1ng nh\u01b0 trong m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u th\u1ef1c)<\/li>
      • Nh\u00f3m v\u00e0 c\u00e1ch l\u00fd c\u00e1c instace v\u1edbi nhau v\u00e0 t\u1eeb internet<\/li>
      • D\u1ec5 d\u00e0ng t\u1ea1o \u0111\u01b0\u1ee3c nhi\u1ec1u v\u00f9ng tr\u00ean to\u00e0n th\u1ebf gi\u1edbi<\/li>
      • Th\u1ee9 t\u1ef1, thay \u0111\u1ed5i ho\u1eb7c thi\u1ebft k\u1ebf l\u1ea1i b\u1ea5t c\u1ee9 \u0111i\u1ec1u g\u00ec trong th\u1eddi gian ng\u1eafn M\u1ed9t \u0111\u00e1m m\u00e2y n\u00f3i chung m\u1ee5c \u0111\u00edch l\u00e0 m\u1ed9t h\u1ec7 sinh th\u00e1i ho\u00e0n to\u00e0n. N\u00f3 bao g\u1ed3m c\u00e1c kho\u1ea3n t\u01b0\u01a1ng \u0111\u01b0\u01a1ng cho t\u1ea5t c\u1ea3 c\u00e1c d\u1ecbch v\u1ee5 th\u01b0\u1eddng \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y (v\u00e0 c\u1ea7n thi\u1ebft) trong m\u00f4i tr\u01b0\u1eddng trung t\u00e2m d\u1eef li\u1ec7u \/ doanh nghi\u1ec7p:<\/li>
      • \u1ed4 \u0111\u0129a SAN (EBS, Google Storage)<\/li>
      • L\u01b0u tr\u1eef m\u1edf r\u1ed9ng v\u00e0 sao l\u01b0u (S3, Google Storage, Snapshots)<\/li>
      • C\u00e2n b\u1eb1ng t\u1ea3i ph\u1ea7n c\u1ee9ng (ELB, Google Load Balancer)…<\/li><\/ul>\n\n\n\n

        L\u1ef1a ch\u1ecdn :<\/h2>\n\n\n\n
        • GCE l\u00e0 kh\u00e1 r\u1ed9ng so v\u1edbi c\u00e1c \u0111\u1ed1i th\u1ee7 c\u1ea1nh tranh c\u1ee7a n\u00f3. GCE r\u1ebb h\u01a1n c\u00e1c nh\u00e0 cung c\u1ea5p kh\u00e1c<\/li>
        • AWS l\u00e0 \u0111\u1eaft h\u01a1n 25-100% \u0111\u1ec3 ch\u1ea1y c\u00e1c c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng gi\u1ed1ng nhau.<\/li>
        • T\u00f4i kh\u00f4ng c\u00f3 kinh nghi\u1ec7m v\u1edbi Microsoft Azure v\u00e0 n\u00ean kh\u00f4ng th\u1ec3 b\u00ecnh lu\u1eadn nhi\u1ec1u v\u1ec1 n\u00f3. Nh\u01b0ng t\u00f4i c\u00f3 t\u00ecm hi\u1ec3u v\u00e0 l\u1eafng nghe m\u1ed9t v\u00e0i \u00fd ki\u1ebfn \u200b\u200bph\u1ea3n h\u1ed3i, t\u00f4i th\u1ea5y cho \u0111\u1ebfn nay l\u00e0 kh\u00e1 ti\u00eau c\u1ef1c. Azure c\u1ea7n th\u1eddi gian \u0111\u1ec3 tr\u01b0\u1edfng th\u00e0nh v\u00e0 ho\u00e0n thi\u1ec7n h\u01a1n.<\/li><\/ul>\n\n\n\n

          2. Cloud gi\u00e1 r\u1ebb<\/h1>\n\n\n\n

          C\u00e1c nh\u00e0 cung c\u1ea5p:<\/h2>\n\n\n\n

          Digital Ocean, Linode<\/h3>\n\n\n\n

          C\u00e2u h\u1ecfi:<\/h2>\n\n\n\n

          Cloud ph\u00f9 h\u1ee3p nh\u1ea5t n\u1ebfu b\u1ea1n c\u00f3 c\u00e2u tr\u1ea3 l\u1eddi cho b\u1ea5t k\u1ef3 c\u00e2u h\u1ecfi sau \u0111\u00e2y.<\/h3>\n\n\n\n
          • B\u1ea1n c\u00f3 ch\u1ea1y \u00edt h\u01a1n 5 m\u00e1y \u1ea3o?<\/li>
          • B\u1ea1n chi ti\u00eau \u00edt h\u01a1n 100 \u0111\u00f4 la \/ th\u00e1ng tr\u00ean hosting ?<\/li>
          • N\u1ebfu b\u1ea1n nh\u1eadn \u0111\u01b0\u1ee3c bill g\u1ea5p \u0111\u00f4i nh\u1eefng g\u00ec b\u1ea1n ngh\u0129 ?<\/li>
          • B\u1ea1n c\u00f3 \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n t\u00e0i ch\u00ednh \u0111\u1ec3 s\u1eed d\u1ee5ng n\u1ebfu b\u1ea1n l\u00e0 m\u1ed9t ng\u01b0\u1eddi ch\u01b0a bi\u1ebft g\u00ec v\u1ec1 cloud ho\u1eb7c m\u1ed9t ng\u01b0\u1eddi \u0111am m\u00ea v\u1ec1 c\u00f4ng ngh\u1ec7 ?<\/li><\/ul>\n\n\n\n

            S\u1eed d\u1ee5ng:<\/h2>\n\n\n\n

            M\u1ed9t \u0111\u00e1m m\u00e2y gi\u00e1 r\u1ebb c\u00f3 ngh\u0129a l\u00e0 \u0111\u1ec3 cung c\u1ea5p c\u00e1c m\u00e1y ch\u1ee7 th\u00edch h\u1ee3p cho \u0111\u1ea1i \u0111a s\u1ed1 ng\u01b0\u1eddi d\u00f9ng, “th\u00edch h\u1ee3p” \u1edf \u0111\u00e2y c\u00f3 ngh\u0129a l\u00e0 ph\u1ea7n c\u1ee9ng t\u1ed1t v\u00e0 k\u1ebft n\u1ed1i internet t\u1ed1t, gi\u00e1 c\u1ea3 ph\u1ea3i ch\u0103ng. Hi\u1ec7u n\u0103ng t\u1ed1t h\u01a1n n\u1ebfu b\u1ea1n l\u1ea5y 1 PC hay laptop n\u00e0o \u0111\u00f3 \u0111\u1ec3 d\u1ef1ng l\u00ean th\u00e0nh 1 server \u0111\u1ec3 ch\u1ea1y 1 server n\u00e0o \u0111\u00f3. Tuy nhi\u00ean, c\u00f3 l\u1ebd c\u00e1c b\u1ea1n c\u0169ng n\u00ean bi\u1ebft l\u00e0 nh\u1eefng ng\u00e0y \u0111\u1ea7u ti\u00ean Framgia c\u0169ng \u0111\u00e3 t\u1eebng nh\u01b0 v\u1eady\u00a0.<\/h3>\n\n\n\n

            \u0110\u00f3 l\u00e0 gi\u1ea3i ph\u00e1p cho t\u1ea5t c\u1ea3 c\u00e1c nhu c\u1ea7u c\u01a1 b\u1ea3n. V\u00ed d\u1ee5, c\u00e1c chuy\u00ean gia ch\u1ea1y m\u1ed9t v\u00e0i d\u1ecbch v\u1ee5 \u0111\u01a1n gi\u1ea3n v\u1edbi traffic th\u1ea5p \u0111\u1ebfn trung b\u00ecnh, c\u00e1c c\u01a1 quan c\u1ea7n m\u1ed9t hosting \u0111\u01a1n gi\u1ea3n \u0111\u1ec3 cung c\u1ea5p l\u1ea1i cho kh\u00e1ch h\u00e0ng, nh\u1eefng ng\u01b0\u1eddi nghi\u1ec7p d\u01b0 v\u00e0 ng\u01b0\u1eddi c\u00f3 s\u1edf th\u00edch l\u00e0m th\u00ed nghi\u1ec7m. N\u00f3i chung, n\u00f3 l\u00e0 s\u1ef1 l\u1ef1a ch\u1ecdn t\u1ed1t nh\u1ea5t cho nh\u1eefng ai \u0111ang t\u00ecm ki\u1ebfm m\u1ed9t v\u00e0i m\u00e1y ch\u1ee7, \u0111\u1eb7c bi\u1ec7t l\u00e0 n\u1ebfu c\u00e1c ti\u00eau ch\u00ed ch\u00ednh l\u00e0 “d\u1ec5 qu\u1ea3n l\u00fd” v\u00e0 “\u00edt t\u1ed1n chi ph\u00ed”. Cloud gi\u00e1 r\u1ebb l\u00e0m cho m\u00e1y ch\u1ee7 c\u00f3 gi\u00e1 c\u1ea3 ph\u1ea3i ch\u0103ng v\u00e0 c\u00f3 \u0111\u01b0\u1ee3c :<\/p>\n\n\n\n

            • M\u00e1y ch\u1ee7 th\u1ef1c (ph\u1ea7n c\u1ee9ng m\u00e1y ch\u1ee7 c\u1ea5p, k\u1ebft n\u1ed1i internet t\u1ed1t)<\/li>
            • \u0110\u01a1n gi\u1ea3n, d\u1ec5 s\u1eed d\u1ee5ng, d\u1ec5 qu\u1ea3n l\u00fd v\u00e0 thu\u1eadn ti\u1ec7n<\/li>
            • Chi ph\u00ed c\u00f3 th\u1ec3 d\u1ef1 \u0111o\u00e1n, c\u0169ng nh\u01b0 x\u00e1c \u0111\u1ecbnh<\/li>
            • Thu\u00ea m\u1ed9t m\u00e1y ch\u1ee7 trong th\u1eddi gian ng\u1eafn<\/li><\/ul>\n\n\n\n

              L\u1ef1a ch\u1ecdn :<\/h2>\n\n\n\n

              V\u1edbi t\u00f4i c\u00f3 l\u1ebd l\u00e0 Linode, nh\u01b0ng nhi\u1ec1u ng\u01b0\u1eddi c\u00f3 l\u1ebd v\u1eabn th\u00edch s\u1eed d\u1ee5ng DigitalOcean. N\u00ean nh\u1edb l\u00e0 c\u00e1ch \u0111\u00e2y kh\u00f4ng l\u00e2u v\u00e0o th\u00e1ng 10-2016, Linode b\u1ecb ng\u01b0ng ho\u1ea1t \u0111\u1ed9ng g\u1ea7n nh\u01b0 c\u1ea3 th\u00e1ng, trong n\u0103m 2015 c\u0169ng nh\u01b0 v\u1eady, \u0111\u00f3 l\u00e0 h\u1eadu qu\u1ea3 c\u1ee7a t\u1ea5n c\u00f4ng DDoS nh\u1eafm v\u00e0o Linode, v\u1ec3 kho\u1ea3n n\u00e0y c\u00f3 l\u1ebd DigitalOcean an to\u00e0n h\u01a1n.<\/p>\n\n\n\n

              3. Cloud chuy\u00ean d\u1ee5ng<\/h1>\n\n\n\n

              C\u00e1c nh\u00e0 cung c\u1ea5p:<\/h2>\n\n\n\n

              IBM SoftLayer, OVH, Hetzner<\/h3>\n\n\n\n

              S\u1eed d\u1ee5ng :<\/h2>\n\n\n\n

              M\u1ee5c \u0111\u00edch chung c\u1ee7a deicate cloud l\u00e0 gi\u1edbi h\u1ea1n 16 nh\u00e2n v\u1eadt l\u00fd v\u00e0 b\u1ed9 nh\u1edb 128 GB v\u00e0 8 TB \u1ed5 SAN, v\u1edbi gi\u00e1 c\u1ea3 t\u0103ng tuy\u1ebfn t\u00ednh theo c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt (t\u0103ng g\u1ea5p \u0111\u00f4i b\u1ed9 nh\u1edb = g\u1ea5p \u0111\u00f4i gi\u00e1). Nh\u1eefng \u0111\u00e1m m\u00e2y chuy\u00ean d\u1ee5ng c\u00f3 th\u1ec3 cung c\u1ea5p c\u00e1c m\u00e1y ch\u1ee7 l\u1edbn h\u01a1n nhi\u1ec1u v\u00e0 c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt cao c\u1ea5p c\u00f3 gi\u00e1 r\u1ebb h\u01a1n \u0111\u00e1ng k\u1ec3.<\/h3>\n\n\n\n

              \u0110\u00e2y l\u00e0 gi\u1ea3i ph\u00e1p cho c\u00e1c task \u0111\u1eb7c bi\u1ec7t ch\u1ea1y 24\/7 m\u00e0 y\u00eau c\u1ea7u ph\u1ea7n c\u1ee9ng , scale theo theo chi\u1ec1u d\u1ecdc.
              Tr\u01b0\u1eddng h\u1ee3p \u0111\u1eb7c bi\u1ec7t: T\u00f4i \u0111\u00e3 nh\u00ecn th\u1ea5y ng\u01b0\u1eddi thu\u00ea m\u1ed9t m\u00e1y ch\u1ee7 chuy\u00ean d\u1ee5ng l\u1edbn duy nh\u1ea5t v\u1edbi vSphere v\u00e0 ch\u1ea1y nhi\u1ec1u m\u00e1y \u1ea3o tr\u00ean \u0111\u00f3. N\u00f3 cho ph\u00e9p \u0111\u1ec3 l\u00e0m r\u1ea5t nhi\u1ec1u l\u1ea7n th\u1eed nghi\u1ec7m t\u1ea1i m\u1ed9t chi ph\u00ed c\u1ed1 \u0111\u1ecbnh v\u00e0 kh\u00e1 h\u1ee3p l\u00fd.<\/p>\n\n\n\n

              IBM SoftLayer:<\/h2>\n\n\n\n
              • Tu\u1ef3 Ch\u1ecdn ph\u1ea7n c\u1ee9ng, ph\u00f9 h\u1ee3p v\u1edbi kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c d\u1ef1 \u0111\u1ecbnh<\/li>
              • T\u1ed1i \u0111a hi\u1ec7u su\u1ea5t (kh\u00f4ng c\u00f3 \u1ea3o h\u00f3a)<\/li>
              • Quad CPU 96 core, 1 TB memory<\/li>
              • 24 HDD ho\u1eb7c SSD \u1ed5 \u0111\u0129a cho 1 server<\/li><\/ul>\n\n\n\n

                L\u1ef1a ch\u1ecdn : IBM SoftLayer l\u00e0 nh\u00e0 cung c\u1ea5p duy nh\u1ea5t c\u00e1c th\u1ebf h\u1ec7 ti\u1ebfp theo c\u1ee7a \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y ri\u00eang. D\u1ec5 d\u00e0ng c\u00f3 m\u00e1y ch\u1ee7 ho\u1ea1t \u0111\u1ed9ng theo c\u00e1ch t\u01b0\u01a1ng t\u1ef1 nh\u01b0 mua c\u00e1c m\u00e1y ch\u1ee7 t\u1eeb c\u00e1c trang web c\u1ee7a Dell, HP, IBM, Supermicro ngo\u1ea1i tr\u1eeb l\u00e0 thu\u00ea v\u00e0 tr\u1ea3 ti\u1ec1n m\u1ed7i th\u00e1ng. \u0110i\u1ec1u \u0111\u00f3 c\u00f3 l\u1ebd l\u00e0 \u0111\u01b0\u01a1ng nhi\u00ean r\u1ed3i\u00a0.<\/p>\n\n\n\n

                Challengers: C\u00f3 m\u1ed9t v\u00e0i nh\u00e0 cung c\u1ea5p l\u1edbn trong l\u1ecbch s\u1eed (OVH, Hetzner, …). H\u1ecd \u0111ang ch\u1ea1y tr\u00ean m\u1ed9t m\u00f4 h\u00ecnh c\u0169, ch\u1ec9 cung c\u1ea5p c\u00e1c g\u00f3i d\u1ecbch v\u1ee5 v\u1edbi s\u1ef1 l\u1ef1a ch\u1ecdn h\u1ea1n ch\u1ebf. H\u1ecd c\u00f3 th\u1ec3 so s\u00e1nh m\u1ed9t c\u00e1ch t\u00edch c\u1ef1c \u0111\u1ec3 SoftLayer (r\u1ebb h\u01a1n v\u00e0 kh\u00f4ng kh\u00f3 \u0111\u1ec3 qu\u1ea3n l\u00fd \/ s\u1eed d\u1ee5ng) khi ch\u1ea1y m\u1ed9t v\u00e0i m\u00e1y ch\u1ee7 v\u1edbi nh\u1eefng d\u1ecbch v\u1ee5 c\u01a1 b\u1ea3n.<\/p>\n\n\n\n

                4. Server \u0111\u1eb7t \u1edf DC<\/h1>\n\n\n\n

                S\u1eed d\u1ee5ng: Kh\u00f4ng bao gi\u1edd. Lu\u00f4n lu\u00f4n l\u00e0 m\u1ed9t quy\u1ebft \u0111\u1ecbnh t\u1ed3i.<\/h2>\n\n\n\n

                Ch\u00fang ta th\u01b0\u1eddng s\u1eed d\u1ee5ng DC c\u1ee7a 1 nh\u00e0 cung c\u1ea5p n\u00e0o \u0111\u00f3 v\u00ec 1 trong 3 l\u00fd do sau :<\/h2>\n\n\n\n
                • Ngh\u0129 r\u1eb1ng n\u00f3 r\u1ebb h\u01a1n<\/li>
                • Kh\u00f4ng bi\u1ebft t\u00ednh to\u00e1n chi ph\u00ed<\/li>
                • H\u1ecdc sinh, ng\u01b0\u1eddi kh\u00f4ng chuy\u00ean, nh\u1eefng ng\u01b0\u1eddi \u0111am m\u00ea, s\u1eed d\u1ee5ng m\u00e1y ch\u1ee7 duy nh\u1ea5t v\u00e0 kh\u00f4ng v\u00ec l\u1ee3i nhu\u1eadn<\/li><\/ul>\n\n\n\n

                  C\u00f3 v\u1ea5n \u0111\u1ec1 g\u00ec v\u1edbi vi\u1ec7c thu\u00ea DC:<\/h2>\n\n\n\n
                  • M\u1ea5t th\u1eddi gian \u0111i l\u00ean DC v\u00e0 ra v\u00e0o trung t\u00e2m d\u1eef li\u1ec7u, li\u00ean t\u1ee5c<\/li>
                  • M\u1ea5t th\u1eddi gian v\u00e0 s\u1ee9c kh\u1ecfe \u0111\u1ec3 b\u00ea\/v\u00e1c server (m\u1ed9t m\u00e1y ch\u1ee7 2U l\u00e0 kho\u1ea3ng 20-40 kg)<\/li>
                  • Th\u1eddi gian x\u1eed l\u00fd l\u00e2u khi\u1ebfn cho vi\u1ec7c communicate v\u1edbi c\u00e1c team kh\u00e1c s\u1ebd x\u1ea5u \u0111i r\u00f5 r\u1ec7t (r\u00fat ra t\u1eeb kinh nghi\u1ec7m c\u1ee7a b\u1ea3n th\u00e2n t\u00f4i t\u1eeb vi\u1ec7c c\u00f3 th\u1eadt)<\/li>
                  • \u0110\u00f4i khi l\u00e0 c\u00e1c tr\u1ef1c ca l\u1ee1 tay l\u00e0m h\u1ecfng g\u00ec \u0111\u00f3 tr\u00ean t\u1ee7 rack c\u1ee7a b\u1ea1n, th\u1eadm ch\u00ed l\u00e0 b\u1ecb m\u1ea5t ph\u1ea7n c\u1ee9ng khi ai \u0111\u00f3 ti\u1ec7n tay l\u1ea5y (kinh nghi\u1ec7m b\u1ea3n th\u00e2n)<\/li>
                  • Kh\u00f4ng th\u1ec3 tri\u1ec3n khai th\u00e0nh nhi\u1ec1u v\u00f9ng. C\u00f3 b\u1ea1n khi nghe xong ch\u1eafc s\u1ebd c\u00f3 c\u00e2u h\u1ecfi : “Nhi\u1ec1u nh\u00e0 cung c\u1ea5p c\u00f3 \u1edf kh\u1eafp c\u00e1c t\u1ec9nh th\u00e0nh l\u1edbn c\u1ee7a VN hay c\u00f3 th\u1ec3 thu\u00ea 1 nh\u00e0 cung c\u1ea5p kh\u00e1c”. V\u1eady t\u00f4i xin th\u01b0a v\u1edbi c\u00e1c b\u1ea1n l\u00e0 b\u1ea1n ho\u00e0n to\u00e0n sai l\u1ea7m. B\u1edfi v\u00ec sao, nh\u01b0 th\u1ebf th\u00ec b\u1ea1n b\u1ecb ph\u1ee5 thu\u1ed9c v\u00e0o nh\u00e0 cung c\u1ea5p, d\u1ecbch v\u1ee5 c\u1ee7a b\u1ea1n ch\u1ec9 ch\u1ea1y cho VN th\u00f4i hay to\u00e0n th\u1ebf gi\u1edbi. C\u00f2n n\u1ebfu ch\u1ecdn 1 nh\u00e0 cung c\u1ea5p d\u1ecbch v\u1ee5 kh\u00e1c \u1edf n\u01b0\u1edbc ngo\u00e0i b\u1ea1n c\u00f3 bi\u1ebft s\u1ebd kh\u00f3 kh\u0103n th\u1ebf n\u00e0o khi g\u1eb7p s\u1ef1 c\u1ed1 v\u1ec1 k\u1ebft n\u1ed1i kh\u00f4ng ? B\u1ea1n c\u1ea7n contact \u0111\u1ebfn t\u1eebng NCC, ch\u1edd h\u1ecd ph\u1ea3n h\u1ed3i r\u1ed3i, tr\u1ea3 l\u1eddi, c\u1ee9 ti\u1ebfp t\u1ee5c nh\u01b0 v\u1eady th\u00ec b\u1ea1n t\u1ed1n bao nhi\u00eau th\u1eddi gian.<\/li><\/ul>\n\n\n\n

                    5. T\u1ef1 x\u00e2y d\u1ef1ng DataCenter ri\u00eang<\/h1>\n\n\n\n

                    S\u1eed d\u1ee5ng :<\/h2>\n\n\n\n

                    \u0110\u00e2y l\u00e0 \u0111i \u0111\u1ebfn gi\u1ea3i ph\u00e1p cho c\u00e1c c\u00f4ng ty l\u01b0u tr\u1eef v\u00e0 nh\u1eefng ng\u01b0\u1eddi kh\u1ed5ng l\u1ed3 Internet l\u1edbn tu\u1ed5i.<\/h3>\n\n\n\n

                    Nh\u1eefng g\u00e3 kh\u1ed5ng l\u1ed3 (Google, Amazon, Microsoft) b\u1eaft \u0111\u1ea7u t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m khi kh\u00f4ng c\u00f3 nh\u00e0 cung c\u1ea5p n\u00e0o ph\u1ee5c v\u1ee5 \u0111\u01b0\u1ee3c cho nhu c\u1ea7u c\u1ee7a h\u1ecd. H\u1ecd \u0111\u00e3 ph\u1ea3i t\u1ef1 l\u00e0m h\u1ea1 t\u1ea7ng ri\u00eang c\u1ee7a h\u1ecd \u0111\u1ec3 c\u00f3 th\u1ec3 duy tr\u00ec ho\u1ea1t \u0111\u1ed9ng c\u1ee7a h\u1ecd. C\u0169ng n\u00f3i th\u00eam m\u1eb7c d\u00f9 ch\u01b0a th\u1ec3 s\u00e1nh \u0111\u01b0\u1ee3c v\u1edbi c\u00e1c g\u00e3 kh\u1ed5ng l\u1ed3 c\u00f4ng ngh\u1ec7 nh\u01b0ng Framgia c\u0169ng c\u00f3 service \u1edf m\u1ee9c v\u1eeba \u0111\u1ec3 cung c\u1ea5p cho c\u00e1c service c\u1ee7a c\u00f4ng ty.<\/p>\n\n\n\n

                    Ng\u00e0y nay, h\u1ecd \u0111\u00e3 m\u1edf c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a h\u1ecd v\u00e0 \u0111ang ti\u1ebfn h\u00e0nh ch\u00e0o b\u00e1n cho th\u1ebf gi\u1edbi. H\u1ecd c\u00f3 giao di\u1ec7n d\u1ec5 d\u00e0ng \u0111\u1ec3 ti\u1ebfp c\u1eadn v\u00e0 x\u1eed l\u00fd. M\u1ed9t c\u00f4ng ty c\u00f4ng ngh\u1ec7 cao kh\u00f4ng c\u1ea7n trung t\u00e2m d\u1eef li\u1ec7u ri\u00eang n\u1eefa, \u0111\u00f3 kh\u00f4ng ph\u1ea3i l\u00e0 v\u1ea5n \u0111\u1ec1 l\u1edbn trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n.<\/p>\n\n\n\n

                    6. K\u1ebft lu\u1eadn<\/h1>\n\n\n\n

                    Cloud th\u1eadt s\u1ef1 r\u1ea5t tuy\u1ec7t v\u1eddi. Kh\u00f4ng quan tr\u1ecdng ch\u00fang ta mu\u1ed1n g\u00ec, \u1edf \u0111\u00e2u v\u00e0 khi n\u00e0o ch\u00fang ta c\u1ea7n. Lu\u00f4n lu\u00f4n c\u00f3 m\u00e1y ch\u1ee7 \u0111\u00e3 s\u1eb5n s\u00e0ng ch\u1ec9 b\u1eb1ng 1 click v\u00e0 nh\u1eadp th\u00eam c\u1ea3 th\u1ebb t\u00edn d\u1ee5ng n\u1eefa. \u0110i\u1ec1u \u0111\u00e1ng ng\u1ea1c nhi\u00ean nh\u1ea5t m\u00e0 t\u00f4i th\u1ea5y \u0111\u00f3 l\u00e0 c\u00e0ng ng\u00e0y c\u00e0ng c\u00f3 nhi\u1ec1u d\u1ecbch v\u1ee5 m\u1edbi, ch\u1ec9 trong 1 th\u1eddi gian ng\u1eafn, tr\u01b0\u1edbc ch\u1ec9 c\u00f3 1 page danh s\u00e1ch c\u00e1i server c\u00f2n b\u00e2y gi\u1edd ph\u1ea3i g\u1ea5p \u0111\u00f4i th\u1eadm ch\u00ed g\u1ea5p 3 con s\u1ed1 \u0111\u00f3. Nh\u1eefng chia s\u1ebb l\u00e0 d\u1ef1a tr\u00ean kinh nghi\u1ec7m c\u1ee7a b\u1ea3n th\u00e2n t\u00f4i. Cloud \u0111\u00e3 b\u00e2y gi\u1edd tr\u01b0\u1edfng th\u00e0nh v\u00e0 n\u00f3 s\u1eb5n s\u00e0ng \u0111\u1ec3 t\u1ea1o th\u00e0nh xu th\u1ebf. Duy tr\u00ec c\u00e1c m\u00e1y ch\u1ee7 v\u1eadt l\u00fd gi\u1edd ch\u1ec9 c\u00f2n l\u00e0 qu\u00e1 kh\u1ee9.<\/p>\n","protected":false},"excerpt":{"rendered":"

                    M\u1edf \u0111\u1ea7u \u0110\u1eebng qu\u00e1 lo l\u1eafng, tr\u00f4ng c\u00f3 v\u1ebb kh\u00f3 nh\u01b0ng th\u1ef1c ra n\u00f3 \u0111\u01a1n gi\u1ea3n h\u01a1n r\u1ea5t nhi\u1ec1u so v\u1edbi n\u00f3 . M\u1ed7i nh\u00e0 cung c\u1ea5p \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y \u0111ang h\u01b0\u1edbng t\u1edbi m\u1eabu kh\u00e1ch h\u00e0ng v\u00e0 c\u00e1ch s\u1eed d\u1ee5ng kh\u00e1c nhau. V\u1edbi t\u00f4i, t\u00f4i nh\u00f3m c\u00e1c nh\u00e0 cung c\u1ea5p \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y […]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[122,126,127],"tags":[],"class_list":["post-1987","post","type-post","status-publish","format-standard","hentry","category-blog","category-tutor","category-forum"],"_links":{"self":[{"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/posts\/1987"}],"collection":[{"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/comments?post=1987"}],"version-history":[{"count":1,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/posts\/1987\/revisions"}],"predecessor-version":[{"id":1988,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/posts\/1987\/revisions\/1988"}],"wp:attachment":[{"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/media?parent=1987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/categories?post=1987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uetacad.com\/wp-json\/wp\/v2\/tags?post=1987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}