Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Mikhail Salosin (pagkahuman niini - MS): - Kumusta tanan! Ako diay si Michael. Nagtrabaho ko isip backend developer sa MC2 Software, ug maghisgot ko bahin sa paggamit sa Go sa backend sa Look+ mobile application.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Kinsa ba dinhi ganahan og hockey?

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Unya kini nga aplikasyon alang kanimo. Kini alang sa Android ug iOS ug gigamit sa pagtan-aw sa mga sibya sa lainlaing mga kalihokan sa dula online ug narekord. Naglangkob usab ang aplikasyon sa lainlaing mga estadistika, mga broadcast sa teksto, mga lamesa alang sa mga komperensya, mga torneyo ug uban pang impormasyon nga mapuslanon alang sa mga fans.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Usab sa aplikasyon adunay usa ka butang sama sa mga higayon sa video, i.e. mahimo nimong tan-awon ang labing hinungdanon nga mga gutlo sa mga posporo (mga tumong, away, shootout, ug uban pa). Kung dili nimo gusto nga tan-awon ang tibuuk nga sibya, mahimo nimong tan-awon ang labing makapaikag.

Unsa ang imong gigamit sa pag-uswag?

Ang panguna nga bahin gisulat sa Go. Ang API nga gipakigsultihan sa mga kliyente sa mobile gisulat sa Go. Usa ka serbisyo alang sa pagpadala sa mga abiso sa pagduso sa mga mobile phone gisulat usab sa Go. Kinahanglan usab namon nga magsulat sa among kaugalingon nga ORM, nga mahimo namon nga hisgutan sa umaabot. Aw, pipila ka gagmay nga mga serbisyo ang gisulat sa Go: pag-usab sa gidak-on ug pagkarga sa mga hulagway alang sa mga editor...

Gigamit namo ang PostgreSQL isip database. Ang interface sa editor gisulat sa Ruby on Rails gamit ang ActiveAdmin gem. Ang pag-import sa mga estadistika gikan sa usa ka tighatag sa estadistika gisulat usab sa Ruby.

Alang sa mga pagsulay sa sistema sa API, gigamit namon ang Python unittest. Ang Memcached gigamit sa pag-throttle sa mga tawag sa pagbayad sa API, gigamit ang "Chef" aron makontrol ang pagsumpo, gigamit ang Zabbix sa pagkolekta ug pagmonitor sa mga istatistika sa internal nga sistema. Ang Graylog2 para sa pagkolekta og mga troso, ang Slate kay API documentation para sa mga kliyente.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Pagpili sa protocol

Ang una nga problema nga among nasugatan: kinahanglan namon nga magpili usa ka protocol alang sa interaksyon tali sa backend ug mobile nga mga kliyente, base sa mga mosunud nga punto...

  • Ang labing hinungdanon nga kinahanglanon: ang datos sa mga kliyente kinahanglan nga ma-update sa tinuud nga oras. Sa ato pa, ang tanan nga karon nagtan-aw sa sibya kinahanglan makadawat mga update hapit dayon.
  • Aron pasimplehon ang mga butang, among gihunahuna nga ang datos nga gi-synchronize sa mga kliyente dili mapapas, apan gitago gamit ang mga espesyal nga bandila.
  • Ang tanan nga lahi sa talagsaon nga mga hangyo (sama sa estadistika, komposisyon sa team, estadistika sa team) makuha sa ordinaryong mga hangyo sa GET.
  • Dugang pa, kinahanglan nga dali nga suportahan sa sistema ang 100 ka libo nga tiggamit sa parehas nga oras.

Pinasukad niini, kami adunay duha nga kapilian sa protocol:

  1. Mga Websocket. Apan wala namo kinahanglana ang mga channel gikan sa kliyente ngadto sa server. Kinahanglan lang namon nga magpadala og mga update gikan sa server ngadto sa kliyente, mao nga ang usa ka websocket usa ka sobra nga kapilian.
  2. Ang Server-Sent Events (SSE) mitungha sa husto! Kini yano ra ug batakan nga nagtagbaw sa tanan nga atong gikinahanglan.

