Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Mikhail Salosin (inferius – MS); - Hi omnes! Michael mihi nomen est. Ut elit retrocedens in Software MC2 laboro, et loqui utens Vade in applicatione spectaculi+ mobilis.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Num quis hic similis hockey?

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Inde ad te haec applicatio est. Android et iOS est et in missione variarum rerum ludicrarum online ac notata spectare adhibetur. Applicatio etiam varias statisticos, textus radiophonicos, tabulas pro colloquiis, torneamenta et alia informationes fans utiles continet.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Etiam in applicatione talis res est ut momenta video, i.e. momenta rerum maximarum spectare potes (metas, pugnas, sagittas, etc.). Si totum passim vigilare non vis, solum amoenissimas res spectare potes.

Quid uteris in progressionem?

Praecipua pars scripta est in Go. API qui clientes mobiles communicaverunt cum Go scriptum est. Ministerium mittendi notificationes pulsus ad praecipue telephoniis gestabilibus etiam in Go scriptum est. Debuimus etiam scribere nostra ORM, quae aliquando loquimur. Bene, nonnulla parva officia in Go scripta sunt: ​​imagines resisiendi et onerandi editoribus...

PostgreSQL usi sumus sicut in database. Editor instrumenti in Ruby in Rails utens gemma ActiveAdmin scripta est. Importatio statistica ex provisore statistica etiam in Ruby scriptum est.

Nam ratio API probat, Python unitati sumus usi. Memcached suffocare API mercedem vocat, "Chef" ad configurationem regere adhibetur, Zabbix usus est ad colligendos et monitores systematis interni mutant. Graylog2 est ad ligna colligenda, tabula API documenta clientium est.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Protocollum lectio

Primam quaestionem invenimus: opus est eligere protocollum ad commercium inter clientes backendi et mobiles, innixa sequentibus punctis...

  • Maxima postulatio: notitia clientium in reali tempore renovari debet. Hoc est, omnes qui in praesens tempus spectant radiophonicum iacientes ut fere statim recipiant updates.
  • Ad res simpliciores, supposuimus notitias cum clientibus synchronised non delevisse, sed occulta vexillis specialibus uti.
  • Omnia genera rarae petitiones (ut mutant, turmae compositiones, turma mutant) impetrata ab ordinariis petitionibus GET.
  • Plus, ratio 100 milia utentium simul facile sustentat.

Ex hoc duo protocollo optiones habuimus:

  1. Websockets. Sed canales a cliente servo non indigemus. Tantum opus est ut updates ex servo ad clientem mitteret, ergo optio telae superuacans est.
  2. Servo-Sent Events (SSE) iustus ius ascendit! Simplex est et fundamentaliter omnia quae opus sunt nobis satisfacit.

Servo-missa Events

Paucis verbis quomodo res haec operatur.

Is super http nexum decurrit. Cliens petitionem mittit, server respondet cum Content-Type: text/event-amnis et nexum cum cliente non claudit, sed nexui notitias scribere pergit;

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Data mitti possunt in forma cum clientibus pacta. In nostro casu eam in hac forma misimus: nomen mutatae structurae (personae, lusoris) ad eventum campi missum est, et JSON cum novis, mutatis agris pro scaenicis ad agrum campum missum est.

Nunc fama quomodo ipsa commercium operatur.

  • Primum clientem facit ultimum tempus synchronisationi cum officio peractum determinat: spectat ad datorum localium et determinat diem ultimae mutationis ab eo commemoratae.
  • Is rogatu diem emittit.
  • Respondentes ei mittimus omnes renovationes, quae ab illo tempore factae sunt.
  • Deinde, nexum efficit ad alveum vivam nec claudit donec his updates eget:

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Huic mutationum index ei mittimus: si quis metam pereuntis, si laesum par mutamus, hoc etiam tempore reali mittitur. Ita clientes statim datas ut- balanus recipiant in par eventu cibarium. Periodice, ut cliens intelligat servum non esse mortuum, nihil ei accidisse, indicationem 15 secundis singulis mittimus — ut sciat omnia in ordine esse et reconnect opus non esse.

