E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast

I lenei tusiga o le a tatou talanoa e uiga i le auala ma pe aisea na tatou atiina ae ai Faiga Fesootaiga – ose faiga e fa'aliliu ai fa'amatalaga i le va o talosaga a tagata o tausia ma le 1C: Enterprise servers - mai le fa'atulagaina o se galuega i le mafaufau i le fausaga ma fa'amatalaga fa'atinoga.

O le Fe'au Feso'ota'iga (e ta'ua mulimuli ane o le SV) ose faiga fe'au fa'asoa, fa'apalepale fa'aletonu ma fa'amaonia le tu'uina atu. SV ua mamanuina e avea o se auaunaga maualuga-avega ma maualuga scalability, avanoa e lua o se auaunaga i luga o le initaneti (tuuina atu e le 1C) ma o se oloa gaosia tele e mafai ona faʻapipiʻiina i luga o au lava nofoaga faʻapipiʻi.

SV fa'aogaina le teuina fa'asoa hazelcast ma masini su'esu'e Elasticsearch. O le a tatou talanoa foi e uiga ia Java ma le auala tatou te fuaina ai le PostgreSQL.
E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast

Fausiaina o le faʻafitauli

Ina ia faʻamalamalama manino pe aisea na matou faia ai le Faiga Faʻafesoʻotaʻi, o le a ou taʻu atu ia te oe se mea itiiti pe faʻafefea ona galue le atinaʻeina o pisinisi i le 1C.

Muamua, o sina mea itiiti e uiga ia i matou mo i latou e le o iloa mea matou te faia :) O loʻo matou faia le 1C: Enterprise technology platform. O le faʻavae e aofia ai se meafaigaluega faʻapitoa mo le atinaʻeina o pisinisi, faʻapea foʻi ma se taʻaloga e mafai ai ona faʻatautaia pisinisi pisinisi i totonu o se siosiomaga faʻasolosolo.

Fa'ata'ita'iga o le atina'eina o tagata-'au'auna

Pisinisi talosaga na faia i luga ole 1C:O pisinisi e fa'agaoioia ile tolu-tulaga client-server fausaga “DBMS – server application – client”. Talosaga code tusia i totonu fausia i totonu ole gagana 1C, e mafai ona faʻatinoina i luga o le server talosaga poʻo luga ole kalani. O galuega uma ma mea faʻaoga (faʻatonu, pepa, ma isi), faʻapea foʻi ma le faitau ma le tusiaina o faʻamaumauga, e naʻo le server e faia. O le faʻatinoga o fomu ma faʻatonuga faʻatonu o loʻo faʻatinoina foi i luga o le server. O loʻo faʻatinoina e le kalani le mauaina, tatalaina ma faʻaalia fomu, "fesoʻotaʻi" ma le tagata faʻaoga (lapataiga, fesili ...), faʻatusatusaga laiti i fomu e manaʻomia ai se tali vave (mo se faʻataʻitaʻiga, faʻateleina le tau i le aofaʻi), galue ma faila i le lotoifale, galue ma meafaigaluega.

I le numera o talosaga, o ulutala o taualumaga ma galuega e tatau ona faʻaalia manino le mea o le a faʻatinoina ai le code - faʻaaoga le &AtClient / &AtServer faʻatonuga (&AtClient / &AtServer i le gagana Peretania). 1C developers o le a faasaʻoina aʻu i le fai atu o faʻatonuga e moni lava sili atu, ae mo i tatou e le taua lenei mea i le taimi nei.

E mafai ona e vili le code server mai le code client, ae e le mafai ona e vili le code client mai le server code. O se tapula'a fa'avae lea na matou faia mo le tele o mafua'aga. Aemaise lava, ona e tatau ona tusia le code server i se auala e faʻatino ai le auala lava e tasi e tusa lava po o fea e valaʻau ai - mai le kalani poʻo mai le server. Ma i le tulaga o le valaʻau i le code server mai se isi code server, e leai se tagata faʻatau faapena. Ma talu ai i le taimi o le faʻatinoina o le code server, e mafai e le kalani na valaʻau i ai ona tapunia, alu ese mai le talosaga, ma o le a le toe i ai se tasi e valaʻau i le server.

E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast
Fa'ailoga e fa'aogaina ai le kiliki o le ki: o le vala'au i se faiga fa'aumau mai le kalani o le a aoga, o le vala'au i se fa'ata'ita'iga a le tagata fa'atau mai le server o le a le aoga.

O lona uiga afai matou te mananaʻo e lafo se feʻau mai le server i le talosaga a le kalani, mo se faʻataʻitaʻiga, ua maeʻa le faʻatupuina o se lipoti "umi" ma e mafai ona vaʻaia le lipoti, matou te le maua se auala faapena. E tatau ona e faʻaogaina togafiti, mo se faʻataʻitaʻiga, palota i lea taimi ma lea taimi le server mai le code client. Ae o lenei faiga e utaina ai le faiga i telefoni e le manaʻomia, ma e masani lava e le foliga matagofie tele.