Mga Hitabo nga Gipadala sa Server

Pipila ka mga pulong kung giunsa kini nga butang molihok ...

Nagdagan kini sa ibabaw sa usa ka koneksyon sa http. Ang kliyente nagpadala usa ka hangyo, ang server motubag gamit ang Content-Type: text/event-stream ug wala magsira sa koneksyon sa kliyente, apan nagpadayon sa pagsulat sa datos sa koneksyon:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Ang datos mahimong ipadala sa usa ka pormat nga giuyonan sa mga kliyente. Sa among kaso, gipadala namo kini sa kini nga porma: ang ngalan sa giusab nga istruktura (tawo, magdudula) gipadala ngadto sa field sa panghitabo, ug ang JSON nga adunay bag-o, nausab nga mga field alang sa player gipadala ngadto sa data field.

Karon atong hisgutan kung giunsa ang interaksyon mismo molihok.

  • Ang unang butang nga buhaton sa kliyente mao ang pagtino sa katapusang higayon nga ang pag-synchronize sa serbisyo gihimo: kini nagtan-aw sa iyang lokal nga database ug nagtino sa petsa sa katapusang kausaban nga natala niini.
  • Nagpadala kini usa ka hangyo kauban kini nga petsa.
  • Agig tubag, gipadala namo kaniya ang tanan nga mga pag-update nga nahitabo sukad nianang petsa.
  • Pagkahuman niana, naghimo kini usa ka koneksyon sa live channel ug dili magsira hangtod kinahanglan kini nga mga update:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Gipadala namo siya og lista sa mga kausaban: kung adunay makaiskor og tumong, usbon namo ang iskor sa duwa, kung naangol siya, ipadala usab kini sa tinuod nga panahon. Sa ingon, ang mga kliyente makadawat dayon sa labing bag-ong datos sa feed sa dula nga panghitabo. Matag karon ug unya, aron masabtan sa kliyente nga wala mamatay ang server, nga wala’y nahitabo niini, nagpadala kami usa ka timestamp matag 15 segundos - aron mahibal-an nga naa na ang tanan ug dili na kinahanglan nga magkonektar pag-usab.

Giunsa pagserbisyo ang live nga koneksyon?

  • Una sa tanan, naghimo kami usa ka channel diin madawat ang mga buffered update.
  • Pagkahuman niana, nag-subscribe kami sa kini nga channel aron makadawat mga update.
  • Gibutang namon ang husto nga header aron mahibal-an sa kliyente nga ok ra ang tanan.
  • Ipadala ang unang ping. Girekord lang namo ang kasamtangan nga timestamp sa koneksyon.
  • Pagkahuman niana, nagbasa kami gikan sa channel sa usa ka loop hangtod nga sirado ang channel sa pag-update. Ang channel matag karon ug unya makadawat sa kasamtangan nga timestamp o mga pagbag-o nga among gisulat aron maablihan ang mga koneksyon.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Ang una nga problema nga among nasugatan mao ang mga musunud: alang sa matag koneksyon nga giablihan sa kliyente, naghimo kami usa ka timer nga gimarkahan kausa sa matag 15 segundos - kini nahimo nga kung kami adunay 6 ka libo nga koneksyon nga bukas sa usa ka makina (nga adunay usa ka API server), 6 liboan ka mga timer ang gibuhat. Kini mitultol sa makina nga wala magkupot sa gikinahanglang karga. Ang problema dili kaayo klaro kanamo, apan nakakuha kami gamay nga tabang ug giayo kini.

Ingon usa ka sangputanan, karon ang among ping gikan sa parehas nga channel diin gikan ang pag-update.

Subay niini, adunay usa ra ka timer nga mag-tick kausa sa matag 15 segundos.

Adunay daghang mga auxiliary function dinhi - pagpadala sa header, ping ug ang istruktura mismo. Kana mao, ang ngalan sa lamesa (tawo, duwa, panahon) ug ang impormasyon bahin niini nga entry gipadala dinhi:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Mekanismo sa pagpadala sa mga update

