Stair ár bhfoinse oscailte: conas a chuireamar seirbhís anailíse ar fáil in Go agus a chuireamar ar fáil go poiblí í

Faoi láthair, bailíonn beagnach gach cuideachta ar domhan staitisticí faoi ghníomhartha úsáideoirí ar acmhainn ghréasáin. Tá an spreagadh soiléir - teastaíonn ó chuideachtaí fios a bheith acu conas a úsáidtear a dtáirge/suíomh Gréasáin agus tuiscint níos fearr a fháil ar a n-úsáideoirí. Ar ndóigh, tá líon mór uirlisí ar an margadh chun an fhadhb seo a réiteach - ó chórais anailíse a sholáthraíonn sonraí i bhfoirm dashboards agus graif (mar shampla Google Analytics) chuig Ardán Sonraí Custaiméirí, a ligeann duit sonraí ó fhoinsí éagsúla a bhailiú agus a chomhiomlánú in aon stóras (mar shampla Mírlíne).

Ach fuaireamar fadhb nach bhfuil réitithe fós. Rugadh dá bhrí sin ImeachtNative — seirbhís anailíse foinse oscailte. Léigh faoin bhfáth ar shocraigh muid ár seirbhís féin a fhorbairt, cad a thug sé dúinn, agus cad é an toradh deiridh (le píosaí cód).

Stair ár bhfoinse oscailte: conas a chuireamar seirbhís anailíse ar fáil in Go agus a chuireamar ar fáil go poiblí í

Cén fáth ar chóir dúinn ár seirbhís féin a fhorbairt?

Na nóchaidí a bhí ann, mhair muid mar ab fhearr a d’fhéadfaimis. 2019, d'fhorbraíomar an Chéad Ardán Sonraí Custaiméara API kSense, rud a d'fhág gur féidir sonraí a chomhiomlánú ó fhoinsí éagsúla (fógraí Facebook, Stripe, Salesforce, Google play, Google Analytics, etc.) le haghaidh anailíse sonraí níos áisiúla, ag aithint spleáchais, etc. Thugamar faoi deara go n-úsáideann go leor úsáideoirí ár n-ardán le haghaidh anailíse sonraí go sonrach Google Analytics (GA anseo feasta). Labhair muid le roinnt úsáideoirí agus fuaireamar amach go dteastaíonn na sonraí anailíse dá dtáirge a fhaigheann siad ag baint úsáide as GA, ach Sonraí samplaí Google agus do go leor, níl an comhéadan úsáideora GA an caighdeán áise. Bhí go leor comhrá againn lenár n-úsáideoirí agus thuig muid go raibh go leor ag baint úsáide as an ardán Deighleog freisin (a bhí, dála an scéil, ach an lá eile díolta ar $3.2 billiún).

Shuiteáil siad picteilín javascript Deighleog ar a n-acmhainn gréasáin agus lódáladh sonraí faoi iompar a n-úsáideoirí isteach sa bhunachar sonraí sonraithe (postgres mar shampla). Ach tá a míbhuntáiste ag Deighleog freisin - an praghas. Mar shampla, má tá 90,000 MTU (úsáideoirí rianaithe míosúla) ag acmhainn gréasáin, ansin caithfidh tú ~1,000 $ in aghaidh na míosa a íoc leis an airgeadóir. Bhí an tríú fadhb ann freisin - chuir roinnt síntí brabhsálaí (cosúil le AdBlock) bac ar bhailiú na hanailíse toisc... Cuireadh iarratais http ón mbrabhsálaí chuig na fearainn GA agus Deighleog. Bunaithe ar mhianta ár gcliant, tá seirbhís anailíse cruthaithe againn a bhailíonn sraith iomlán sonraí (gan sampláil), atá saor in aisce agus is féidir oibriú ar ár mbonneagar féin.

Conas a oibríonn an tseirbhís

Tá trí chuid sa tseirbhís: picteilín javascript (a athscríobhamar níos déanaí sa chlóscríobh), cuirtear an chuid freastalaí i bhfeidhm sa teanga GO, agus bhí sé beartaithe Redshift agus BigQuery a úsáid mar bhunachar sonraí intí (chuir siad tacaíocht le haghaidh níos déanaí. Postgres, ClickHouse agus gcáithnínísneachta).

Socraíodh struchtúr imeachtaí an GA agus na Deighleog a fhágáil gan athrú. Ní raibh de dhíth ach gach imeacht a mhacasamhlú ón acmhainn gréasáin ina bhfuil an picteilín suiteáilte chuig ár n-innill. Mar a tharla sé, nach bhfuil sé seo deacair a dhéanamh. Sháraigh an picteilín Javascript an modh leabharlainne GA bunaidh le ceann nua, rud a rinne an t-imeacht a dhúbailt inár gcóras.