Ma e iai foʻi se manaʻoga, mo se faʻataʻitaʻiga, pe a oʻo mai se telefoni mitimiti- pe a faia se telefoni, logoina le tagata o tausia le talosaga e uiga i lenei mea ina ia mafai ona faʻaogaina le numera o le tagata valaʻau e suʻe ai i totonu o le database database ma faʻaali atu i le tagata faʻaoga faʻamatalaga e uiga i le telefoni feaveaʻi. Po'o, mo se fa'ata'ita'iga, pe a o'o mai se fa'atonuga i le faleteuoloa, logoina le talosaga a le tagata fa'atau e uiga i lenei mea. I se tulaga lautele, e tele tulaga e aoga ai sea masini.

Le gaosiga lava ia

Fausia se masini fe'au. Saosaoa, faʻatuatuaina, faʻatasi ai ma le faʻamaonia o le tuʻuina atu, faʻatasi ai ma le gafatia e suʻe feʻau mo feʻau. Faʻavae i luga o le masini, faʻatino se avefeʻau (feʻau, telefoni vitio) o loʻo faʻaogaina i totonu ole 1C talosaga.

Fuafua le faiga ina ia mafai ona fuaina faalava. O le faʻateleina o le uta e tatau ona ufiufi e ala i le faʻateleina o numera o nodes.

Реализация

Na matou filifili e le tuʻufaʻatasia saʻo le vaega o le SV i totonu o le 1C: Enterprise platform, ae ia faʻatinoina o se oloa e ese mai, o le API e mafai ona valaʻau mai le code of 1C application solutions. Na faia lenei mea mo le tele o mafuaʻaga, o le mea autu na ou manaʻo e faʻafeiloaʻi feʻau i le va o talosaga 1C eseese (mo se faʻataʻitaʻiga, i le va o Fefaʻatauaʻiga ma le Tausitusi). Eseese 1C talosaga e mafai ona faʻatautaia i luga o faʻasalalauga eseese o le 1C: Enterprise platform, faʻapipiʻi i luga o sapalai eseese, ma isi. I ia tulaga, o le faʻatinoina o le SV o se oloa tuʻufaʻatasia o loʻo i "i le itu" o faʻapipiʻi 1C o le fofo sili lea.