Karon gamay kung diin gikan ang mga pagbag-o. Kami adunay daghang mga tawo, mga editor, nga nagtan-aw sa sibya sa tinuud nga oras. Gihimo nila ang tanan nga mga panghitabo: adunay gipapahawa, adunay nasamdan, usa ka matang sa kapuli...

Gamit ang CMS, ang datos mosulod sa database. Pagkahuman niini, ang database nagpahibalo sa mga server sa API bahin niini gamit ang mekanismo sa Listen/Notify. Gipadala na sa mga API server kini nga impormasyon sa mga kliyente. Busa, kita adunay pipila lamang ka mga server nga konektado sa database ug walay espesyal nga load sa database, tungod kay ang kliyente dili direktang makig-uban sa database sa bisan unsa nga paagi:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

PostgreSQL: Paminaw/Pahibalo

Ang mekanismo sa Listen/Notify sa Postgres nagtugot kanimo sa pagpahibalo sa mga subscriber sa panghitabo nga adunay nausab nga panghitabo - pipila ka rekord ang nahimo sa database. Aron mahimo kini, nagsulat kami usa ka yano nga trigger ug function:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Kung nagsal-ot o nagbag-o sa usa ka rekord, gitawag namon ang function sa pagpahibalo sa channel sa data_updates, nga gipasa didto ang ngalan sa lamesa ug ang identifier sa rekord nga giusab o gisulud.

Alang sa tanan nga mga lamesa nga kinahanglan nga i-synchronize sa kliyente, among gihubit ang usa ka gatilyo, nga, pagkahuman sa pagbag-o / pag-update sa usa ka rekord, nagtawag sa function nga gipakita sa slide sa ubos.
Giunsa ang pag-subscribe sa API niini nga mga pagbag-o?

Nahimo ang mekanismo sa Fanout - nagpadala kini og mga mensahe sa kliyente. Gikolekta niini ang tanan nga mga channel sa kustomer ug gipadala ang mga update nga nadawat pinaagi sa kini nga mga channel:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Dinhi ang standard pq library, nga nagkonektar sa database ug nag-ingon nga gusto niini maminaw sa channel (data_updates), nagsusi nga ang koneksyon bukas ug ang tanan maayo. Giwala nako ang pagsusi sa sayup aron makadaginot sa wanang (delikado ang dili pagsusi).

Sunod, asynchronous namon nga gibutang ang Ticker, nga magpadala usa ka ping matag 15 segundos, ug magsugod sa pagpaminaw sa channel nga among gi-subscribe. Kung makadawat kami usa ka ping, among gipatik kini nga ping. Kung makadawat kami usa ka matang sa entry, nan among gimantala kini nga entry sa tanan nga mga subscriber niini nga Fanout.

Giunsa pagtrabaho ang Fan-out?

Sa Russian kini gihubad nga "splitter". Kami adunay usa ka butang nga nagparehistro sa mga subscriber nga gusto makadawat og pipila ka mga update. Ug sa diha nga ang usa ka update moabut sa niini nga butang, kini-apod-apod niini nga update ngadto sa tanan nga mga subscriber niini. Yano igo:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Giunsa kini gipatuman sa Go:

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Adunay usa ka istruktura, kini gi-synchronize gamit ang Mutexes. Kini adunay usa ka natad nga nagtipig sa kahimtang sa koneksyon sa Fanout sa database, i.e. kini karon namati ug makadawat mga update, ingon man usa ka lista sa tanan nga magamit nga mga kanal - mapa, ang yawe niini mao ang channel ug istruktura sa porma sa mga kantidad (sa tinuud wala kini gigamit sa bisan unsang paagi).

Duha ka pamaagi - Connected ug Disconnected - tugoti kami sa pagsulti sa Fanout nga kami adunay koneksyon sa base, kini nagpakita ug ang koneksyon sa base nabuak. Sa ikaduha nga kaso, kinahanglan nimo nga idiskonekta ang tanan nga mga kliyente ug sultihan sila nga dili na sila makapaminaw sa bisan unsa ug nga sila magkonektar pag-usab tungod kay ang koneksyon kanila gisira.

