Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast

Sehloohong sena re tla bua ka hore na re ntlafalitse joang hona hobaneng Sistimi ea Tšebelisano - mochini o fetisang tlhahisoleseling lipakeng tsa lits'ebetso tsa bareki le 1C: Li-server tsa khoebo - ho tloha ho beha mosebetsi ho ea ho ho nahana ka meralo le lintlha tsa ts'ebetsong.

The Interaction System (eo ka mor'a moo e tla bitsoa SV) ke mokhoa oa melaetsa o ajoang, o mamellang liphoso o nang le thomello e netefalitsoeng. SV e entsoe e le tšebeletso ea mojaro o phahameng e nang le scalability e phahameng, e fumanehang ka bobeli e le tšebeletso ea inthanete (e fanoeng ke 1C) le e le sehlahisoa se hlahisoang ka bongata se ka sebelisoang litsing tsa hau tsa seva.

SV e sebelisa polokelo e abetsoeng Hazelcast le mochine oa ho batla Elasticsearch. Re tla boela re bue ka Java le hore na re phahamisa PostgreSQL joang.
Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast

Mokhoa oa bothata

Ho hlakisa hore na ke hobane'ng ha re thehile Sistimi ea Tšebelisano, ke tla u joetsa hanyane mabapi le hore na nts'etsopele ea likopo tsa khoebo ho 1C e sebetsa joang.

Ho qala, hanyane ka rona bakeng sa ba e-so tsebe seo re se etsang :) Re ntse re etsa 1C:Enterprise technology platform. Sethala se kenyelletsa sesebelisoa sa nts'etsopele ea ts'ebeliso ea khoebo, hammoho le nako ea ho sebetsa e lumellang hore likopo tsa khoebo li sebetse sebakeng sa marang-rang.

Paradigm ea ntlafatso ea bareki-server

Likopo tsa khoebo tse entsoeng ho 1C: Khoebo e sebetsa maemong a mararo client-server boqapi "DBMS - seva sa kopo - moreki". Khoutu ea kopo e ngotsoeng ka puo e hahiloeng ka har'a 1C, e ka etsoa ho seva sa kopo kapa ho moreki. Mesebetsi eohle e nang le lisebelisoa tsa kopo (libuka, litokomane, joalo-joalo), hammoho le ho bala le ho ngola database, li etsoa feela ho seva. Ts'ebetso ea liforomo le sebopeho sa litaelo li boetse li kengoa tšebetsong ho seva. Moreki o etsa liforomo tsa ho amohela, ho bula le ho bonts'a, "ho buisana" le mosebelisi (litemoso, lipotso ...), lipalo tse nyane ka mefuta e hlokang karabo e potlakileng (mohlala, ho atisa theko ka bongata), ho sebetsa le lifaele tsa lehae, ho sebetsa ka thepa.

Khoutung ea kopo, lihlooho tsa lits'ebetso le lits'ebetso li tlameha ho bonts'a ka ho hlaka hore na khoutu e tla etsoa hokae - ho sebelisoa litaelo tsa &AtClient / &AtServer (&AtClient / &AtServer phetolelong ea Senyesemane ea puo). Bahlahisi ba 1C joale ba tla ntokisa ka ho re litaelo ke 'nete ho feta, empa ho rōna sena hase sa bohlokoa hona joale.

O ka letsetsa khoutu ea seva ho tsoa ho khoutu ea bareki, empa o ke ke oa letsetsa khoutu ea moreki ho tsoa ho khoutu ea seva. Ena ke tšitiso ea mantlha eo re e entseng ka mabaka a 'maloa. Haholo-holo, hobane khoutu ea seva e tlameha ho ngoloa ka tsela eo e sebetsang ka tsela e ts'oanang ho sa tsotellehe hore na e bitsoa hokae - ho tsoa ho mofani kapa ho tswa ho seva. 'Me tabeng ea ho letsetsa khoutu ea seva ho tsoa ho khoutu e' ngoe ea seva, ha ho na mofani ea joalo. Mme hobane nakong ea ts'ebetso ea khoutu ea seva, moreki ea e bitsitseng a ka koala, a tsoa ts'ebelisong, 'me seva se ke ke sa hlola se e-ba le mang kapa mang ea ka letsetsang.

Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast
Khoutu e sebetsanang le konopo ea konopo: ho letsetsa ts'ebetso ea seva ho tsoa ho mofani ho tla sebetsa, ho letsetsa ts'ebetso ea bareki ho tloha ho seva ho ke ke ha e-ba joalo