O lea, na matou filifili ai e fai le SV o se oloa ese. Matou te fautuaina e faʻaaoga e kamupani laiti le CB server na matou faʻapipiʻiina i totonu o la matou ao (wss://1cdialog.com) e aloese ai mai le faʻaogaina o tau e fesoʻotaʻi ma le faʻapipiʻiina ma le faʻatulagaina o le server. E ono maua e tagata fa'atau tele e fa'apipi'i a latou lava CB server i latou fale. Na matou faʻaogaina se auala faʻapena i la matou oloa SaaS ao 1c fou - e gaosia e avea o se oloa gaosia tele mo le faʻapipiʻiina i nofoaga o tagata faʻatau, ma o loʻo faʻapipiʻiina foi i la tatou ao https://1cfresh.com/.

Talosaga

Ina ia tufatufaina atu le avega ma le faʻapalepale faʻaletonu, matou te le faʻapipiʻiina le tasi Java talosaga, ae o le tele, faʻatasi ai ma le paleni o uta i luma o latou. Afai e te manaʻomia le faʻaliliuina o se feʻau mai le node i le node, faʻaaoga le lolomi / lesitala i le Hazelcast.

Feso'ota'iga i le va o le kalani ma le 'au'aunaga e ala i websocket. E fetaui lelei mo faiga masani.

Fa'asoa fa'aoga

Na matou filifilia i le va o Redis, Hazelcast ma Ehcache. O le 2015. Redis faatoa tatalaina se fuifui fou (fou fou, taufaafefe), o loʻo i ai Sentinel ma le tele o tapulaʻa. Ehcache e le iloa pe faʻafefea ona faʻapipiʻi i totonu o se fuifui (o lenei gaioiga na faʻaalia mulimuli ane). Na matou filifili e faataitai i le Hazelcast 3.4.
Ua fa'apotopotoina Hazelcast i se fuifui mai le pusa. I le tasi node mode, e le aoga tele ma e mafai ona faʻaaogaina o se faʻaoga - e le iloa pe faʻafefea ona lafo faʻamaumauga i le disk, afai e te leiloa naʻo le node, e te leiloa faʻamaumauga. Matou te faʻapipiʻiina le tele o Hazelcasts, i le va o loʻo matou faʻasaoina ai faʻamatalaga taua. Matou te le faʻapolopolo le faʻaoga - matou te le popole i ai.

Mo i matou, o Hazelcast o le:

  • Teuina o sauniga a tagata fa'aoga. E umi se taimi e alu ai i le database mo se sauniga i taimi uma, o lea matou te tuʻuina uma sauniga i Hazelcast.
  • Cache. Afai o loʻo e suʻeina se faʻamatalaga faʻaoga, siaki le cache. Tusia se fe'au fou - tu'u i totonu o le fa'aoga.
  • Autu mo feso'ota'iga i le va o fa'ata'ita'iga. O le node e fa'atupu ai se mea na tupu ma tu'u i le autu o le Hazelcast. O isi nodes talosaga e saofagā i lenei autu e maua ma fa'agasolo le mea na tupu.
  • Loka fa'apipi'i. Mo se faʻataʻitaʻiga, matou te fatuina se talanoaga e faʻaaoga ai se ki tulaga ese (talanoaga taʻitasi i totonu o le 1C database):

conversationKeyChecker.check("БЕНЗОКОЛОНКА");

      doInClusterLock("БЕНЗОКОЛОНКА", () -> {

          conversationKeyChecker.check("БЕНЗОКОЛОНКА");

          createChannel("БЕНЗОКОЛОНКА");
      });

Na matou siaki e leai se auala. Sa matou ave le loka, toe siaki, ma faia. Afai e te le siakiina le loka pe a uma ona ave le loka, ona i ai lea o se avanoa e siaki ai foi se isi filo i lena taimi ma o le a taumafai nei e fai le talanoaga lava e tasi - ae ua uma ona i ai. E le mafai ona e lokaina i le fa'aogaina o le java Lock fa'atasi pe masani. E ala i le database - e telegese, ma o se faanoanoaga mo le database; e ala i Hazelcast - o le mea lena e te manaʻomia.

Filifilia o se DBMS

E tele a matou poto masani e galulue ai ma PostgreSQL ma galulue faʻatasi ma le au atiaʻe o lenei DBMS.

E le faigofie i se vaega PostgreSQL - e iai XL, XC, Citus, ae i se tulaga lautele e le o ni NoSQLs e faʻasolo ese mai le pusa. Matou te leʻi manatu i le NoSQL o le teuina autu; na lava na matou aveina Hazelcast, lea matou te leʻi galulue ai muamua.

Afai e te manaʻomia le fuaina o se database database, o lona uiga vaevaega. E pei ona e iloa, faʻatasi ai ma le sharding matou te vaevaeina le database i ni vaega eseese ina ia mafai ona tuʻuina i latou taʻitasi i luga o se isi server.

O le lomiga muamua o la matou sharding na fa'apea le mafai ona tufatufa atu laulau ta'itasi o la matou talosaga i luga o 'au'aunaga eseese i vaega eseese. E tele fe'au i luga o le server A - fa'amolemole, se'i o tatou si'i se vaega o lenei laulau i le server B. O lenei fa'ai'uga na na'o le alaga e uiga i le vave vave, o lea na matou filifili ai e fa'atapula'a i matou i le tele o tagata mautotogi.

E mafai ona e faitau e uiga i le tele o tagata mautotogi, mo se faʻataʻitaʻiga, i luga o le upega tafaʻilagi Citus Data.

SV o loʻo i ai faʻamatalaga o le faʻaoga ma le tagata fai saofaga. O se talosaga o se faʻapipiʻi faʻapitoa o se pisinisi pisinisi, e pei o le ERP poʻo le Accounting, ma ona tagata faʻaoga ma faʻamatalaga pisinisi. O le tagata fai saofaga o se faʻalapotopotoga poʻo se tagata e avea ma sui o loʻo lesitalaina le talosaga i le SV server. E mafai e le tagata fai saofaga ona tele tusi talosaga e resitalaina, ma o nei tusi talosaga e mafai ona fesuiai fe'au ma isi. Na avea le tagata fai saofaga ma tagata mautotogi i la matou polokalama. O fe'au mai le tele o le au fai saofaga e mafai ona maua i totonu o fa'amaumauga fa'aletino e tasi; afai matou te vaʻaia ua amata ona faʻatupuina e le tagata fai saofaga le tele o fefaʻatauaiga, matou te faʻanofoina i se faʻamaumauga faʻapitoa faʻapitoa (poʻo se isi server database).

E iai la matou fa'amaumauga autu e teu ai se laulau fa'ata'ita'i ma fa'amatalaga e uiga i le nofoaga o fa'amaumauga uma a le au fai saofaga.

E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast

Ina ia puipuia le autu autu mai le avea ma se fagu, matou te teuina le laulau o auala (ma isi faʻamatalaga e manaʻomia soo) i totonu o se pusa.

Afai e amata fa'agesegese le fa'amaumauga a le tagata fai saofaga, o le a matou tipiina i ni vaega i totonu. I isi poloketi matou te faʻaaogaina pg_pathman.

Talu ai o le leiloa o fe'au fa'aoga e leaga, matou te tausia a matou fa'amaumauga ma fa'atusa. O le tu'ufa'atasiga o fa'asologa fa'atasi ma asynchronous e fa'atagaina oe e fa'amautinoa oe pe a leiloa le fa'amaumauga autu. E na'o le leiloa o fe'au e tupu pe a le manuia le fa'amaumauga muamua ma lona fa'atusa fa'atasi.

Afai e leiloa se fa'atusa fa'atasi, o le fa'atusa a synchronous o le a fa'atasi.
Afai e leiloa le fa'amaumauga autu, o le fa'asologa fa'atasi e avea ma fa'amaumauga autu, ma o le asynchronous replica e avea ma fa'asologa fa'atasi.

Elasticsearch mo su'esu'ega

Talu ai, faatasi ai ma isi mea, o le SV foi o se avefeau, e manaʻomia ai se suʻesuʻega vave, faigofie ma fetuutuunai, faʻatatau i le morphology, faʻaaogaina le fetaui lelei. Na matou filifili e le toe faʻaleleia le uili ma faʻaoga le suʻesuʻega saoloto Elasticsearch, faia faʻavae i luga o le faletusi Lucene. Matou te faʻapipiʻiina foʻi le Elasticsearch i totonu o se fuifui (matai - faʻamaumauga - faʻamaumauga) e faʻaumatia ai faʻafitauli pe a tupu le toilalo o nodes talosaga.

I luga ole github na matou maua Polokalama morphology Rusia mo Elasticsearch ma faʻaaoga. I le Elasticsearch index matou te teuina upu aʻa (lea e fuafua e le plugin) ma N-grams. A'o ulufale le tagata fa'aoga i tusitusiga e su'e ai, matou te va'ava'ai mo tusitusiga lolomi i totonu o N-grams. A fa'asaoina i le fa'ailoga, o le upu "tusitusi" o le a vaevaeina i N-grams nei:

[o na, tek, tex, text, texts, ek, ex, ext, texts, ks, kst, ksty, st, sty, oe],

Ma o le aʻa o le upu "tusi" o le a faasaoina foi. O lenei faiga e mafai ai ona e su'e i le amataga, i le ogatotonu, ma le faaiuga o le upu.

Le ata tele

E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast
Toe fai le ata mai le amataga o le tusiga, ae faatasi ai ma faamatalaga:

  • Paleni fa'aalia i luga ole Initaneti; E iai a matou nginx, e mafai ona iai.
  • O fa'aoga Java e feso'ota'i ma isi e ala i le Hazelcast.
  • E galulue ai ma se socket web matou te fa'aogaina Netty.
  • O le Java talosaga e tusia i le Java 8 ma e aofia ai fusi OSGi. O fuafuaga e aofia ai femalagaiga i Java 10 ma suiga i modules.

Atinaʻe ma suʻega

I le faagasologa o le atinaʻeina ma le faʻataʻitaʻiina o le SV, na matou maua ai le tele o foliga manaia o oloa matou te faʻaaogaina.

Su'ega uta ma fa'agasolo manatua

O le tu'uina atu o fa'asalalauga SV ta'itasi e aofia ai su'ega uta. E manuia pe a:

  • Na galue le suʻega mo ni nai aso ma e leai se faʻaletonu o auaunaga
  • O le taimi e tali atu ai mo fa'agaioiga autu e le'i sili atu i se tulaga fa'alelei
  • O le faʻaleagaina o faʻatinoga faʻatusatusa i le lomiga muamua e le sili atu i le 10%

Matou te faʻatumu le faʻamaumauga o suʻega i faʻamaumauga - ia faia lenei mea, matou te mauaina faʻamatalaga e uiga i le tagata sili ona toaga mai le gaosiga o le gaosiga, faʻateleina ona numera i le 5 (numera o feʻau, talanoaga, tagata faʻaoga) ma faʻataʻitaʻiina i lena auala.

Matou te faia suʻega uta o le faiga faʻafesoʻotaʻi i ni faʻasalalauga se tolu:

  1. suega o le atuatuvale
  2. Na'o sootaga
  3. Le resitalaina o le au fai saofaga

I le taimi o le suʻega faʻalavelave, matou te faʻalauiloaina le tele o selau filo, ma latou utaina le faiga e aunoa ma se taofi: tusitusi savali, fatuina o talanoaga, mauaina o se lisi o feʻau. Matou te faʻataʻitaʻiina gaioiga a tagata faʻaoga masani (maua se lisi o aʻu feʻau e leʻi faitauina, tusi i se tasi) ma fofo faʻapipiʻi (faʻasalalau se afifi o se faʻatulagaga ese, faʻagasolo se mataala).

Mo se faʻataʻitaʻiga, o le vaega lea o le suʻega faʻalavelave e foliga mai:

  • O lo'o ulufale le tagata fa'aoga
    • Talosagaina au talanoaga e le'i faitauina
    • 50% atonu e faitau savali
    • 50% atonu e tesi
    • Tagata e sosoo ai:
      • E 20% le avanoa e fai ai se talanoaga fou
      • Filifili fa'afuase'i so'o se tasi o ana talanoaga
      • E alu i totonu
      • Talosaga fe'au, fa'amatalaga fa'aoga
      • Faia ni fe'au se lima e fa'atatau i tagata fa'aoga fa'afuase'i mai lenei talanoaga
      • Tu'u le talanoaga
      • Toe fai 20 taimi
      • Fa'ato'aga, toe fo'i i le amataga o le fa'amaumauga

    • O se chatbot e ulufale i totonu o le faiga (faʻataʻitaʻiina feʻau mai le numera o talosaga)
      • E i ai le 50% avanoa e fatuina ai se auala fou mo fefaʻatauaiga faʻamatalaga (talanoaga faʻapitoa)
      • 50% e ono tusia se fe'au i so'o se auala o iai

O le faʻaaliga "Naʻo Fesoʻotaʻiga" na faʻaalia mo se mafuaʻaga. O loʻo i ai se tulaga: ua faʻafesoʻotaʻi e tagata faʻaoga le faiga, ae e leʻi aʻafia ai. E ki e tagata ta'ito'atasi le komepiuta i le 09:00 i le taeao, fa'amauina se feso'ota'iga i le 'au'aunaga ma nofo filemu. O nei tama e mataʻutia, e toʻatele i latou - naʻo latou afifi o le PING/PONG, ae o loʻo tumau pea le fesoʻotaʻiga i le server (e le mafai ona faʻatumauina - faʻafefea pe a iai se feʻau fou). O le suʻega e toe faʻaalia ai se tulaga e taumafai ai le toʻatele o tagata faʻaoga e ulufale i totonu o le polokalama i le afa itula. E talitutusa ma se suʻega faʻalavelave, ae o lona taulai tonu lava i lenei mea muamua - ina ia leai ni faaletonu (e le faʻaaogaina e se tagata le faiga, ma ua uma ona pa'ū - e faigata ona mafaufau i se mea e sili atu ona leaga).