Adunay usab usa ka paagi sa Pag-subscribe nga nagdugang sa channel sa "mga tigpaminaw":

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Adunay usa ka pamaagi sa Pag-unsubscribe, nga magtangtang sa channel gikan sa mga tigpaminaw kung ang kliyente mag-disconnect, ingon man usa ka pamaagi sa Pag-publish, nga nagtugot kanimo nga magpadala usa ka mensahe sa tanan nga mga subscriber.

Pangutana: – Unsa ang gipasa pinaagi niini nga channel?

MS: – Ang modelo nga nausab o ping gipasa (sa esensya usa lang ka numero, integer).

MS: - Mahimo nimong ipadala ang bisan unsang butang, ipadala ang bisan unsang istruktura, imantala kini - nahimo ra kini nga JSON ug mao kana.

MS: - Nakadawat kami usa ka pahibalo gikan sa Postgres - kini naglangkob sa ngalan sa lamesa ug identifier. Pinasukad sa ngalan sa lamesa ug identifier, makuha namon ang rekord nga among gikinahanglan, ug dayon ipadala namon kini nga istruktura alang sa pagmantala.

Infrastructure

Unsa ang hitsura niini gikan sa panan-aw sa imprastraktura? Adunay kami 7 nga mga server sa hardware: ang usa niini hingpit nga gipahinungod sa database, ang laing unom nga nagpadagan sa mga virtual machine. Adunay 6 nga mga kopya sa API: ang matag virtual machine nga adunay API nagdagan sa usa ka lahi nga server sa hardware - kini alang sa kasaligan.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Duna miy duha ka frontend nga naay Keepalived nga na-install para mapausbaw ang accessibility, para kung naay mahitabo, ang usa ka frontend makapuli sa lain. Usab - duha ka kopya sa CMS.

Adunay usab usa ka importer sa istatistika. Adunay usa ka DB Slave diin ang mga backup gihimo matag karon ug unya. Adunay Pigeon Pusher, usa ka aplikasyon nga nagpadala mga abiso sa pagduso sa mga kliyente, ingon man mga butang sa imprastraktura: Zabbix, Graylog2 ug Chef.

Sa tinuud, kini nga imprastraktura labi ka daghan, tungod kay ang 100 ka libo mahimong maserbisyohan nga adunay gamay nga mga server. Apan adunay puthaw - gigamit namo kini (gisultihan kami nga posible - nganong dili).

Pros sa Go

Pagkahuman namo pagtrabaho sa kini nga aplikasyon, ang ingon nga klaro nga mga bentaha sa Go mitumaw.

  • Nindot nga http library. Uban niini makahimo ka og daghan gikan sa kahon.
  • Dugang pa, ang mga channel nga nagtugot kanamo nga dali nga mag-implementar sa usa ka mekanismo sa pagpadala mga pahibalo sa mga kliyente.
  • Ang katingad-an nga butang nga Race detector nagtugot kanamo sa pagwagtang sa daghang kritikal nga mga bug (staging infrastructure). Ang tanan nga nagtrabaho sa dula gilunsad, gihugpong sa yawe sa Race; ug kita, sumala niana, mahimong motan-aw sa mga imprastraktura sa entablado aron makita kung unsa nga mga potensyal nga problema ang naa kanato.
  • Minimalismo ug kayano sa pinulongan.

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

Nangita kami og mga developers! Kung kinsay gusto, palihog.

Ang imong mga pangutana

Pangutana gikan sa mga mamiminaw (pagkahuman niini - B): - Para nako wala nimo napalgan ang usa ka importanteng punto bahin sa Fan-out. Sakto ba ang akong pagsabot nga kung magpadala ka og tubag sa usa ka kliyente, imong gi-block kung dili gusto nga basahon sa kliyente?