Sena se bolela hore haeba re batla ho romela molaetsa o itseng ho tloha ho seva ho ea ho kopo ea bareki, ka mohlala, hore moloko oa tlaleho ea "nako e telele" o felile 'me tlaleho e ka bonoa, ha re na mokhoa o joalo. U tlameha ho sebelisa maqheka, mohlala, nako le nako u hlahlobe seva ho tsoa ho khoutu ea bareki. Empa mokhoa ona o jara sistimi ka mehala e sa hlokahaleng, 'me ka kakaretso ha e shebahale e le ntle haholo.

Hape ho na le tlhokahalo, mohlala, ha mohala o fihla Sip- ha o letsetsa, tsebisa mosebelisi mabapi le sena e le hore a ka sebelisa nomoro ea motho ea letsetsang ho e fumana sebakeng sa polokelo ea litaba le ho bonts'a leseli la mosebelisi mabapi le motho ea letsetsang. Kapa, ​​​​ka mohlala, ha taelo e fihla sebakeng sa polokelo, tsebisa kopo ea moreki ea bareki ka sena. Ka kakaretso, ho na le maemo a mangata moo mochine o joalo o ka bang molemo.

Tlhahiso ka boeona

Etsa mokhoa oa ho romella melaetsa. E potlakile, e ka tšeptjoa, e nang le tlhahiso e tiisitsoeng, e nang le bokhoni ba ho batla melaetsa ka mokhoa o bonolo. Ho ipapisitsoe le mochini, kenya tšebetsong lenqosa (melaetsa, mehala ea video) e sebetsang ka har'a lits'ebetso tsa 1C.

Rala sisteme hore e be e otlolohileng. Mojaro o ntseng o eketseha o tlameha ho koaheloa ka ho eketsa palo ea li-node.

Ts'ebetsong

Re ile ra etsa qeto ea hore re se ke ra kopanya karolo ea seva ea SV ka ho toba ho 1C: Sethala sa Khoebo, empa ho se kenya ts'ebetsong e le sehlahisoa se arohaneng, API ea eona e ka bitsoa ho tsoa ho khoutu ea tharollo ea kopo ea 1C. Sena se entsoe ka mabaka a 'maloa, e ka sehloohong e neng e le hore ke ne ke batla ho etsa hore ho khonehe ho fapanyetsana melaetsa pakeng tsa likopo tse fapaneng tsa 1C (mohlala, pakeng tsa Tsamaiso ea Khoebo le Accounting). Lisebelisoa tse fapaneng tsa 1C li ka sebetsa ka mefuta e fapaneng ea 1C: sethala sa Khoebo, se fumaneha ho li-server tse fapaneng, jj. Maemong a joalo, ts'ebetsong ea SV e le sehlahisoa se arohaneng se fumanehang "ka lehlakoreng" la lisebelisoa tsa 1C ke tharollo e nepahetseng.

Kahoo, re nkile qeto ea ho etsa SV e le sehlahisoa se arohaneng. Re khothaletsa lik'hamphani tse nyane hore li sebelise seva ea CB eo re e kentseng lerung la rona (wss://1cdialog.com) ho qoba litšenyehelo tse amanang le ho kenya le ho hlophisa seva sebakeng sa heno. Bareki ba bangata ba ka fumana ho le molemo ho kenya li-server tsa bona tsa CB litsing tsa bona. Re sebelisitse mokhoa o ts'oanang ho sehlahisoa sa rona sa leru sa SaaS 1cE ncha - e hlahisoa e le sehlahisoa se hlahisoang ka bongata bakeng sa ho kenngoa libakeng tsa bareki, hape e kenngoa lerung la rona https://1cfresh.com/.

Kopo

Ho aba meroalo le mamello ea liphoso, re ke ke ra sebelisa kopo e le 'ngoe ea Java, empa e mengata, e nang le tekanyo ea mojaro ka pel'a bona. Haeba o hloka ho fetisa molaetsa ho tloha node ho ea ho node, sebelisa phatlalatso / ingolisa ho Hazelcast.

Puisano lipakeng tsa moreki le seva e etsoa ka websocket. E loketse hantle bakeng sa litsamaiso tsa nako ea nnete.

Cache e ajoa