O le tusiga resitalaina o le au fai saofaga e amata mai le faʻalauiloaina muamua. Na matou faia se suʻega faʻamalosi ma sa matou mautinoa e leʻi faʻagesegese le faiga i taimi o fesoʻotaʻiga. Ae na o mai tagata faʻaoga ma ua amata ona le manuia le resitala ona o se taimi malolo. Ina ua lesitala sa matou faaaogaina / dev / soʻoga, lea e fesoʻotaʻi ma le entropy o le faiga. E leʻi maua e le 'auʻaunaga le taimi e faʻaputuina ai le entropy ma ina ua talosagaina se SecureRandom fou, na malolo mo le sefulu sekone. E tele auala e alu ese ai mai lenei tulaga, mo se faʻataʻitaʻiga: sui i le le saogalemu / dev / urandom, faʻapipiʻi se laupapa faʻapitoa e gaosia ai le entropy, faʻatupu numera faʻafuaseʻi i luma ma teu i totonu o se vaitaele. Na matou tapunia mo sina taimi le faʻafitauli i le vaitaele, ae talu mai lena taimi o loʻo matou faia se suʻega ese mo le resitalaina o tagata fou.

Matou te faʻaaogaina e fai ma faʻaputu uta JMeter. Na te le iloa pe faʻafefea ona galue i le websocket; e manaʻomia se mea faʻapipiʻi. Muamua i'uga su'esu'e mo le fesili "jmeter websocket" o: tala mai BlazeMeter, lea e fautuaina plugin saunia e Maciej Zaleski.