MS: - Dili, wala kami nagbabag. Una, naa namo kining tanan luyo sa nginx, nga mao, wala’y mga problema sa hinay nga mga kliyente. Ikaduha, ang kliyente adunay usa ka channel nga adunay buffer - sa tinuud, mahimo namong ibutang ang hangtod sa usa ka gatos nga mga pag-update didto ... Kung dili kami makasulat sa channel, unya kini matangtang. Kung nakita namon nga ang channel gibabagan, nan among isira ang channel, ug mao kana - ang kliyente magkonektar pag-usab kung adunay problema. Busa, sa prinsipyo, walay blocking dinhi.

SA: - Dili ba mahimo nga ipadala dayon ang usa ka rekord sa Pamati / Pagpahibalo, ug dili usa ka lamesa sa pagkilala?

MS: - Pamati / Pahibalo adunay limitasyon sa 8 ka libo nga mga byte sa preload nga gipadala niini. Sa prinsipyo, posible nga ipadala kung nag-atubang kami sa gamay nga kantidad sa datos, apan para nako kini nga paagi [ang paagi nga among buhaton] mas kasaligan. Ang mga limitasyon naa sa Postgres mismo.

SA: – Nakadawat ba ang mga kliyente og mga update sa mga posporo nga dili sila interesado?

MS: - Sa kinatibuk-an, oo. Ingon sa usa ka lagda, adunay 2-3 nga mga dula nga managsama, ug bisan pa panagsa ra. Kung ang usa ka kliyente nagtan-aw sa usa ka butang, kasagaran siya nagtan-aw sa dula nga nagpadayon. Unya, ang kliyente adunay usa ka lokal nga database diin ang tanan nga kini nga mga update gidugang, ug bisan kung wala’y koneksyon sa Internet, ang kliyente makatan-aw sa tanan nga nangagi nga mga posporo diin siya adunay mga update. Sa panguna, among gi-synchronize ang among database sa server sa lokal nga database sa kliyente aron siya makatrabaho offline.

SA: – Nganong naghimo ka ug imong kaugalingong ORM?

Alexey (usa sa mga nag-develop sa Look+): – Niadtong panahona (usa ka tuig na ang milabay) mas gamay ang mga ORM kaysa karon, kung daghan sila. Ang akong paborito nga butang bahin sa kadaghanan sa mga ORM didto mao nga kadaghanan kanila nagdagan sa walay sulod nga mga interface. Kana mao, ang mga pamaagi sa kini nga mga ORM andam sa pagkuha sa bisan unsang butang: usa ka istruktura, usa ka pointer sa istruktura, usa ka numero, usa ka butang nga wala’y kalabotan ...

Ang among ORM nagmugna og mga istruktura base sa modelo sa datos. Akong kaugalingon. Ug busa ang tanan nga mga pamaagi konkreto, ayaw gamita ang pagpamalandong, ug uban pa. Gidawat nila ang mga istruktura ug gipaabut nga gamiton ang mga istruktura nga moabut.

SA: – Pila ka tawo ang miapil?

MS: – Sa inisyal nga yugto, duha ka tawo ang miapil. Nagsugod kami sa usa ka dapit sa Hunyo, ug sa Agosto ang nag-unang bahin andam na (ang unang bersyon). Adunay gipagawas kaniadtong Septyembre.

SA: – Diin imong gihulagway ang SSE, dili ka mogamit ug timeout. Ngano man?

MS: – Sa tinuod lang, ang SSE usa gihapon ka html5 protocol: ang SSE standard kay gidesinyo para makigkomunikar sa mga browsers, sa akong nasabtan. Kini adunay dugang nga mga bahin aron ang mga browser makakonekta pag-usab (ug uban pa), apan wala namo kini kinahanglana, tungod kay kami adunay mga kliyente nga makapatuman sa bisan unsang lohika alang sa pagkonektar ug pagdawat sa impormasyon. Wala kami naghimo sa SSE, apan usa ka butang nga parehas sa SSE. Dili kini ang protocol mismo.
Wala na kinahanglana. Sa akong nasabtan, gipatuman sa mga kliyente ang mekanismo sa koneksyon hapit gikan sa wala. Wala gyud sila magtagad.