Re ile ra khetha pakeng tsa Redis, Hazelcast le Ehcache. Ke 2015. Redis e sa tsoa lokolla sehlopha se secha (e ncha haholo, se tšosang), ho na le Sentinel e nang le lithibelo tse ngata. Ehcache ha e tsebe ho bokana ka sehlopha (ts'ebetso ena e hlahile hamorao). Re nkile qeto ea ho e leka ka Hazelcast 3.4.
Hazelcast e bokelloa ka har'a sehlopha ka ntle ho lebokose. Ka mokhoa o le mong oa node, ha e na thuso haholo 'me e ka sebelisoa feela e le cache - ha e tsebe ho lahla data ho disk, haeba u lahleheloa ke node feela, u lahleheloa ke data. Re kenya li-Hazelcasts tse 'maloa, moo re bolokang data ea bohlokoa. Ha re boloke cache - ha re tsotelle.

Ho rona, Hazelcast ke:

  • Ho boloka linako tsa basebelisi. Ho nka nako e telele ho ea setsing sa polokelo ea litaba bakeng sa seboka nako le nako, kahoo re beha linako tsohle ho Hazelcast.
  • Cache. Haeba u batla profil ea mosebelisi, sheba cache. O ngotse molaetsa o mocha - o kenye ka har'a cache.
  • Lihlooho tsa puisano lipakeng tsa maemo a kopo. Node e hlahisa ketsahalo ebe e e beha sehloohong sa Hazelcast. Lisebelisoa tse ling tse ngolisitsoeng sehloohong sena li amohela le ho sebetsana le ketsahalo.
  • Liloko tsa sehlopha. Mohlala, re theha puisano re sebelisa senotlolo se ikhethileng (puisano ea motho a le mong ka har'a database ea 1C):

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

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

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

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

Re hlahlobile hore ha ho na mocha. Re ile ra nka senotlolo, ra se hlahloba hape, 'me ra se etsa. Haeba u sa hlahlobe senotlolo ka mor'a ho nka senotlolo, ho na le monyetla oa hore khoele e 'ngoe e hlahlojoe ka nako eo' me joale e tla leka ho theha puisano e tšoanang - empa e se e ntse e le teng. Ha o khone ho notlela o sebelisa Lock ea java e hokahaneng kapa e tloaelehileng. Ka database - e ea lieha, 'me ke masoabi bakeng sa database; ka Hazelcast - ke seo u se hlokang.

Ho khetha DBMS

Re na le boiphihlelo bo batsi le bo atlehileng ba ho sebetsa le PostgreSQL le ho sebelisana 'moho le bahlahisi ba DBMS ena.

Ha ho bonolo ka sehlopha sa PostgreSQL - se teng XL, XC, Citus, empa ka kakaretso tsena ha se li-NoSQL tse hlahang ka ntle ho lebokose. Ha rea ​​ka ra nka NoSQL e le polokelo ea mantlha; ho ne ho lekane hore ebe re nkile Hazelcast, eo re neng re sa sebetse le eona pele.

Haeba o hloka ho lekanya database ea likamano, ho bolela ho arola. Joalokaha u tseba, ka sharding re arola database ka likarolo tse arohaneng e le hore e 'ngoe le e' ngoe ea tsona e ka behoa ho seva se arohaneng.

Mofuta oa pele oa ho sharding oa rona o nkile bokhoni ba ho aba e 'ngoe le e 'ngoe ea litafole tsa ts'ebeliso ea rona ho li-server tse fapaneng ka litekanyo tse fapaneng. Ho na le melaetsa e mengata ho seva sa A - ka kopo, a re suthiseng karolo ea tafole ena ho seva B. Qeto ena e ile ea hoeletsa feela ka ho ntlafatsa pele ho nako, kahoo re ile ra etsa qeto ea ho ipehela mokhoa oa ho sebelisa batho ba bangata.

U ka bala ka bahiri ba bangata, mohlala, webosaeteng Lintlha tsa Citus.

SV e na le menahano ea ts'ebeliso le mongolisi. Kopo ke ts'ebetso e ikhethileng ea ts'ebeliso ea khoebo, joalo ka ERP kapa Accounting, e nang le basebelisi ba eona le data ea khoebo. Motho ea ngolisitseng ke mokhatlo kapa motho eo kopo ea hae e ngolisitsoeng molemong oa seva sa SV. Motho ea ngolisitseng a ka ba le lits'ebetso tse 'maloa tse ngolisitsoeng,' me lits'ebetso tsena li ka fapanyetsana melaetsa. Motho ea ngolisitseng e ile ea e-ba mohiri tsamaisong ea rona. Melaetsa e tsoang ho ba ngolisitseng ba 'maloa e ka fumaneha sebakeng se le seng sa polokelo ea lintho; haeba re bona hore motho ea ngolisitseng o se a qalile ho hlahisa sephethephethe se ngata, re se fetisetsa sebakeng se arohaneng sa boitsebiso ba 'mele (kapa esita le seva sa database se arohaneng).

Re na le database ea mantlha moo tafole ea ho tsamaisa e bolokiloeng e nang le tlhaiso-leseling mabapi le sebaka sa li-database tsohle tsa ba ngolisitseng.

Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast

Ho thibela database ea mantlha hore e se be botlolo, re boloka tafole ea ho tsamaisa (le lintlha tse ling tse hlokahalang khafetsa) ka har'a cache.

Haeba database ea ba ngolisitseng e qala ho fokotseha, re tla e khaola ka likarolo tse ka hare. Ho merero e meng eo re e sebelisang pg_pathman.

Kaha ho lahleheloa ke melaetsa ea basebelisi ho fosahetse, re boloka datha ea rona e na le likopi. Motsoako oa li-synchronous le asynchronous replicas li u lumella ho iketsetsa inshorense haeba u lahleheloa ke database ea mantlha. Tahlehelo ea molaetsa e tla etsahala feela haeba database ea mantlha le setšoantšo sa eona sa synchronous se hloleha ka nako e le 'ngoe.

Haeba sets'oants'o sa synchronous se lahlehile, sets'oants'o sa asynchronous se fetoha se lumellanang.
Haeba database ea mantlha e lahlehile, setšoantšo sa synchronous se fetoha database ea mantlha, 'me setšoantšo sa asynchronous se fetoha setšoantšo se lumellanang.

Elasticsearch bakeng sa ho batla

Kaha, har'a lintho tse ling, SV le eona ke lenģosa, e hloka patlisiso e potlakileng, e bonolo le e feto-fetohang, ho nahanela morphology, ho sebelisa lipapali tse sa nepahalang. Re nkile qeto ea hore re se ke ra qapa lebili hape le ho sebelisa enjene ea mahala ea ho batla Elasticsearch, e thehiloeng ho laeborari Lucene. Re boetse re sebelisa Elasticsearch ka har'a sehlopha (master - data - data) ho felisa mathata haeba ho hlōleha ha lisebelisoa tsa kopo.

Ho github re fumane Serussia morphology plugin bakeng sa Elasticsearch 'me u e sebelise. Ho Elasticsearch index re boloka metso ea mantsoe (eo plugin e e khethang) le N-grams. Ha mosebelisi a kenya mongolo ho batla, re batla mongolo o tlatsitsoeng har'a li-N-gram. Ha e bolokoa ho index, lentsoe "texts" le tla aroloa ka li-N-grams tse latelang:

[tseo, tek, tex, mongolo, mongolo, ek, ex, ext, litemana, ks, kst, ksty, st, sty, uena],

’Me motso oa lentsoe “mongolo” le oona o tla bolokoa. Mokhoa ona o u lumella ho batla qalong, bohareng, le qetellong ea lentsoe.

Setšoantšo se seholo

Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast
Pheta setšoantšo ho tloha qalong ea sengoloa, empa ka litlhaloso:

  • Balancer e pepesitsoe Inthaneteng; re na le nginx, e ka ba efe kapa efe.
  • Maemo a kopo ea Java a buisana ka Hazelcast.
  • Ho sebetsa ka sokete ea webo eo re e sebelisang Nete.
  • Sesebelisoa sa Java se ngotsoe ka Java 8 'me se na le mekotla OSGi. Merero e kenyelletsa ho falla ho Java 10 le ho fetela ho li-module.

Ntlafatso le liteko

Ha re ntse re hlahisa le ho leka SV, re ile ra kopana le likarolo tse ngata tse thahasellisang tsa lihlahisoa tseo re li sebelisang.

Teko ea mojaro le ho lutla ha memori

Ho lokolloa ha tokollo e 'ngoe le e' ngoe ea SV ho kenyelletsa tlhahlobo ea mojaro. E atleha ha:

  • Teko e ile ea sebetsa matsatsi a 'maloa' me ho ne ho se na mefokolo ea litšebeletso
  • Nako ea karabelo bakeng sa ts'ebetso ea bohlokoa ha ea ka ea feta moeli o motle
  • Ho senyeha ha tšebetso ha ho bapisoa le mofuta o fetileng ha ho fete 10%

Re tlatsa database ea liteko ka data - ho etsa sena, re fumana tlhahisoleseling mabapi le motho ea ngolisitseng ea sebetsang ka ho fetesisa ho tsoa ho seva sa tlhahiso, re atise linomoro tsa eona ka 5 (palo ea melaetsa, lipuisano, basebelisi) le ho e leka ka tsela eo.

Re etsa liteko tsa boima ba sistimi ea tšebelisano ka litlhophiso tse tharo:

  1. teko ea khatello ea maikutlo
  2. Lihokelo feela
  3. Ngoliso ea ba ngolisitseng

Nakong ea teko ea khatello ea kelello, re hlahisa likhoele tse makholo a 'maloa,' me li kenya tsamaiso ntle le ho emisa: ho ngola melaetsa, ho theha lipuisano, ho amohela lethathamo la melaetsa. Re etsisa liketso tsa basebelisi ba tloaelehileng (fumana lethathamo la melaetsa ea ka e sa baloang, ngolla motho e mong) le litharollo tsa software (fetisa sephutheloana sa tlhophiso e fapaneng, sebetsa tlhokomeliso).

Ka mohlala, sena ke seo karolo ea teko ea khatello ea kelello e shebahalang ka eona:

  • Mosebelisi o kena
    • E kopa lipuisano tsa hau tse sa baloang
    • 50% e khona ho bala melaetsa
    • 50% e ka khona ho ngola
    • Mosebelisi ea latelang:
      • E na le monyetla oa 20% oa ho theha puisano e ncha
      • Ka linako tsohle e khetha lipuisano tsa eona
      • E kena ka hare
      • E kopa melaetsa, litlaleho tsa basebelisi
      • E etsa melaetsa e mehlano e lebisitsoeng ho basebelisi ba sa sebetseng ho tsoa puisanong ena
      • E tlohela puisano
      • E pheta makhetlo a 20
      • E tsoa, ​​​​e khutlela qalong ea script

    • Chatbot e kenya sistimi (e etsisa melaetsa e tsoang ho khoutu ea kopo)
      • E na le monyetla oa 50% oa ho theha mocha o mocha oa phapanyetsano ea data (puisano e khethehileng)
      • Ho ka etsahala hore 50% e ngole molaetsa ho likanale tse teng

Boemo ba "Likhokahano Feela" bo hlahile ka lebaka. Ho na le boemo: basebelisi ba hokahane le sistimi, empa ha ba e-so kenelle. Mosebelisi e mong le e mong o bula komporo ka 09:00 hoseng, o theha khokahano ho seva mme o lula a khutsitse. Banna bana ba kotsi, ho na le ba bangata ba bona - liphutheloana feela tseo ba nang le tsona ke PING / PONG, empa ba boloka khokahanyo ho seva (ha ba khone ho e boloka - ho thoe'ng haeba ho na le molaetsa o mocha). Teko e hlahisa boemo boo palo e kholo ea basebelisi ba joalo e lekang ho kena tsamaisong ka halofo ea hora. E tšoana le teko ea khatello ea kelello, empa sepheo sa eona se nepahetse ka ho kenya letsoho lena la pele - e le hore ho se ke ha e-ba le mefokolo (motho ha a sebelise tsamaiso, empa e se e ntse e oela - ho thata ho nahana ka ntho e mpe le ho feta).

Sengoliloeng sa ngoliso ea ba ngolisitseng se qala ho tloha ha se qala. Re ile ra etsa tlhahlobo ea khatello ea kelello 'me ra ba le bonnete ba hore tsamaiso ha e fokotsehe nakong ea ngollano. Empa basebelisi ba ile ba tla mme ngoliso e ile ea qala ho hloleha ka lebaka la nako e felileng. Ha re ngolisa re ne re sebelisa / dev / tšohanyetso, e amanang le entropy ea tsamaiso. Seva e ne e se na nako ea ho bokella entropy e lekaneng mme ha SecureRandom e ncha e ne e kopuoa, e ile ea hoama ka metsotsoana e mashome. Ho na le mekhoa e mengata ea ho tsoa boemong bona, mohlala: ho fetola ho se sireletsehileng / dev / urandom e fokolang, kenya boto e khethehileng e hlahisang entropy, hlahisa linomoro tse sa lebelloang esale pele 'me u li boloke ka letamong. Re ile ra koala bothata ka nakoana ka letamo, empa ho tloha ka nako eo re ntse re etsa tlhahlobo e fapaneng ea ho ngolisa ba ngolisitseng ba bacha.

Re sebelisa e le jenereithara ea mojaro JMeter. Ha e tsebe ho sebetsa le websocket; e hloka plugin. Liphetho tsa pele tsa potso ea "jmeter websocket" ke: lingoliloeng tse tsoang BlazeMeter, e khothalletsang plugin ka Maciej Zaleski.

Ke hona moo re ileng ra etsa qeto ea ho qala.

Hoo e ka bang hang kamora ho qala liteko tse tebileng, re ile ra fumana hore JMeter e qalile ho lutla mohopolo.

Plugin ke pale e kholo e arohaneng; e nang le linaleli tse 176, e na le lifereko tse 132 ho github. Mongoli ka boeena ha a e-s'o ikemisetse ho eona ho tloha 2015 (re e nkile ka 2015, joale ha ea ka ea hlahisa lipelaelo), litaba tse 'maloa tsa github mabapi le ho lutla ha memori, likopo tse 7 tse sa koaloang.
Haeba u etsa qeto ea ho etsa liteko tsa mojaro u sebelisa plugin ena, ka kopo ela hloko lipuisano tse latelang:

  1. Sebakeng se nang le likhoele tse ngata, ho ile ha sebelisoa LinkedList e tloaelehileng, 'me phello e bile NPE nakong ea ho sebetsa. Sena se ka rarolloa ka ho fetohela ho ConcurrentLinkedDeque kapa ka li-blocks tse hokahaneng. Re ikhethetse khetho ea pele (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Ho dutla ha memori; ha o kgaola, tlhahisoleseling ha e hlakoloe (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. Ka mokhoa oa ho phallela (ha websocket e sa koaloa qetellong ea sampuli, empa e sebelisoa hamorao morerong), mekhoa ea ho arabela ha e sebetse (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Ena ke e 'ngoe ea tse ho github. Seo re se entseng:

  1. Ba nkile fereko Elyran Kogan (@elyrank) - e lokisa mathata 1 le 3
  2. E rarollotsoe bothata 2
  3. Jetty e ntlafalitsoeng ho tloha ho 9.2.14 ho ea ho 9.3.12
  4. E phuthetsoe SimpleDateFormat ho ThreadLocal; SimpleDateFormat ha e bolokehe, e lebisitseng ho NPE ka nako ea ho sebetsa
  5. Lokisa leak e 'ngoe ea memori (khokahanyo e ne e koetsoe ka phoso ha e khaotsoe)

Leha ho le joalo e phalla!

Memori e ile ea qala ho fela eseng ka letsatsi, empa ka bobeli. Ho ne ho se na nako e setseng, kahoo re ile ra etsa qeto ea ho hlahisa likhoele tse fokolang, empa ho baemeli ba bane. Sena se ne se lokela hore ebe se lekane bonyane beke.

Matsatsi a mabeli a fetile ...

Hona joale Hazelcast e felloa ke mohopolo. Lifate li bontšitse hore ka mor'a matsatsi a seng makae a tlhahlobo, Hazelcast o ile a qala ho tletleba ka ho hloka mohopolo, 'me ka mor'a nako e itseng sehlopha se ile sa arohana,' me li-node tsa tsoela pele ho shoa ka bonngoe. Re ile ra hokela JVisualVM ho hazelcast mme ra bona "saha e ntseng e phahama" - e ne e lula e bitsa GC, empa e ne e sa khone ho hlakola mohopolo.

Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast

Ho ile ha fumaneha hore ho hazelcast 3.4, ha u hlakola 'mapa / multiMap (map.destroy()), memori ha e lokolloe ka botlalo:

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

Phoso e se e lokisitsoe ho 3.5, empa e ne e le bothata ka nako eo. Re thehile limmapa tse ncha tse nang le mabitso a matla, 'me ra li hlakola ho latela mabaka a rona. Code e ne e shebahala tjena:

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();
    }
}

Letsa:

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

MultiMap e entsoe bakeng sa peeletso e 'ngoe le e' ngoe 'me ea hlakoloa ha e sa hlokahale. Re nkile qeto ea hore re tla qala 'Mapa , senotlolo e tla ba lebitso la peeletso, 'me boleng e tla ba li-identifiers tsa seboka (tseo u ka fumanang li-identifiers tsa basebelisi, haeba ho hlokahala).

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

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

Lichate li ntlafetse.

Joang le hore na ke hobane'ng ha re ngotse ts'ebeletso e kholo ea 1C: Khoebo: Java, PostgreSQL, Hazelcast

Ke eng hape eo re ithutileng eona mabapi le tlhahlobo ea mojaro?

  1. JSR223 e hloka ho ngoloa ka groovy mme e kenyelle cache ea pokello - e potlakile haholo. kgokahanyo.
  2. Li-graph tsa Jmeter-plugins li bonolo ho utloisisa ho feta tse tloaelehileng. kgokahanyo.

Mabapi le boiphihlelo ba rona le Hazelcast

Hazelcast e ne e le sehlahisoa se secha bakeng sa rona, re ile ra qala ho sebetsa le eona ho tloha phetolelong ea 3.4.1, hona joale seva sa rona sa tlhahiso e ntse e sebetsa version 3.9.2 (nakong ea ho ngola, phetolelo ea morao-rao ea Hazelcast ke 3.10).

Ho hlahisa ID

Re ile ra qala ka li-integer identifiers. Ha re nahane hore re hloka nako e telele bakeng sa mokhatlo o mocha. Tatellano ho database ha e ea lokela, litafole li kenya letsoho ho sharding - ho fumaneha hore ho na le molaetsa ID = 1 ho DB1 le molaetsa ID = 1 ho DB2, u ke ke ua beha ID ena ho Elasticsearch, kapa Hazelcast. , empa ntho e mpe ka ho fetisisa ke hore haeba u batla ho kopanya lintlha tse tsoang ho li-database tse peli ho e le 'ngoe (mohlala, ho etsa qeto ea hore database e le' ngoe e lekane bakeng sa ba ngolisitseng bana). U ka eketsa AtomicLongs tse 'maloa ho Hazelcast 'me u boloke k'haontareng moo, joale ts'ebetso ea ho fumana ID e ncha e ea eketsehaAndGet hammoho le nako ea kopo ho Hazelcast. Empa Hazelcast e na le ho hong ho nepahetseng ho feta - FlakeIdGenerator. Ha ba kopana le mofani e mong le e mong, ba fuoa lethathamo la ID, mohlala, ea pele - ho tloha ho 1 ho ea ho 10, ea bobeli - ho tloha ho 000 ho ea ho 10, joalo-joalo. Joale moreki a ka fana ka li-identifiers tse ncha ka botsona ho fihlela mofuta o fanoeng ho oona o fela. E sebetsa kapele, empa ha o qala ts'ebeliso (le moreki oa Hazelcast), tatellano e ncha e qala - ka hona, ho tlola, jj. Ho feta moo, bahlahisi ha ba utloisise hantle hore na ke hobane'ng ha li-ID e le palo e feletseng, empa ha li lumellane. Re ile ra lekanya ntho e 'ngoe le e' ngoe 'me ra fetohela ho li-UUID.