Quid est muneris nexus vivere?

  • Imprimis canalem efficimus in quem updates buffered recipientur.
  • Deinde hunc canalem ad recipiendas updates subscribimus.
  • Rectam header constituimus ut client sciat omnia bene esse.
  • Primus mitte ping. Non solum hodiernam nexum indicatione temporis notare.
  • Post hoc ab canali ansa usque ad renovationem clauditur. Canalis periodice accipit vel indicationem hodiernam vel mutationes quas iam scribemus ad nexus apertos.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Primum problema quod invenimus talis fuit: nam unumquemque nexum cum cliente apertum creavimus timerem qui semel in singulis 15 secundis ticked - evenit ut si quinque milia nexus cum una machina (uno API servo) 6 haberemus. milia timers creati sunt. Inde ad machinam onus quaesitum non tenentes. Quaestio non fuit nobis manifesta, sed parum auxilii cepimus et fixum est.

Quam ob rem nunc nostra ping ex eodem alveo venit unde renovatio venit.

Proinde unum tantum timer, quod semel ricini singulis 15 secundis.

Plures functiones auxiliares hic sunt mittens caput, ping et structura ipsa. Id est, nomen mensae (personae, par, temporis) et informationes de hoc ingressu huc transmittuntur;

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Mechanica mittendi updates

Nunc paulo verterem quo ex. Plures habemus editores, qui in tempore reali passim observant. Omnia certe efficiunt: aliquis dimissus est, aliquis laesus, quaedam reponenda...

Usus CMS, notitia datorum ingreditur. Post hoc, datorum notificat API servers de hoc utendo audi/Notify mechanismum. API servientes hanc informationem clientibus iam mittunt. Ita nos essentialiter paucos tantum ministros cum datorum connexos habemus et nullum speciale onus datorum est, quia cliens nullo modo cum datorum directe se agit:

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

PostgreSQL audi / Notify

Audi/Notify mechanismum in Postgres sinit te subscribentium eventus certiorem facere aliquem eventum mutatum - recordum aliquod in database creatum esse. Ad hoc faciendum felis et munus simplex scripsimus;

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Cum testimonium inserendo vel mutando, munus certiorem vocamus in data_updates canalis, ibi transeuntes nomen tabulae et identifier recordi mutati vel inserti.

Omnes enim tabulae quae cum cliente congruere debent, felis definimus, quae, mutato / adaequationis instrumento, munus appellat infra lapsus indicatum.
Quomodo API subscribunt has mutationes?

Mechanismus Fanout creatur - nuntios mittit ad clientem. Omnes rivos emptoris colligit et renovat per hos canales receptas mittit:

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Hic norma bibliothecae pq, quae datorum conectitur et dicit eam audire velle canalem (data_updates), impedit nexum apertum esse et omnia denique esse. Ego reprehendo omisso errore spatium servare (non reprehendo periculosum est).

Deinde asynchronose Ticker ponemus, quod ping singulas 15 secundas mittemus, et auscultare incipimus canalem cui nos subscripsimus. Si pingam accipimus, hanc pingem edimus. Si aliquam ingressum recipimus, hunc ingressum omnibus signatoribus Fanout huius evulgamus.

Quomodo fan opus?

Hoc in Russian vertit ut "scissura". Unum habemus obiectum signatores registrales qui aliquas renovationes recipere volunt. Quam primum renovatio ad hanc rem pervenit, hanc renovationem omnibus suis subscribentibus distribuit. Simplex satis;

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Quomodo suus in Go:

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Est structura, Mutexes synchronised usus. Agrum habet, qui statum Connexionis Fanout salvat cum datorum, i.e., nunc auscultat et recipiet updates, ac indicem omnium canalium - tabularum, cuius clavis est canalis et forma instructus. valores (per se non ullo modo usi sunt).

Duo modi - Connexum et Disiunctus - nos sinunt dicere Fanout nos nexum habere ad basim, apparuit et nexum cum basi fractum esse. In secundo casu, debes omnes clientes disiungere et dicere eis quod nihil amplius audire possunt et se reconnect quia nexus illis claudit.