O iina na matou filifili ai e amata.

Toeitiiti lava a maeʻa le amataina o suʻega ogaoga, na matou iloa ai na amata ona faʻafefe le JMeter.

O le plugin o se tala tele ese; faatasi ai ma fetu 176, e 132 tui i luga o le github. O le tusitala lava ia e leʻi tuuto atu i ai talu mai le 2015 (na matou aveina i le 2015, ona leʻi faʻatupuina lea o masalosaloga), o le tele o mataupu github e uiga i le faʻaogaina o mafaufauga, 7 talosaga e leʻi tapunia.
Afai e te filifili e faia suʻega uta e faʻaaoga ai lenei masini, faʻamolemole faʻalogo i talanoaga nei:

  1. I se si'osi'omaga e tele filo, sa fa'aaogaina se LinkedList masani, ma o le taunu'uga NPE i le taimi fa'atino. E mafai ona foia lenei mea e ala i le sui i le ConcurrentLinkedDeque poʻo poloka faʻatasi. Na matou filifilia le filifiliga muamua mo i matou lava (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Lega manatua; pe a motusia, e le tapeina faʻamatalaga fesoʻotaʻiga (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. I le ala fa'aola (pe a le tapunia le socket websocket i le pito o le fa'ata'ita'iga, ae fa'aaoga mulimuli ane i le fuafuaga), E le aoga mamanu tali (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Ole tasi lea oi latou ile github. O mea na matou faia:

  1. Ua ave tui Elyran Kogan (@elyrank) - e foia faafitauli 1 ma 3
  2. Foia faafitauli 2
  3. Fa'afouina le va'alele mai le 9.2.14 i le 9.3.12
  4. afifi SimpleDateFormat i ThreadLocal; SimpleDateFormat e le o se filo-saogalemu, lea na oʻo atu i le NPE i le taimi faʻataʻavale
  5. Toe fa'aleleia se isi mea e manatua (na sese le tapuni pe a motusia)

Ae e tafe mai lava!

Na amata ona uma le manatua e le o se aso, ae i le lua. Na matua leai lava se taimi na totoe, o lea na matou filifili ai e faʻalauiloa ni nai filo, ae i luga o sui e fa. Sa tatau ona lava lea mo le itiiti ifo i le vaiaso.

Ua mavae aso e lua...

O lea ua leai se manatua o Hazelcast. O ogalaau na faʻaalia ai ina ua mavae ni nai aso o suʻega, na amata ona faitio Hazelcast e uiga i le leai o se manatua, ma ina ua mavae sina taimi na malepe ai le fuifui, ma na faʻaauau pea ona mate taʻitasi. Na matou faʻafesoʻotaʻi le JVisualVM i le hazelcast ma vaʻai i se "vaʻa aʻe" - e masani ona taʻua o le GC, ae le mafai ona faʻamamaina le manatua.

E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast

Na aliali mai i le hazelcast 3.4, pe a tapeina se faʻafanua / multiMap (map.destroy()), e leʻo faʻasaʻoloto atoatoa le manatua:

github.com/hazelcast/hazelcast/issues/6317
github.com/hazelcast/hazelcast/issues/4888

Ua fa'amauina nei le pusa i le 3.5, ae o se fa'afitauli i lena taimi. Na matou faia ni multiMaps fou ma igoa faʻamalosi ma tapeina e tusa ai ma la matou faʻamatalaga. O le code na foliga mai e pei o lenei:

public void join(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.put(auth.getUserId(), auth);
}

public void leave(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.remove(auth.getUserId(), auth);

    if (sessions.size() == 0) {
        sessions.destroy();
    }
}

Fa'ailoga:

service.join(auth1, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");
service.join(auth2, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");

multiMap na faia mo saofaga taʻitasi ma tapeina pe a le manaʻomia. Na matou filifili o le a matou amata Faafanua , o le ki o le igoa o le saofaga, ma o tau o le a avea ma faʻamatalaga faʻamatalaga (lea e mafai ai ona e mauaina faʻamatalaga tagata faʻaoga, pe a manaʻomia).

public void join(Authentication auth, String sub) {
    addValueToMap(sub, auth.getSessionId());
}

public void leave(Authentication auth, String sub) { 
    removeValueFromMap(sub, auth.getSessionId());
}

Ua faaleleia siata.

E faʻafefea ma pe aisea na matou tusia ai se auaunaga faʻaleleia maualuga mo le 1C: Enterprise: Java, PostgreSQL, Hazelcast

O le a se isi mea ua tatou aʻoaʻoina e uiga i suʻega uta?

  1. O le JSR223 e manaʻomia ona tusia i le groovy ma aofia ai le faʻapipiʻi cache - e sili atu le vave. fesoʻotaʻiga.
  2. Jmeter-Plugins kalafi e faigofie ona malamalama nai lo tulaga masani. fesoʻotaʻiga.

E uiga i le matou aafiaga ma Hazelcast

O Hazelcast o se oloa fou mo i matou, na amata ona matou galulue faʻatasi mai le version 3.4.1, o le taimi nei o loʻo faʻaogaina e le matou faʻaumau gaosiga le version 3.9.2 (i le taimi o le tusitusi, o le lomiga lata mai o Hazelcast o le 3.10).

Fausia ID

Na matou amata i numera numera. Se'i manatu tatou te mana'omia se isi Long mo se vaega fou. O le faasologa i totonu o le database e le talafeagai, o laulau o loʻo aʻafia i le sharding - e foliga mai o loʻo i ai se feʻau ID = 1 i le DB1 ma se feʻau ID = 1 i le DB2, e le mafai ona e tuʻuina lenei ID i Elasticsearch, poʻo le Hazelcast , ae o le mea sili ona leaga pe afai e te manaʻo e tuʻufaʻatasia faʻamaumauga mai faʻamaumauga e lua i le tasi (mo se faʻataʻitaʻiga, filifili e lava le tasi faʻamaumauga mo nei tagata fai saofaga). E mafai ona e fa'aopoopoina le tele o AtomicLongs i le Hazelcast ma tu'u le fata iina, o le fa'atinoga o le mauaina o se ID fou e fa'aopoopo ma le taimi mo se talosaga i le Hazelcast. Ae o le Hazelcast e iai se mea e sili atu ona lelei - FlakeIdGenerator. Pe a faʻafesoʻotaʻi tagata taʻitasi, e tuʻuina atu ia i latou se ID, mo se faʻataʻitaʻiga, le muamua - mai le 1 i le 10, le lona lua - mai le 000 i le 10, ma isi. Ole taimi nei e mafai e le kalani ona tu'uina atu fa'amatalaga fou na'o ia se'ia mae'a le vaega na tu'uina atu i ai. E galue vave, ae a e toe amata le talosaga (ma le Hazelcast client), e amata se faasologa fou - o le mea lea o le faaseʻe, ma isi. E le gata i lea, e le o malamalama lelei le au atinaʻe pe aisea e faʻatatau ai IDs, ae e matua le fetaui. Sa matou fuaina mea uma ma sui i UUID.

I le ala, mo i latou e mananao e pei o Twitter, o loʻo i ai se faletusi Snowcast - o se faʻatinoga lea o Snowflake i luga o le Hazelcast. E mafai ona e matamata i ai iinei:

github.com/noctarius/snowcast
github.com/twitter/snowflake

Ae matou te leʻi oʻo i ai.

TransactionalMap.replace

O le isi mea e ofo ai: TransactionalMap.replace e le aoga. Ole su'ega lea:

@Test
public void replaceInMap_putsAndGetsInsideTransaction() {

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            context.getMap("map").put("key", "oldValue");
            context.getMap("map").replace("key", "oldValue", "newValue");
            
            String value = (String) context.getMap("map").get("key");
            assertEquals("newValue", value);

            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }        
    });
}