Tseleng, bakeng sa ba batlang ho tšoana le Twitter, ho na le laebrari e joalo ea Snowcast - ena ke ts'ebetsong ea Snowflake holim'a Hazelcast. U ka e sheba mona:

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

Empa ha re e-so fihle ho eona.

TransactionalMap.fetola

Ntho e 'ngoe e makatsang: TransactionalMap.replace ha e sebetse. Teko ke ena:

@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

Ke ile ka tlameha ho ingolla sebaka sa ka ke sebelisa 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);
}

Leka eseng feela libopeho tsa data tse tloaelehileng, empa hape le mefuta ea tsona ea transaction. Ho etsahala hore IMap e sebetse, empa TransactionalMap ha e sa le teng.

Kenya JAR e ncha ntle le ho fokotsa nako

Pele, re ile ra etsa qeto ea ho rekota lintho tsa litlelase tsa rōna Hazelcast. Mohlala, re na le sehlopha sa Kopo, re batla ho se boloka le ho se bala. Boloka:

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

Rea bala:

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

Tsohle di a sebetsa. Eaba re etsa qeto ea ho theha index ho Hazelcast ho batla ka:

map.addIndex("subscriberId", false);

Mme ha ba ngola setheo se secha, ba ile ba qala ho amohela ClassNotFoundException. Hazelcast o lekile ho kenyelletsa lethathamong, empa o ne a sa tsebe letho ka sehlopha sa rona mme a batla hore ho fanoe ka JAR e nang le sehlopha sena. Re entse joalo, ntho e 'ngoe le e' ngoe e ile ea sebetsa, empa bothata bo bocha bo ile ba hlaha: mokhoa oa ho ntlafatsa JAR ntle le ho emisa sehlopha ka ho feletseng? Hazelcast ha e nke JAR e ncha nakong ea ntlafatso ea node-by-node. Mothating ona re ile ra etsa qeto ea hore re ka phela ntle le ho batla index. Ha e le hantle, haeba u sebelisa Hazelcast e le lebenkele la bohlokoa, joale ntho e 'ngoe le e' ngoe e tla sebetsa? E seng joalo hantle. Mona hape boitšoaro ba IMap le TransactionalMap bo fapane. Moo IMap e sa tsotelleng, TransactionalMap e etsa phoso.