//'ga' - стандартное название переменной Google Analytics
if (window.ga) {
    ga(tracker => {
        var originalSendHitTask = tracker.get('sendHitTask');
        tracker.set('sendHitTask', (model) => {
            var payLoad = model.get('hitPayload');
            //отправка оригинального события в GA
            originalSendHitTask(model);
            let jsonPayload = this.parseQuery(payLoad);
            //отправка события в наш сервис
            this.send3p('ga', jsonPayload);
        });
    });
}

Leis an bpicteilín Deighleog tá gach rud níos simplí; tá modhanna meánearraí ann, ceann acu a d’úsáideamar.


//'analytics' - стандартное название переменной Segment
if (window.analytics) {
    if (window.analytics.addSourceMiddleware) {
        window.analytics.addSourceMiddleware(chain => {
            try {
		//дублирование события в наш сервис
                this.send3p('ajs', chain.payload);
            } catch (e) {
                LOG.warn('Failed to send an event', e)
            }
	    //отправка оригинального события в Segment
            chain.next(chain.payload);
        });
    } else {
        LOG.warn("Invalid interceptor state. Analytics js initialized, but not completely");
    }
} else {
    LOG.warn('Analytics.js listener is not set.');
}

Chomh maith le himeachtaí a chóipeáil, chuireamar leis an gcumas json treallach a sheoladh:


//Отправка событий с произвольным json объектом
eventN.track('product_page_view', {
    product_id: '1e48fb70-ef12-4ea9-ab10-fd0b910c49ce',
    product_price: 399.99,
    price_currency: 'USD'
    product_release_start: '2020-09-25T12:38:27.763000Z'
});

Next, a ligean ar labhairt faoi an chuid freastalaí. Ba cheart don inneall glacadh le hiarratais http, iad a líonadh le faisnéis bhreise, mar shampla, sonraí geo (go raibh maith agat aigne le haghaidh seo) agus taifead sa bhunachar sonraí é. Theastaigh uainn an tseirbhís a dhéanamh chomh háisiúil agus is féidir ionas gur féidir é a úsáid le cumraíocht íosta. Chuireamar i bhfeidhm an fheidhmiúlacht chun an scéimre sonraí a chinneadh bunaithe ar struchtúr an imeachta json ag teacht isteach. Sainmhínítear cineálacha sonraí ag luachanna. Déantar rudaí neadaithe a dhianscaoileadh agus a laghdú go struchtúr cothrom:

//входящий json
{
  "field_1":  {
    "sub_field_1": "text1",
    "sub_field_2": 100
  },
  "field_2": "text2",
  "field_3": {
    "sub_field_1": {
      "sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
    }
  }
}