SA: – Unsang mga dugang nga kagamitan ang imong gigamit?

MS: - Among labing aktibo nga gigamit ang govet ug golint aron mahiusa ang istilo, ingon man ang gofmt. Wala nay laing gigamit.

SA: – Unsa ang imong gigamit sa pag-debug?

MS: - Ang pag-debug sa kadaghanan gihimo gamit ang mga pagsulay. Wala kami mogamit bisan unsang debugger o GOP.

SA: – Mahimo ba nimo ibalik ang slide diin gipatuman ang Publish function? Ang usa ka letra ba nga variable nga mga ngalan nakapalibog kanimo?

MS: - Dili. Sila adunay usa ka medyo "hiktin" nga gilapdon sa visibility. Wala sila gigamit bisan asa gawas dinhi (gawas sa mga internals niini nga klase), ug kini compact kaayo - nagkinahanglan lamang kini og 7 ka linya.

SA: - Sa usa ka paagi dili gihapon kini intuitive...

MS: - Dili, dili, kini usa ka tinuod nga code! Dili kini bahin sa istilo. Kini usa ra ka utilitarian, gamay kaayo nga klase - 3 ra ka field sa sulod sa klase...

Mikhail Salosin. Golang Meetup. Gamit ang Go sa backend sa Look+ nga aplikasyon

MS: - Sa kinatibuk-an, ang tanan nga mga datos nga gi-synchronize sa mga kliyente (mga duwa sa panahon, mga magdudula) dili mausab. Sa kinatibuk-an nga pagsulti, kung maghimo kita og laing sport diin kinahanglan natong usbon ang duwa, atong tagdon ang tanan sa bag-ong bersyon sa kliyente, ug ang mga daan nga bersyon sa kliyente idili.

SA: - Aduna bay bisan unsang ikatulo nga partido nga mga pakete sa pagdumala sa dependency?

MS: – Gigamit namo ang go dep.

SA: - Adunay usa ka butang bahin sa video sa hilisgutan sa taho, apan wala sa taho bahin sa video.

MS: – Dili, wala koy bisan unsa sa hilisgutan mahitungod sa video. Gitawag kini nga "Tan-awa +" - kana ang ngalan sa aplikasyon.

SA: - Giingon nimo nga kini gi-stream sa mga kliyente?..

MS: – Wala kami apil sa streaming nga video. Kini hingpit nga gihimo sa Megafon. Oo, wala ako nag-ingon nga ang aplikasyon mao ang MegaFon.

MS: – Lakaw – para sa pagpadala sa tanan nga data – sa score, sa duwa nga mga panghitabo, statistics... Go mao ang tibuok backend alang sa aplikasyon. Kinahanglan mahibal-an sa kliyente gikan sa usa ka lugar kung unsang link ang gamiton alang sa magdudula aron ang tiggamit makatan-aw sa duwa. Kami adunay mga link sa mga video ug mga sapa nga giandam.

Pipila ka mga ad 🙂

Salamat sa pagpabilin kanamo. Ganahan ka ba sa among mga artikulo? Gusto nga makakita og mas makapaikag nga sulod? Suportahi kami pinaagi sa pag-order o pagrekomenda sa mga higala, cloud VPS alang sa mga developers gikan sa $4.99, usa ka talagsaon nga analogue sa mga entry-level server, nga giimbento namo alang kanimo: Ang tibuok kamatuoran bahin sa VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps gikan sa $19 o unsaon pagpaambit sa usa ka server? (anaa sa RAID1 ug RAID10, hangtod sa 24 ka mga core ug hangtod sa 40GB DDR4).

Dell R730xd 2 ka beses nga mas barato sa Equinix Tier IV data center sa Amsterdam? Dinhi lang 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV gikan sa $199 sa Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - gikan sa $99! Basaha ang mahitungod sa Unsaon pagtukod sa infrastructure corp. klase sa paggamit sa Dell R730xd E5-2650 v4 server nga nagkantidad ug 9000 euros sa usa ka sentimos?

Source: www.habr.com

Idugang sa usa ka comment