IMap. Re ngola lintho tse 5000, re li bale. Tsohle di lebeletswe.

@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());
    }
}

Empa ha e sebetse khoebong, re fumana 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();
        }
    });
}

Ka 3.8, ho ile ha hlaha mochine oa User Class Deployment. U ka khetha node e le 'ngoe e kholo ebe u ntlafatsa faele ea JAR ho eona.

Joale re fetotse mokhoa oa rona ka botlalo: re e hlophisa ka borona ho ba JSON ebe re e boloka ho Hazelcast. Hazelcast ha e hloke ho tseba sebopeho sa litlelase tsa rona, 'me re ka ntlafatsa ntle le nako. Phetolelo ea lintho tsa domain e laoloa ke ts'ebeliso. Liphetolelo tse fapaneng tsa kopo li ka sebetsa ka nako e le 'ngoe,' me boemo bo ka khoneha ha kopo e ncha e ngola lintho tse nang le masimo a macha, empa ea khale ha e e-s'o tsebe ka masimo ana. 'Me ka nako e ts'oanang, kopo e ncha e bala lintho tse ngotsoeng ke kopo ea khale e se nang masimo a macha. Re sebetsana le maemo a joalo ka har'a ts'ebeliso, empa molemong oa ho nolofatsa ha re fetole kapa ho hlakola likarolo, re holisa litlelase feela ka ho eketsa likarolo tse ncha.