//результат
{
  "field_1_sub_field_1":  "text1",
  "field_1_sub_field_2":  100,
  "field_2": "text2",
  "field_3_sub_field_1_sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}

Mar sin féin, faoi láthair tá arrays thiontú go simplí go teaghráin mar gheall ar Ní thacaíonn gach bunachar sonraí gaolmhar le réimsí arís agus arís eile. Is féidir freisin ainmneacha páirce a athrú nó iad a scriosadh trí úsáid a bhaint as rialacha roghnacha mapála. Ligeann siad duit scéimre na sonraí a athrú más gá nó cineál sonraí amháin a thiontú go ceann eile. Mar shampla, má tá teaghrán le stampa ama i réimse json (réimse_3_sub_réimse_1_sub_sub_field_1 ón sampla thuas), ansin chun réimse a chruthú sa bhunachar sonraí leis an gcineál stampa ama, ní mór duit riail mapála a scríobh sa chumraíocht. I bhfocail eile, déantar cineál sonraí an réimse a chinneadh ar dtús ag an luach json, agus ansin cuirtear an riail réitigh cineál (má tá sé cumraithe). Tá 4 phríomhchineál sonraí aitheanta againn: STRING, FLOAT64, INT64 agus TIMESTAMP. Breathnaíonn na rialacha mapála agus cineál-réitigh mar seo:

rules:
  - "/field_1/subfield_1 -> " #правило удаления поля
  - "/field_2/subfield_1 -> /field_10/subfield_1" #правило переноса поля
  - "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #правило переноса поля и приведения типа

Algartam chun an cineál sonraí a chinneadh:

  • struchtúr json a thiontú go struchtúr cothrom
  • cineál sonraí na réimsí a chinneadh de réir luachanna
  • rialacha mapála agus cineál-réitigh a chur i bhfeidhm

Ansin ón struchtúr json ag teacht isteach:

{
    "product_id":  "1e48fb70-ef12-4ea9-ab10-fd0b910c49ce",
    "product_price": 399.99,
    "price_currency": "USD",
    "product_type": "supplies",
    "product_release_start": "2020-09-25T12:38:27.763000Z",
    "images": {
      "main": "picture1",
      "sub":  "picture2"
    }
}

gheofar an scéimre sonraí:

"product_id" character varying,
"product_price" numeric (38,18),
"price_currency" character varying,
"product_type" character varying,
"product_release_start" timestamp,
"images_main" character varying,
"images_sub" character varying

Shíleamar freisin gur cheart go mbeadh an t-úsáideoir in ann sonraí a dheighilt nó a roinnt sa bhunachar sonraí a chumrú de réir critéar eile agus chuir sé i bhfeidhm an cumas ainm an tábla a shocrú le tairiseach nó léiriú sa chumraíocht. Sa sampla thíos, sábhálfar an t-imeacht go tábla le hainm a ríomhtar bunaithe ar luachanna na réimsí product_type agus _timestamp (mar shampla soláthairtí_2020_10):

tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'

Mar sin féin, is féidir le struchtúr na n-imeachtaí ag teacht isteach athrú ag am rite. Tá algartam curtha i bhfeidhm againn chun an difríocht idir struchtúr tábla atá ann cheana agus struchtúr imeachta ag teacht isteach a sheiceáil. Má aimsítear difríocht, déanfar an tábla a nuashonrú le réimsí nua. Chun é seo a dhéanamh, bain úsáid as an gceist SQL paiste:

#Пример для Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying

ailtireacht

Stair ár bhfoinse oscailte: conas a chuireamar seirbhís anailíse ar fáil in Go agus a chuireamar ar fáil go poiblí í

Cén fáth ar gá duit imeachtaí a scríobh chuig an gcóras comhad, agus gan iad a scríobh go díreach chuig an mbunachar sonraí? Ní fheidhmíonn bunachair shonraí go maith i gcónaí agus iad ag déileáil le líon mór ionchuir (Moltaí Postgres). Chun seo a dhéanamh, scríobhann Logger imeachtaí ag teacht isteach chuig comhad agus i goroutine ar leith (snáithe) Léann léitheoir comhaid an comhad, ansin déantar na sonraí a thiontú agus a chinneadh. Tar éis don bhainisteoir Tábla a chinntiú go bhfuil an scéimre tábla cothrom le dáta, scríobhfar na sonraí chuig an mbunachar sonraí i mbaisc amháin. Ina dhiaidh sin, chuireamar leis an gcumas sonraí a scríobh go díreach chuig an mbunachar sonraí, ach úsáidimid an modh seo le haghaidh imeachtaí nach bhfuil iomadúla - mar shampla, tiontuithe.

Foinse Oscailte agus pleananna don todhchaí

Ag pointe éigin, thosaigh an tseirbhís ag breathnú cosúil le táirge lán-chuimsitheach agus shocraigh muid é a scaoileadh chuig Foinse Oscailte. Faoi láthair, tá comhtháthú le Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake curtha i bhfeidhm. Tacaíonn gach comhtháthú le modhanna baisce agus sruthaithe de luchtú sonraí. Tacaíocht breise d'iarratais trí API.

Breathnaíonn an scéim chomhtháthaithe reatha mar seo:

Stair ár bhfoinse oscailte: conas a chuireamar seirbhís anailíse ar fáil in Go agus a chuireamar ar fáil go poiblí í

Cé gur féidir an tseirbhís a úsáid go neamhspleách (mar shampla ag baint úsáide as Docker), ní mór dúinn freisin leagan óstach, inar féidir leat comhtháthú a shocrú le stóras sonraí, CNAME a chur le d'fhearann ​​agus féachaint ar staitisticí ar líon na n-imeachtaí. Is é ár bpleananna láithreach an cumas a chur le chéile ní hamháin staitisticí ó acmhainn gréasáin, ach freisin sonraí ó fhoinsí seachtracha sonraí agus iad a shábháil ar aon stóráil de do rogha féin!

→ GitHub
→ Doiciméadú
→ Dríodair

Beidh áthas orainn má chuidíonn EventNative le do chuid fadhbanna a réiteach!

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

Cén córas bailithe staitisticí a úsáidtear i do chuideachta?

  • 48,0%Google Analytics12

  • 4,0%Deighleog1

  • 16,0%Eile (scríobh sna tuairimí)4

  • 32,0%Cuireadh do sheirbhís i bhfeidhm8

Vótáil 25 úsáideoir. Staon 6 úsáideoir.

Foinse: will.com

Add a comment