Expected : newValue
Actual : oldValue

Sa tatau ona ou tusia laʻu lava sui e faʻaaoga ai getForUpdate:

protected <K,V> boolean replaceInMap(String mapName, K key, V oldValue, V newValue) {
    TransactionalTaskContext context = HazelcastTransactionContextHolder.getContext();
    if (context != null) {
        log.trace("[CACHE] Replacing value in a transactional map");
        TransactionalMap<K, V> map = context.getMap(mapName);
        V value = map.getForUpdate(key);
        if (oldValue.equals(value)) {
            map.put(key, newValue);
            return true;
        }

        return false;
    }
    log.trace("[CACHE] Replacing value in a not transactional map");
    IMap<K, V> map = hazelcastInstance.getMap(mapName);
    return map.replace(key, oldValue, newValue);
}

Fa'ata'ita'i e le gata o fa'amaumauga masani, ae fa'apea fo'i a latou fa'asalalauga. E tupu e galue IMap, ae le o toe iai le TransactionalMap.

Fa'aofi se JAR fou e aunoa ma se taimi malolo

Muamua, na matou filifili e pueina mea faitino o a matou vasega i Hazelcast. Mo se faʻataʻitaʻiga, e iai la matou vasega Talosaga, matou te mananaʻo e teu ma faitau. Fa'asao:

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
map.set(id, application);

