M’nkhaniyi tikambirana mmene tinayambira komanso chifukwa chake tinayambira Njira yolumikizirana - makina omwe amasamutsa zidziwitso pakati pa mapulogalamu a kasitomala ndi 1C: Ma seva abizinesi - kuchokera pakukhazikitsa ntchito mpaka kuganiza kudzera muzomanga ndi kukhazikitsa.
The Interaction System (yotchedwa SV) ndi makina otumizirana mameseji ogawidwa, osalolera zolakwika ndi kutumiza kotsimikizika. SV idapangidwa ngati ntchito yolemetsa kwambiri yokhala ndi scalability yayikulu, yomwe imapezeka ngati ntchito yapaintaneti (yoperekedwa ndi 1C) komanso ngati chinthu chopangidwa ndi misala chomwe chingagwiritsidwe ntchito pazida zanu za seva.
SV imagwiritsa ntchito zosungirako zogawidwa hazelcast ndi search engine Elasticsearch. Tikambirananso za Java ndi momwe timakulira mopingasa PostgreSQL.
Kupanga kwa vuto
Kuti tifotokoze momveka bwino chifukwa chomwe tidapangira Interaction System, ndikuwuzani pang'ono za momwe chitukuko cha ntchito zamabizinesi mu 1C chimagwirira ntchito.
Poyamba, pang'ono za ife kwa iwo omwe sadziwa zomwe timachita :) Tikupanga 1C:Enterprise teknoloji nsanja. Pulatifomuyi imaphatikizapo chida cha chitukuko cha ntchito zamalonda, komanso nthawi yothamanga yomwe imalola kuti ntchito zamalonda ziziyenda pamtunda.
Paradigm yokulitsa kasitomala-seva
Ntchito zamabizinesi zomwe zidapangidwa pa 1C:Enterprise imagwira ntchito pamagawo atatu kasitomala-seva zomangamanga "DBMS - seva yogwiritsira ntchito - kasitomala". Khodi yofunsira yolembedwa mkati chinenero chomangidwa mu 1C, ikhoza kuchitidwa pa seva yofunsira kapena pa kasitomala. Zonse zimagwira ntchito ndi zinthu zogwiritsira ntchito (zolemba, zolemba, ndi zina zotero), komanso kuwerenga ndi kulemba nkhokwe, zimangochitika pa seva. Kugwira ntchito kwa mafomu ndi mawonekedwe amalamulo kumayendetsedwanso pa seva. Wogula amachita kulandira, kutsegula ndi kusonyeza mafomu, "kulankhulana" ndi wogwiritsa ntchito (machenjezo, mafunso ...), mawerengedwe ang'onoang'ono m'mawonekedwe omwe amafunikira kuyankha mwamsanga (mwachitsanzo, kuchulukitsa mtengo ndi kuchuluka), kugwira ntchito ndi mafayilo am'deralo, kugwira ntchito ndi zida.
M'makhodi ogwiritsira ntchito, mitu yamayendedwe ndi ntchito ziyenera kuwonetsa mwatsatanetsatane komwe kachidindoko kachitikire - pogwiritsa ntchito &AtClient / &AtServer malangizo (&AtClient / &AtServer mu mtundu wa Chingerezi wachilankhulocho). Opanga 1C tsopano andiwongolera ponena kuti malangizowo ndi enieni akuluakulu, koma kwa ife izi sizofunika tsopano.
Mutha kuyimbira nambala ya seva kuchokera pamakina a kasitomala, koma simungathe kuyimbira nambala ya kasitomala kuchokera pa seva. Ichi ndi cholepheretsa chachikulu chomwe tidapanga pazifukwa zingapo. Makamaka, chifukwa code ya seva iyenera kulembedwa m'njira yoti izichita chimodzimodzi mosasamala kanthu komwe imatchedwa - kuchokera kwa kasitomala kapena kuchokera kwa seva. Ndipo pankhani yoyimba nambala ya seva kuchokera ku code ina ya seva, palibe kasitomala wotere. Ndipo chifukwa pakuchita ma code a seva, kasitomala yemwe adayitchayo amatha kutseka, kusiya kugwiritsa ntchito, ndipo seva sikhalanso ndi aliyense woyimbira.
Khodi yomwe imayendetsa batani lodina: kuyitana njira ya seva kuchokera kwa kasitomala idzagwira ntchito, kuyimbira njira ya kasitomala kuchokera pa seva sikungatero
Izi zikutanthauza kuti ngati tikufuna kutumiza uthenga wina kuchokera ku seva kupita ku ntchito ya kasitomala, mwachitsanzo, kuti mbadwo wa lipoti "lotalika" watha ndipo lipotilo likhoza kuwonedwa, tilibe njira yotereyi. Muyenera kugwiritsa ntchito zidule, mwachitsanzo, nthawi ndi nthawi fufuzani seva kuchokera pamakina a kasitomala. Koma njira iyi imadzaza makina ndi mafoni osafunikira, ndipo nthawi zambiri samawoneka okongola kwambiri.
Ndipo palinso chosowa, mwachitsanzo, foni ikafika SIP- poyimba foni, dziwitsani kasitomala za izi kuti agwiritse ntchito nambala ya woyimbirayo kuti aipeze mu nkhokwe ya anzawo ndikuwonetsa zambiri za wogwiritsa ntchitoyo. Kapena, mwachitsanzo, pamene oda ifika kumalo osungiramo katundu, dziwitsani kasitomala wa kasitomala za izi. Nthawi zambiri, pali nthawi zambiri pomwe njira yotereyi ingakhale yothandiza.
Pangani dongosolo kuti likhale lopanda malire. Kuchuluka kwa ma node kuyenera kuphatikizidwa ndi kuchuluka kwa ma node.
Реализация
Tidasankha kuti tisaphatikize gawo la seva la SV molunjika ku 1C: Enterprise nsanja, koma kuti tiyigwiritse ntchito ngati chinthu chosiyana, API yomwe ingatchulidwe kuchokera ku code ya 1C application solutions. Izi zinachitidwa pazifukwa zingapo, chachikulu chomwe chinali chakuti ndinkafuna kuti ndizitha kusinthanitsa mauthenga pakati pa mapulogalamu osiyanasiyana a 1C (mwachitsanzo, pakati pa Trade Management ndi Accounting). Mapulogalamu osiyanasiyana a 1C amatha kuthamanga pamitundu yosiyanasiyana ya 1C: nsanja ya Enterprise, kukhala pamaseva osiyanasiyana, ndi zina zambiri. Zikatero, kukhazikitsidwa kwa SV ngati chinthu chosiyana chomwe chili "mbali" ya kukhazikitsa kwa 1C ndiye yankho labwino kwambiri.
Chifukwa chake, tidaganiza zopanga SV ngati chinthu chosiyana. Tikupangira kuti makampani ang'onoang'ono agwiritse ntchito seva ya CB yomwe tidayika mumtambo wathu (wss://1cdialog.com) kuti apewe mtengo wokwera wokhudzana ndi kukhazikitsa ndikusintha kwa seva. Makasitomala akuluakulu atha kuwona kuti ndikofunikira kukhazikitsa ma seva awo a CB kumalo awo. Tinagwiritsa ntchito njira yofananira mumtambo wathu wa SaaS 1c Mwatsopano - imapangidwa ngati chinthu chopangidwa mochuluka kuti ikhazikike pamasamba amakasitomala, ndipo imayikidwanso mumtambo wathu https://1cfresh.com/.
Ntchito
Kuti tigawire katundu ndi kulolerana kwa zolakwika, sitidzatumiza pulogalamu imodzi ya Java, koma angapo, okhala ndi chowongolera patsogolo pawo. Ngati mukufuna kusamutsa uthenga kuchokera ku node kupita ku node, gwiritsani ntchito kusindikiza / kulembetsa ku Hazelcast.
Kulumikizana pakati pa kasitomala ndi seva kumadutsa pa websocket. Ndizoyenerana ndi machitidwe a nthawi yeniyeni.
Cache yogawidwa
Tinasankha pakati pa Redis, Hazelcast ndi Ehcache. Ndi 2015. Redis wangotulutsa gulu latsopano (latsopano, lowopsa), pali Sentinel yokhala ndi zoletsa zambiri. Ehcache sadziwa momwe angasonkhanitsire gulu (ntchitoyi idawonekera pambuyo pake). Tinaganiza zoyesera ndi Hazelcast 3.4.
Hazelcast imasonkhanitsidwa mumagulu kunja kwa bokosi. Munjira imodzi ya node, sizothandiza kwambiri ndipo ingagwiritsidwe ntchito ngati cache - sadziwa momwe mungatayire deta ku disk, ngati mutataya node yokhayo, mumataya deta. Timatumiza ma Hazelcasts angapo, pomwe timasunga deta yovuta. Sitikusungirako cache - sitisamala.
Kwa ife, Hazelcast ndi:
Kusungirako magawo a ogwiritsa ntchito. Zimatenga nthawi yayitali kuti tipite ku database ya gawoli nthawi iliyonse, kotero timayika magawo onse ku Hazelcast.
Posungira. Ngati mukuyang'ana mbiri ya ogwiritsa ntchito, yang'anani posungira. Analemba uthenga watsopano - ikani mu cache.
Mitu yolumikizana pakati pa zochitika zogwiritsira ntchito. Node imapanga chochitika ndikuchiyika pamutu wa Hazelcast. Malo ena ogwiritsira ntchito omwe adalembetsa pamutuwu amalandira ndikukonza chochitikacho.
Maloko a Cluster. Mwachitsanzo, timapanga zokambirana pogwiritsa ntchito kiyi yapadera (makambirano amodzi mkati mwa nkhokwe ya 1C):
Tinaona kuti palibe njira. Tidatenga loko, ndikuchiyang'ananso, ndikuchipanga. Ngati simuyang'ana loko mutatenga loko, ndiye kuti pali mwayi woti ulusi wina unayang'ananso panthawiyo ndipo tsopano ayesa kupanga zokambirana zomwezo - koma zilipo kale. Simungathe kutseka pogwiritsa ntchito cholumikizira kapena chokhazikika cha java. Kupyolera mu nkhokwe - imachedwa, ndipo ndi chisoni kwa nkhokwe; kudzera ku Hazelcast - ndizomwe mukufunikira.
Kusankha DBMS
Tili ndi zokumana nazo zambiri komanso zopambana pogwira ntchito ndi PostgreSQL ndikuthandizana ndi omwe akupanga DBMS iyi.
Sizophweka ndi gulu la PostgreSQL - lilipo XL, XC, Citus, koma kawirikawiri awa si NoSQL omwe amatuluka m'bokosi. Sitinaganizire NoSQL ngati malo osungira; zinali zokwanira kuti titenge Hazelcast, yomwe sitinagwirepo nayo ntchito.
Ngati mukufuna kukulitsa database yolumikizana, ndiye kuti kugawa. Monga mukudziwira, ndi sharding timagawa nkhokwe m'magawo osiyana kuti aliyense aikidwe pa seva yapadera.
Mtundu woyamba wa sharding wathu udaganiza zotha kugawa tebulo lililonse la pulogalamu yathu pamaseva osiyanasiyana mosiyanasiyana. Pali mauthenga ambiri pa seva A - chonde, tiyeni tisunthire gawo la tebulo ili ku seva B. Chisankhochi chinangofuula ponena za kukhathamiritsa msanga, kotero tinaganiza zodzichepetsera ku njira ya anthu ambiri.
Mutha kuwerenga za obwereketsa ambiri, mwachitsanzo, patsamba Citus Data.
SV ili ndi malingaliro ogwiritsira ntchito komanso olembetsa. Ntchito ndikukhazikitsa kwachindunji kwa bizinesi, monga ERP kapena Accounting, yokhala ndi ogwiritsa ntchito ndi data yabizinesi. Wolembetsa ndi bungwe kapena munthu yemwe m'malo mwake pulogalamuyo idalembetsedwa mu seva ya SV. Wolembetsa akhoza kukhala ndi mapulogalamu angapo olembetsedwa, ndipo mapulogalamuwa amatha kusinthana mauthenga wina ndi mnzake. Wolembetsayo adakhala wobwereka m'dongosolo lathu. Mauthenga ochokera kwa olembetsa angapo amatha kupezeka mumndandanda umodzi weniweni; ngati tiwona kuti wolembetsa wayamba kupanga magalimoto ambiri, timasunthira kumalo osiyana siyana (kapena ngakhale seva yachinsinsi).
Tili ndi nkhokwe yayikulu pomwe tebulo lamayendedwe limasungidwa ndi chidziwitso chokhudza malo onse olembetsa.
Popeza, mwa zina, SV ndi mesenjala, imafunikira kusaka mwachangu, kosavuta komanso kosinthika, poganizira ma morphology, kugwiritsa ntchito machesi osalongosoka. Tidaganiza kuti tisayambitsenso gudumu ndikugwiritsa ntchito injini yosakira yaulere Elasticsearch, yopangidwa kutengera laibulale Lucene. Timatumizanso Elasticsearch mu cluster (master - data - data) kuti athetse mavuto pakagwa kulephera kwa ma node ogwiritsira ntchito.
Pa github tapeza Pulogalamu ya Russian morphology kwa Elasticsearch ndikugwiritsa ntchito. Mu Elasticsearch index timasunga mizu ya mawu (yomwe plugin imazindikira) ndi N-grams. Pamene wosuta akulowetsa malemba kuti asake, timayang'ana malemba omwe alembedwa pakati pa N-grams. Mukasungidwa ku index, mawu oti "malemba" agawidwa kukhala ma N-gram awa:
Kuwonongeka kwa magwiridwe antchito poyerekeza ndi mtundu wakale sikuposa 10%
Timadzaza nkhokwe yoyeserera ndi data - kuti tichite izi, timalandira zambiri za olembetsa omwe akugwira ntchito kwambiri kuchokera pa seva yopanga, kuchulukitsa manambala ake ndi 5 (chiwerengero cha mauthenga, zokambirana, ogwiritsa ntchito) ndikuyesa mwanjira imeneyo.
Chochitika cha "Malumikizidwe Okha" adawonekera pazifukwa. Pali zochitika: ogwiritsa ntchito adalumikiza dongosolo, koma sanalowe nawo. Wogwiritsa ntchito aliyense amayatsa kompyuta nthawi ya 09:00 m'mawa, amakhazikitsa kulumikizana ndi seva ndipo amakhala chete. Anyamatawa ndi owopsa, pali ambiri a iwo - mapepala okhawo omwe ali nawo ndi PING / PONG, koma amasunga kugwirizana kwa seva (sangathe kusunga - bwanji ngati pali uthenga watsopano). Mayeserowa amabalanso momwe ambiri ogwiritsa ntchito amayesera kulowa mu dongosolo mu theka la ola. Zili zofanana ndi kuyesa kupsinjika maganizo, koma cholinga chake ndi chothandizira choyamba - kotero kuti palibe zolephera (munthu sagwiritsa ntchito dongosolo, ndipo amagwa kale - n'zovuta kuganiza za chinachake choipa).
Zolemba zolembetsa zolembetsa zimayamba kuyambira pakuyambitsa koyamba. Tinayesa kupsinjika maganizo ndipo tinali otsimikiza kuti dongosolo silinachepetse panthawi yolemberana makalata. Koma ogwiritsa ntchito adabwera ndipo kulembetsa kudayamba kulephera chifukwa chakutha kwa nthawi. Polembetsa tinagwiritsa ntchito / dev / mwachisawawa, zomwe zimagwirizana ndi entropy ya dongosolo. Seva inalibe nthawi yodziunjikira entropy yokwanira ndipo SecureRandom yatsopano itafunsidwa, idaundana kwa masekondi makumi. Pali njira zambiri zotulutsira izi, mwachitsanzo: sinthani ku zosatetezedwa / dev / urandom, ikani bolodi lapadera lomwe limapanga entropy, pangani manambala osasintha pasadakhale ndikuzisunga mu dziwe. Tinatseka vutoli kwakanthawi ndi dziwe, koma kuyambira pamenepo takhala tikuyesa mayeso apadera olembetsa olembetsa atsopano.
Timagwiritsa ntchito ngati jenereta yonyamula katundu JMeter. Simadziwa kugwira ntchito ndi websocket; imafunikira pulogalamu yowonjezera. Zotsatira zoyambirira za funso la "jmeter websocket" ndi: zolemba kuchokera ku BlazeMeter, zomwe zimalimbikitsa pulogalamu yowonjezera ndi Maciej Zaleski.
Jetty yosinthidwa kuchokera ku 9.2.14 mpaka 9.3.12
Wokutidwa SimpleDateFormat mu ThreadLocal; SimpleDateFormat siyotetezedwa ndi ulusi, zomwe zidatsogolera ku NPE panthawi yothamanga
Kukonza kutayikira kwina kwa kukumbukira (kulumikizana kudatsekedwa molakwika pamene kulumikizidwa)
Ndipo komabe imayenda!
Memory idayamba kutha osati tsiku limodzi, koma awiri. Panalibe nthawi yotsala, kotero tinaganiza zoyambitsa ulusi wochepa, koma kwa othandizira anayi. Izi zikanakhala zokwanira kwa sabata imodzi.
Vutoli tsopano lakonzedwa mu 3.5, koma linali vuto kale. Tidapanga ma multiMaps atsopano okhala ndi mayina osinthika ndikuwachotsa malinga ndi malingaliro athu. Code idawoneka motere:
Ma graph a Jmeter-plugins ndi osavuta kumva kuposa omwe ali wamba. kugwirizana.
Za zomwe takumana nazo ndi Hazelcast
Hazelcast inali mankhwala atsopano kwa ife, tinayamba kugwira nawo ntchito kuchokera ku 3.4.1, tsopano seva yathu yopanga makina ikugwira ntchito 3.9.2 (panthawi yolemba, Hazelcast yatsopano ndi 3.10).
Kupanga ID
Tinayamba ndi zozindikiritsa zonse. Tiyerekeze kuti tikufunika Kutali kwina kwa chinthu chatsopano. Kutsatizana mu nkhokwe sikoyenera, matebulo akukhudzidwa ndi sharding - zikuwoneka kuti pali uthenga ID = 1 mu DB1 ndi uthenga ID = 1 mu DB2, simungathe kuyika ID iyi mu Elasticsearch, kapena Hazelcast. , koma choyipa kwambiri ngati mukufuna kuphatikiza deta kuchokera kuzinthu ziwiri kukhala imodzi (mwachitsanzo, kusankha kuti database imodzi ndiyokwanira kwa olembetsa awa). Mutha kuwonjezera ma AtomicLongs angapo ku Hazelcast ndikusunga kauntala pamenepo, ndiye kuti ntchito yopezera ID yatsopano ndikuwonjezeraAndGet kuphatikiza nthawi yofunsira ku Hazelcast. Koma Hazelcast ili ndi china chake chabwino kwambiri - FlakeIdGenerator. Akamalumikizana ndi kasitomala aliyense, amapatsidwa mtundu wa ID, mwachitsanzo, woyamba - kuyambira 1 mpaka 10, wachiwiri - kuchokera 000 mpaka 10, ndi zina zotero. Tsopano kasitomala atha kutulutsa zizindikiritso zatsopano payekha mpaka mtundu womwe waperekedwa kwa iwo utha. Zimagwira ntchito mwachangu, koma mukayambiranso kugwiritsa ntchito (ndi kasitomala wa Hazelcast), mndandanda watsopano umayamba - chifukwa chake kudumpha, ndi zina. Kuphatikiza apo, opanga samamvetsetsa kwenikweni chifukwa chake ma ID ndi ophatikizika, koma ndi osagwirizana. Tinayezera chilichonse ndikusintha kukhala ma UUID.
Mwa njira, kwa iwo amene akufuna kukhala ngati Twitter, pali laibulale ya Snowcast - uku ndikukhazikitsa kwa Snowflake pamwamba pa Hazelcast. Mutha kuziwona apa:
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);
}
Choyamba, tinaganiza zojambulitsa zinthu za makalasi athu ku Hazelcast. Mwachitsanzo, tili ndi kalasi ya Application, tikufuna kusunga ndikuwerenga. Sungani:
Maulendo anayi opita ku Hazelcast - abwino, awiri ku database - oyipa
Kupita ku cache kwa deta nthawi zonse kuli bwino kusiyana ndi kupita kumalo osungirako zinthu, koma simukufunanso kusunga zolemba zosagwiritsidwa ntchito. Timasiya chisankho cha zomwe tingasunge mpaka gawo lomaliza lachitukuko. Pamene ntchito yatsopanoyo ili ndi coded, timatsegula zolemba za mafunso onse mu PostgreSQL (log_min_duration_statement to 0) ndikuyesa kuyesa katundu kwa mphindi 20. Pogwiritsa ntchito zipika zomwe zasonkhanitsidwa, zofunikira monga pgFouine ndi pgBadger zimatha kupanga malipoti osanthula. M'malipoti, timayang'ana mafunso omwe amachedwa komanso pafupipafupi. Pamafunso apang'onopang'ono, timapanga dongosolo lokonzekera (KUFOTOKOZERA) ndikuwunika ngati funsoli likhoza kufulumizitsidwa. Kupempha pafupipafupi kwa data yolowetsamo kumalowa bwino mu cache. Timayesetsa kuti mafunso akhale "osalala", tebulo limodzi pafunso lililonse.
Ntchito
SV ngati ntchito yapaintaneti idayamba kugwira ntchito kumapeto kwa chaka cha 2017, ndipo ngati chinthu chosiyana, SV idatulutsidwa mu Novembala 2017 (panthawiyo mumtundu wa beta).
Pakutha kwa chaka chimodzi chogwira ntchito, sipanakhalepo zovuta zazikulu pakugwiritsa ntchito ntchito yapaintaneti ya CB. Timayang'anira ntchito zapaintaneti kudzera Zabbix, sonkhanitsani ndi kutumiza kuchokera Bambo.
Kugawa kwa seva ya SV kumaperekedwa m'njira zamaphukusi: RPM, DEB, MSI. Kuphatikiza pa Windows timapereka choyikira chimodzi mwa mawonekedwe a EXE imodzi yomwe imayika seva, Hazelcast ndi Elasticsearch pamakina amodzi. Poyamba tidatcha mtundu uwu wa kukhazikitsa ngati mtundu wa "demo", koma tsopano zawonekeratu kuti iyi ndiye njira yotchuka kwambiri yotumizira.