Kamoo re netefatsang tshebetso e phahameng

Maeto a mane ho ea Hazelcast - hantle, a mabeli ho database - a mpe

Ho ea cache bakeng sa data kamehla ho molemo ho feta ho ea polokelong ea litaba, empa ha u batle ho boloka lirekoto tse sa sebelisoeng. Re tlohela qeto ea hore na re ka boloka eng ho fihlela mohato oa ho qetela oa nts'etsopele. Ha ts'ebetso e ncha e ngotsoe, re bula ho rengoa ha lipotso tsohle ho PostgreSQL (log_min_duration_statement ho 0) ebe re etsa tlhahlobo ea boima ka metsotso e 20. Ho sebelisa li-log tse bokelitsoeng, lisebelisoa tse kang pgFouine le pgBadger li ka haha ​​​​litlaleho tsa tlhahlobo. Litlalehong, re batla haholo-holo lipotso tse tsamaeang butle le khafetsa. Bakeng sa lipotso tse liehang, re theha moralo oa ts'ebetso (TLHAKISO) 'me re lekola hore na potso e joalo e ka potlakisoa. Likopo tsa khafetsa tsa data e tšoanang ea ho kenya li kena hantle ka har'a cache. Re leka ho boloka lipotso li "flat", tafole e le 'ngoe ho potso ka' ngoe.

Tshebetso

SV joalo ka ts'ebeletso ea inthanete e ile ea kenngoa ts'ebetsong nakong ea selemo sa 2017, 'me e le sehlahisoa se arohaneng, SV e ile ea lokolloa ka November 2017 (ka nako eo e le boemong ba beta).

Ka nako e fetang selemo ea ts'ebetso, ha ho na mathata a tebileng ts'ebetsong ea ts'ebeletso ea inthanete ea CB. Re hlokomela tšebeletso ea inthaneteng ka Zabbix, bokella le ho tsamaisa ho tloha Bamboo.

Kabo ea seva ea SV e fanoa ka mokhoa oa liphutheloana tsa lehae: RPM, DEB, MSI. Hape bakeng sa Windows re fana ka sesebelisoa se le seng ka sebopeho sa EXE e le 'ngoe e kenyang seva, Hazelcast le Elasticsearch mochining o le mong. Qalong re ile ra bitsa mofuta ona oa ho kenya e le mofuta oa "demo", empa ho se ho hlakile hore ena ke khetho e tsebahalang haholo ea phepelo.

Source: www.habr.com

Eketsa ka tlhaloso