Tatou te faitau:

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
return map.get(id);

O loʻo galue mea uma. Ona matou filifili lea e fausia se faasino igoa i Hazelcast e suʻe e:

map.addIndex("subscriberId", false);

Ma ina ua tusia se vaega fou, na amata ona latou mauaina ClassNotFoundException. Sa taumafai Hazelcast e faaopoopo i le faasino igoa, ae na te le iloa se mea e uiga i la matou vasega ma sa manao e aumai se JAR faatasi ma lenei vasega. Na matou faia lena mea, na aoga mea uma, ae o se faafitauli fou na aliali mai: faʻafefea ona faʻafouina le JAR e aunoa ma le taofia atoa o le fuifui? E le maua e Hazelcast le JAR fou i le taimi o le fa'afouga o node-by-node. O le taimi lea na matou filifili ai e mafai ona matou ola e aunoa ma le suʻesuʻeina o faasino igoa. A uma mea uma, afai e te faʻaaogaina Hazelcast o se faleoloa taua-taua, o le a aoga mea uma? Pe lava. O lea foi e ese le amio a IMap ma TransactionalMap. A le popole IMap, TransactionalMap lafo se mea sese.

IMap. Matou te tusia 5000 mea faitino, faitau i ai. Ua faamoemoeina mea uma.