Est etiam ratio subscribenda, quae canalem ad auditores adiungit;

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Subscribe methodus, quae canalem ab auditoribus removet si client disiungit, necnon methodus publicata, quae nuntium omnibus subscribentibus mittere sinit.

quaestionem: - Quid per hunc canalem transmittitur?

MS: - Exemplar quod mutatum seu ping transmittitur (per se iustus numerus, integer).

MS: – Potes aliquid mittere, aliquam structuram mittere, eam divulgare – modo in JSON vertit et hoc est.

MS: - Nos a Postgres notificationem accipimus - continet tabulam nomen et identifier. Nomen ac identifier in mensa fundatur, recordum quod opus habemus, ac deinde hanc structuram pro publicatione mittimus.

infrastructure

Quid hoc simile ex prospectu infrastructure? Servientes 7 ferramenta habemus: unum ex eis totaliter datorum datorum, alterum sex machinis virtualis currunt. Exstant 6 exemplaria API: unaquaeque machina virtualis cum API discurrit in servis ferrariis separatis - hoc est ad constantiam.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Duas frontes habemus cum custodia constituto ad accessibilitatem emendandam, ut si quid acciderit, unum frontem alteram substituere possit. Item duo exemplaria CMS.

Est etiam statistica importor. Est DB servus e quo tergum fiunt periodice. Est Columba Pusher, applicatio quae notificationes clientibus dis mittit, ac res infrastructuras: Zabbix, Graylog2 et Chef.

Re vera haec infrastructura superuacua est, quia centum milia cum paucioribus servientibus ministrari possunt. Sed erat ferrum - usi sumus (fuimus enim id fieri posse - cur non).

Pros of Go

Postquam in hac applicatione laboravimus, tam manifesta commoda Go emerserunt.

  • Cool http library. Cum eo ex arca satis multa creare potes.
  • Plus, canales, qui nobis permiserunt ut machinam facillime efficiant ad notificationes clientium mittendis.
  • Mirum est quod Race detector complures cimices criticos eliminare nobis permisit (sagitandi infrastructuram). Omne quod agit in choragium emittitur, cum Race clavis compilata; Nos igitur infrastructuram choragiam spectare possumus videre quaenam problemata potentia habeamus.
  • Minimalismus et linguae simplicitas.

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

Quaerimus tincidunt! Si quis vult, placet.

quaestiones

Quaestio ex auditorio (infra – B): – Mihi videtur te unum momentum desiderari de Fan-out. Sumne recte intelligendo quod cum responsionem clienti mittis, obstruas si cliens legere non vult?

MS: - Minime, non impedimus. In primis habemus haec omnia post nginx, id est, nullae sunt difficultates clientium lentorum. Secundo canalem habet cum quiddam - re vera ad centum updates ibi ferre possumus... Si canalem scribere non possumus, delet illud. Si canalem impediri videmus, tunc canalem simpliciter claudemus, et id est - reconnect erit si aliqua quaestio oriatur. Ergo in principio non est hic interclusio.

IN: – Potuitne fieri ut statim testimonium mittere audi/Notify, et non mensa identifier?

MS: - Audi/Notify habet modum 8 milium bytes in preload quod emittit. In principio, si ageremus parva notitia, posset mittere, sed hoc modo simpliciter certius mihi videtur. Limites sunt in ipsum Postgres.

IN: - Do clientes recipiant updates in par quod non sunt interested in?

MS: — Fere, sic. Pro regula, 2-3 compositus in parallela, tum etiam raro admodum. Si clientis aliquid aspicit, tunc solet aspicit in rebus quae geruntur. Deinde client locum datorum habet, in quem omnes hae updates additae sunt, et etiam sine interreti nexu, cliens omnes praeteritos par pro quibus updates habet inspicere potest. Essentialiter, nostrum datorum synchronum in server cum database locali clientis ut offline laborare possit.

IN: - Cur ORM tuum fecisti?