@Test
void get5000() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application");
    UUID subscriberId = UUID.randomUUID();

    for (int i = 0; i < 5000; i++) {
        UUID id = UUID.randomUUID();
        String title = RandomStringUtils.random(5);
        Application application = new Application(id, title, subscriberId);
        
        map.set(id, application);
        Application retrieved = map.get(id);
        assertEquals(id, retrieved.getId());
    }
}

Ae e le aoga i se fefaʻatauaiga, matou te maua se ClassNotFoundException:

@Test
void get_transaction() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application_t");
    UUID subscriberId = UUID.randomUUID();
    UUID id = UUID.randomUUID();

    Application application = new Application(id, "qwer", subscriberId);
    map.set(id, application);
    
    Application retrievedOutside = map.get(id);
    assertEquals(id, retrievedOutside.getId());

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            TransactionalMap<UUID, Application> transactionalMap = context.getMap("application_t");
            Application retrievedInside = transactionalMap.get(id);

            assertEquals(id, retrievedInside.getId());
            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }
    });
}

I le 3.8, na faʻaalia ai le faʻaogaina o le Vasega Tagata Faʻaaoga. E mafai ona e tofia se tasi matai pona ma faafou le faila JAR i luga.

O lea ua suia atoa la matou auala: matou te faʻasalalau i matou lava i le JSON ma faʻasaoina i Hazelcast. E le manaʻomia ona iloa e Hazelcast le faʻatulagaina oa matou vasega, ma e mafai ona matou faʻafouina e aunoa ma se taimi malolo. O le fa'aliliuina o meafaitino e pulea e le talosaga. Eseese lomiga o le talosaga e mafai ona tamoʻe i le taimi e tasi, ma o se tulaga e mafai pe a tusi le tusi talosaga fou mea faitino ma fanua fou, ae o le mea tuai e le o iloa e uiga i nei fanua. Ma i le taimi lava e tasi, o le talosaga fou e faitau mea na tusia e le talosaga tuai e leai ni fanua fou. Matou te taulimaina ia tulaga i totonu o le talosaga, ae mo le faigofie matou te le suia pe tape fanua, matou te faʻalauteleina vasega e ala i le faʻaopoopoina o fanua fou.

Auala matou te mautinoa ai le maualuga o le faatinoga

E fa malaga i Hazelcast - lelei, lua i le database - leaga

O le alu i le cache mo faʻamatalaga e sili atu nai lo le alu i le database, ae e te le manaʻo e teu faʻamaumauga e leʻi faʻaaogaina. Matou te tuʻuina le faʻaiuga e uiga i mea e teu ai seia oʻo i le laasaga mulimuli o le atinaʻe. A faʻamaonia le galuega fou, matou te faʻaogaina le faʻapipiʻiina o fesili uma i le PostgreSQL (log_min_duration_statement to 0) ma faʻataʻitaʻi faʻataʻitaʻiga mo minute 20. Faʻaaogaina ogalaau aoina, faʻaoga e pei o le pgFouine ma le pgBadger e mafai ona fausia ai lipoti auʻiliʻili. I lipoti, matou te vaʻavaʻai muamua mo fesili faifai pea ma faifai pea. Mo fa'ase'e fa'agesegese, matou te fausia se fuafuaga fa'atino (FA'amatala) ma iloilo pe mafai ona fa'atelevave sea fesili. Talosaga masani mo faʻamatalaga faʻapipiʻi tutusa e fetaui lelei i totonu o le cache. Matou te taumafai e fa'atumauina fesili "mafolafola", tasi le laulau i le fesili.

Gaoioiga

SV o se auaunaga i luga o le initaneti na faʻaaogaina i le tautotogo o le 2017, ma o se oloa eseʻese, na faʻasaʻolotoina SV ia Novema 2017 (i le taimi lena i le tulaga beta version).

I le sili atu ma le tausaga o faʻagaioiga, e leai ni faʻafitauli matuia i le faʻaogaina o le CB auaunaga i luga ole laiga. Matou te mataituina le auaunaga i luga ole laiga e ala i Zabbix, aoina ma fa'apipi'i mai Bamboo.

O le tufatufaina atu o le server SV o loʻo tuʻuina atu i le tulaga o pusa faʻapitoa: RPM, DEB, MSI. Faʻaopoopo mo Windows matou te tuʻuina atu se faʻapipiʻi tasi i le tulaga o se EXE tasi e faʻapipiʻi ai le server, Hazelcast ma Elasticsearch i luga o le masini e tasi. Na matou taʻua muamua lenei faʻasologa o le faʻapipiʻiina o le "demo" version, ae ua manino nei o le filifiliga sili lea ona lauiloa.

puna: www.habr.com

Faaopoopo i ai se faamatalaga