Alexey (unus e tincidunt of Aspice+); – Eo tempore (erat annus ante) pauciores ORMs erant quam nunc, cum eorum admodum multae sunt. My favorite thing about most ORMs out there is that most of them run on empty interfaces. Id est, methodi in his ORMs parati sunt ad aliquid suscipiendum: structuram, structuram monstratorem, numerum, rem prorsus nihili...

Noster ORM structuras in notitia exemplaris gignit. Me ipsum. Omnes igitur methodi sunt concretae, reflexione non utuntur, structuras accipiunt et exspectant ut iis quae obveniunt structuris.

IN: - Quam multi interfuit?

MS: – Ad initium, duo homines interfuerunt. Alicubi mense Iunio incepimus, et in Augusto summa pars parata erat (prima versio). Dimissio facta est mense Septembri.

IN: – Ubi dicis SSE, non uteris timeout. Cur est?

MS: – Ut honestum sit, SSE protocollum adhuc html5 est: vexillum SSE communicare cum navigatoribus, quantum intelligo, destinatur. Additamenta habet ut navigatores reconnect (et sic porro), sed illis non indigemus, quia clientes habuimus qui rationem connectendi et recipiendi informationem quamlibet efficere potuerunt. Non fecimus SSE, sed potius simile quid SSE. Hoc non est ipsum protocollum.
Nullam eget erat. Quantum intelligo, clientes nexum mechanismum paene ex integro impleverunt. Non vere curare.

IN: - Quid additional utilitates tu uteris?

MS: – Nos acerrime govet et golinte usi sumus ad stylum unitum, necnon gofmt. Nihil aliud est usus.

IN: - Quid uteris lusione?

MS: - Debugging magna ex parte usus probat. Quovis debugger vel GOP non usi sumus.

IN: – Potesne referre lapsus ubi munus publicum impletur? Num singulae litterae variabiles nomina te confundunt?

MS: — Haud. Habent scopum satis "angum" visibilitatis. non alibi quam hic (exceptis internis hujus generis), et valde compacti sunt, modo 7 lineas capit.

IN: – Nescio quomodo adhuc non est intuitiva...

MS: - Non, non, hic verus codice! Praesent non turpis. Tam utile est, perexiguum genus - tantum 3 agri intra classis...

Mikhail Salosin. Golang Meetup. Using Go in backend of the Look+ application

MS: – Per et magna, omnes notitias quae cum clientibus synchronised (tempus congruit, histriones) non mutat. Dure loquendo, si alium lusum facimus in quo par mutare opus est, simpliciter omnia in nova clientis versione rationem habebimus, et in veteribus huius versionibus interdictum erit.

IN: - Suntne aliqua tertia pars dependentiae in administratione fasciculorum?

MS: - Ivimus dep.

IN: – Aliquid de video in themate relationis, sed nihil erat in fama de video.

MS: – Imo nihil habeo in re de video. Vocatur "Ecce+" - id est nomen applicationis.

IN: – Dixisti clientibus manasse?...

MS: – Nos in effusis video implicati non sumus. Hoc totum factum est a Megafon. Ita non dixi applicationem MegaFon esse.

MS: – Ite – pro omnibus notitias mittendis – in nomine, in par rerum, mutant... Ite est tota in applicatione backend. Cliens scire debet alicunde quo nexus utatur pro ludio ludius ut utentis parem spectare possit. Nexus ad videos et rivos praeparatos habemus.

Quidam ads

Gratias tibi ago pro manendo nobiscum. Placetne tibi vasa nostra? Vis videre plus interesting contentus? Suscipe nos ponendo ordinem vel commendando amicos; cloud VPS for developers from $4.99, unicum analogum de ingressu servientibus, quod a nobis pro vobis est inventum: Tota veritas de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps e $19 vel quomodo ministrator communicabit? (praesto cum RAID1 et RAID10, usque ad 24 coros et usque ad 40GB DDR4).

Dell R730xd 2x vilius in Equinix Tier IV centri Amstelodami? Tantum hic 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV from $199 in Belgio! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - from $99! Read about Quomodo aedificare infrastructuras: Ed. classis cum usu Dell R730xd E5-2650 v4 servientibus valet 9000 nummis Europaeis?

Source: www.habr.com

Add a comment