Тарҷума ва мутобиқсозии Microservices Java: Дастури амалӣ . Қисмҳои пешинаи дастур:
Биёед мушкилоти хоси микросервисҳоро дар Java дида бароем, ки аз чизҳои абстрактӣ сар карда, бо китобхонаҳои мушаххас ба анҷом мерасад.
Чӣ тавр микросервиси Java-ро устувор кардан мумкин аст?
Ба ёд оред, ки вақте шумо хидматҳои хурд эҷод мекунед, шумо аслан зангҳои усули JVM-ро барои зангҳои синхронии HTTP ё паёмнависии асинхронӣ тиҷорат мекунед. Дар ҳоле ки занги усулӣ асосан кафолат дода мешавад (бо қатъи ғайричашмдошти JVM), занги шабакавӣ бо нобаёнӣ эътимоднок аст. Он метавонад кор кунад, аммо бо сабабҳои гуногун кор накунад: шабака аз ҳад зиёд пурбор шудааст, қоидаи нави брандмауэр ҷорӣ шудааст ва ғайра. Барои дидани он, ки ин чӣ гуна фарқият дорад, биёед мисоли BillingService-ро дида бароем.Намунаҳои устувории HTTP/REST
Фарз мекунем, ки муштариён метавонанд аз вебсайти ширкати шумо китобҳои электронӣ харанд. Барои ин, шумо наваHow як хидматрасонии биллингро татбиқ кардед, ки метавонад ба мағозаи онлайни шумо занг занад, то ҳисобнома-фактураҳои воқеии PDF-ро тавлид кунад. Ҳоло мо ин зангро ба таври синхронӣ тавассути HTTP анҷом медиҳем (гарчанде ки ба таври асинхронӣ занг задан ба ин хидмат мантиқтар аст, зеро тавлиди PDF набояд аз нуқтаи назари корбар фавран бошад. Мо дар мисоли оянда ҳамон мисолро истифода хоҳем бурд. бахш ва ба фарқиятҳо нигаред).@Service
class BillingService {
@Autowired
private HttpClient client;
public void bill(User user, Plan plan) {
Invoice invoice = createInvoice(user, plan);
httpClient.send(invoiceRequest(user.getEmail(), invoice), responseHandler());
// ...
}
}
Барои ҷамъбаст, дар ин ҷо се натиҷаи эҳтимолии ин занги HTTP мавҷуданд.
- Хуб: занг гузашт, ҳисоб бомуваффақият сохта шуд.
- ТАЪХИР: Занг гузашт, аммо барои анҷоми он хеле тӯл кашид.
- ХАТОГӢ. Занг ноком шуд, шояд шумо дархости номувофиқ фиристодаед ё система кор намекунад.
Намунаҳои устувории паёмнависӣ
Биёед ба алоқаи асинхронӣ бодиққат назар кунем. Барномаи BillingService мо ҳоло метавонад ба ин монанд бошад, ба шарте ки мо Spring ва RabbitMQ-ро барои паёмнависӣ истифода мебарем. Барои эҷод кардани ҳисоб, мо ҳоло ба брокери паёмии RabbitMQ паём мефиристем, ки дар он ҷо якчанд коргарон интизори паёмҳои нав ҳастанд. Ин коргарон ҳисобнома-фактураҳои PDF эҷод мекунанд ва онҳоро ба корбарони мувофиқ мефиристанд.@Service
class BillingService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void bill(User user, Plan plan) {
Invoice invoice = createInvoice(user, plan);
// преобразует счет, например, в json и использует его How тело messages
rabbitTemplate.convertAndSend(exchange, routingkey, invoice);
// ...
}
}
Хатогиҳои эҳтимолӣ ҳоло каме фарқ мекунанд, зеро шумо дигар ҷавобҳои фаврии OK ё ERROR намегиред, мисли шумо бо пайвасти синхронии HTTP. Ба ҷои ин, мо метавонем се сенарияи эҳтимолӣ дошта бошем, ки метавонанд хато кунанд, ки метавонанд саволҳои зеринро ба вуҷуд оранд:
- Оё паёми ман аз ҷониби корманд расонида шуд ва истифода шуд? Ё гум шудааст? (Истифодабаранда ҳисобнома-фактураро қабул намекунад).
- Оё паёми ман танҳо як маротиба расонида шуд? Ё зиёда аз як маротиба расонида шуда, танҳо як маротиба коркард шудааст? (Истифодабаранда ҳисобнома-фактураҳои сершумор мегирад).
- Конфигуратсия: Аз "Оё ман калидҳои масир/номҳои дурустро барои мубодила истифода кардам" то "Оё брокери паёми ман дуруст танзим ва нигоҳдорӣ шудааст ё навбатҳои он пур аст?" (Истифодабаранда ҳисобнома-фактураро қабул намекунад).
- Агар шумо татбиқи JMS-ро ба монанди ActiveMQ истифода баред, шумо метавонед суръатро барои кафолати ӯҳдадориҳои дуфазавӣ (XA) мубодила кунед.
- Агар шумо RabbitMQ-ро истифода баред, аввал ин дастурро хонед ва сипас дар бораи тасдиқҳо, таҳаммулпазирии хатоҳо ва эътимоднокии паём дар маҷмӯъ бодиққат фикр кунед.
- Шояд касе дар танзими serverҳои Active ё RabbitMQ, махсусан дар якҷоягӣ бо кластерсозӣ ва Docker (касе? ;))
Кадом чаҳорчӯба беҳтарин роҳи ҳалли микросервисҳои Java хоҳад буд?
Аз як тараф, шумо метавонед як варианти хеле маъмулро ба монанди Spring Boot насб кунед . Он эҷоди файлҳои .jar-ро хеле осон мекунад, бо веб-serverи дарунсохт ба монанди Tomcat ё Jetty меояд ва онро зуд ва дар ҳама ҷо иҷро кардан мумкин аст. Идеалӣ барои сохтани барномаҳои микросервис. Ба наздикӣ, якчанд чаҳорчӯбаҳои махсуси микросервис, Kubernetes ё GraalVM пайдо шуданд, ки қисман аз барномасозии реактивӣ илҳом гирифта шудаанд. Инҳоянд чанд рақибони ҷолиб: Quarkus , Micronaut , Vert.x , Helidon . Дар ниҳоят, шумо бояд барои худ интихоб кунед, аммо мо метавонем ба шумо як чанд тавсияе диҳем, ки шояд комилан стандартӣ набошанд: Ба истиснои Spring Boot, ҳама чаҳорчӯбаҳои хидматрасонии хурд одатан ба таври бениҳоят зуд ва бо оғози қариб фаврӣ ба фурӯш бароварда мешаванд. , истифодаи ками хотира, миқёспазирӣ то беохир. Маводҳои маркетингӣ маъмулан дорои графикаи таъсирбахше мебошанд, ки платформаро дар паҳлӯи бегемоти Spring Boot ё ба ҳамдигар нишон медиҳанд. Ин, дар назария, асабҳои таҳиягаронро, ки лоиҳаҳои кӯҳнаро дастгирӣ мекунанд, муҳофизат мекунад, ки баъзан барои бор кардан чанд дақиқа вақтро мегирад. Ё таҳиягароне, ки дар абр кор мекунанд, ки мехоҳанд миқдори зиёди микроконтейнерҳоро дар тӯли 50 ms лозиманд, оғоз ё қатъ кунанд. Аммо мушкилот дар он аст, ки ин (сунъии) металлҳои урён ва вақти дубора ҷойгиркунӣ ба муваффақияти умумии лоиҳа мусоидат намекунанд. Ҳадди аққал онҳо аз инфрасохтори қавӣ, ҳуҷҷатҳои қавӣ, ҷомеа ва малакаҳои қавии таҳиякунанда камтар таъсир мерасонанд. Пас, беҳтар аст, ки ба он чунин назар кунед: Агар то ҳол:- Шумо имкон медиҳед, ки ORM-ҳои шумо васеъ кор кунанд ва садҳо дархостҳоро барои ҷараёнҳои оддии корӣ тавлид кунанд.
- Ба шумо гигаbyteҳои беохир лозим аст, то монолитҳои мураккаби худро иҷро кунед.
- Шумо codeи зиёд доред ва мураккабӣ он қадар баланд аст (мо ҳоло дар бораи оғози эҳтимолан суст ба мисли Hibernate сухан намегӯем), ки барои боркунии замимаи шумо чанд дақиқа вақт лозим аст.
Кадом китобхонаҳо барои зангҳои синхронии Java REST беҳтаранд?
Дар паҳлӯи техникии сатҳи паст, шумо эҳтимолан бо яке аз китобхонаҳои мизоҷҳои зерини HTTP хотима хоҳед ёфт: аслии Java HttpClient (аз Java 11), HttpClient Apache ё OkHttp . Аҳамият диҳед, ки ман дар ин ҷо "эҳтимол" мегӯям, зеро имконоти дигаре ҳастанд, ки аз мизоҷони хуби JAX-RS то муштариёни муосири WebSocket мебошанд . Дар ҳар сурат, тамоюл ба тавлиди муштарии HTTP, дур шудан аз муқовимат бо зангҳои HTTP мебошад. Барои ин ба шумо лозим аст, ки лоиҳаи OpenFeign ва ҳуҷҷатҳои онро ҳамчун нуқтаи ибтидоӣ барои хондани минбаъда дида бароед .Беҳтарин брокерҳо барои паёмнависии асинхронии Java кадомҳоянд?
Эҳтимол, шумо бо маъмултарин ActiveMQ (Classic ё Artemis) , RabbitMQ ё Kafka дучор хоҳед шуд .- ActiveMQ ва RabbitMQ брокерҳои анъанавии паёмҳои мукаммал мебошанд. Онҳо ҳамкории "брокери оқил" ва "истифодабарандагони аблаҳ" -ро дар бар мегиранд.
- Таърихан, ActiveMQ бартариҳои осони дохилкунӣ (барои санҷиш) дошт, ки онро бо танзимоти RabbitMQ/Docker/TestContainer сабук кардан мумкин аст.
- Кафкаро брокери анъанавии «ақл» номидан мумкин нест. Ба ҷои ин, он як мағозаи паёмҳои нисбатан "гунг" аст (файли сабт), ки коркарди истеъмолкунандагони оқилро талаб мекунад.
Кадом китобхонаҳоро ман метавонам барои санҷиши хидматҳои микросервис истифода барам?
Ин аз стеки шумо вобаста аст. Агар шумо экосистемаи баҳорӣ ҷойгир карда бошед, оқилона мебуд, ки асбобҳои мушаххаси чаҳорчӯбаро истифода баред . Агар JavaEE чизе монанди Arquillian бошад . Мумкин аст, ки ба Docker ва китобхонаи воқеан хуби Testcontainers назар андозед , ки бахусус барои ба осонӣ ва зуд таъсис додани базаи Oracle барои таҳияи маҳаллӣ ё санҷишҳои ҳамгироӣ кӯмак мекунад. Барои санҷиши тақаллубии тамоми serverҳои HTTP, аз Wiremock санҷед . Барои санҷидани паёмнависии асинхронӣ, кӯшиш кунед ActiveMQ ё RabbitMQ -ро амалӣ кунед ва сипас бо истифода аз Awaitility DSL санҷишҳо нависед . Илова бар ин, ҳама асбобҳои муқаррарии шумо истифода мешаванд - Junit , TestNG for AssertJ ва Mockito . Лутфан қайд кунед, ки ин рӯйхати пурра нест. Агар шумо асбоби дӯстдоштаи худро дар ин ҷо наёбед, лутфан онро дар қисмати шарҳҳо ҷойгир кунед.Чӣ тавр ба қайдгириро барои ҳама микросервисҳои Java фаъол кардан мумкин аст?
Бақайдгирӣ дар мавриди хидматрасонии хурд як мавзӯи ҷолиб ва хеле мураккаб аст. Ба ҷои доштани як файли журнал, ки шумо метавонед бо фармонҳои камтар ё grep идора кунед, шумо ҳоло n файли журнал доред ва шумо мехоҳед, ки онҳо аз ҳад зиёд пароканда нашаванд. Хусусиятҳои экосистемаи дарахтбурӣ дар ин мақола хуб тавсиф шудаанд (ба забони англисӣ). Ҳатман онро хонед ва ба бахши сабти мутамарказ аз нуқтаи назари микросервисҳо диққат диҳед . Дар амал, шумо бо равишҳои гуногун дучор хоҳед шуд: Мудири система скриптҳои муайянеро менависад, ки файлҳои логро аз serverҳои гуногун дар як файли журнал ҷамъоварӣ ва муттаҳид мекунанд ва онҳоро барои зеркашӣ дар serverҳои FTP ҷойгир мекунанд. Иҷрои комбинатсияи cat/grep/unig/sort дар сессияҳои мувозии SSH. Ин маҳз ҳамон чизест, ки Amazon AWS мекунад ва шумо метавонед ба мудири худ хабар диҳед. Асбоби монанди Graylog ё ELK Stack (Elasticsearch, Logstash, Kibana) -ро истифода баредЧӣ тавр микросервисҳои ман ҳамдигарро пайдо мекунанд?
То ба ҳол, мо тахмин мекардем, ки микросервисҳои мо дар бораи ҳамдигар медонанд ва IPS-и мувофиқро медонанд. Биёед дар бораи конфигуратсияи статикӣ сӯҳбат кунем. Ҳамин тавр, монолитҳои бонкии мо [ip = 192.168.200.1] медонад, ки он бояд бо serverи хатар сӯҳбат кунад [ip = 192.168.200.2], ки дар файли хосиятҳо рамзгузорӣ шудааст. Бо вуҷуди ин, шумо метавонед чизҳоро динамиктар кунед:- Сервери конфигуратсияи ба абр асосёфтаро истифода баред, ки аз он ҳама хидматрасониҳои хурд конфигуратсияҳои худро ба ҷои ҷойгиркунии файлҳои application.properties дар хидматрасонии микрои худ мегиранд.
- Азбаски намунаҳои хидматрасонии шумо метавонанд ҷойгиршавии онҳоро динамикӣ тағир диҳанд, ба хидматҳое назар кардан лозим аст, ки хидматҳои шумо дар куҷо зиндагӣ мекунанд, IP-ҳои онҳо ва чӣ гуна масир кардани онҳо медонанд.
- Хозир, ки хама чиз динамик аст, проблемахои нав ба нав ба миён меоянд, масалан, ба таври автоматй интихоб кардани рохбар: усто кист, ки бо супоришхои муайян кор мекунад, то ки онхо, масалан, ду маротиба кор карда нашаванд? Вақте ки роҳбар ноком мешавад, кӣ иваз мекунад? Дар кадом асос ивазкунӣ сурат мегирад?
Бо истифода аз микросервисҳои Java чӣ гуна авторизатсия ва аутентификатсияро ташкил кардан мумкин аст?
Ин мавзуъ низ шоёни тахеин аст. Боз ҳам, имконот аз аутентификатсияи асосии HTTPS бо рамзҳои сахткардашуда бо чаҳорчӯбаҳои амнияти фармоишӣ то ба кор андохтани насби Oauth2 бо serverи авторизатсияи худ иборатанд.Чӣ тавр ман метавонам боварӣ ҳосил кунам, ки ҳама муҳити ман якхелаанд?
Он чизе, ки барои ҷойгиркунӣ бе хидматрасонии хурд дуруст аст, барои ҷойгиркунӣ бо як хидмат низ дуруст аст. Маҷмӯаи Docker/Testcontainers ва Scripting/Ansible-ро санҷед.Саволе нест: мухтасар дар бораи YAML
Биёед як лаҳза аз китобхонаҳо ва масъалаҳои марбута дур шавем ва зуд ба Ямл назар андозем. Ин формати файл воқеан ҳамчун формат барои "навиштани конфигуратсия ҳамчун code" истифода мешавад. Он инчунин аз ҷониби асбобҳои оддӣ ба монанди Ansible ва гигантҳо ба монанди Kubernetes истифода мешавад. Барои эҳсос кардани дарди қафомонии YAML, кӯшиш кунед, ки файли оддии Ansible нависед ва бубинед, ки пеш аз он ки он мувофиқи интизорӣ кор кунад, то чӣ андоза шумо файлро таҳрир кунед. Ва ин гарчанде ки формат аз ҷониби ҳама IDE-ҳои асосӣ дастгирӣ мешавад! Пас аз он, барои анҷом додани хондани ин дастур баргардед.Yaml:
- is:
- so
- great
Дар бораи муомилоти тақсимшуда чӣ гуфтан мумкин аст? Санҷиши иҷроиш? Дигар мавзӯъҳо?
Шояд рӯзе дар нашрҳои ояндаи дастур. Ҳоло, ин ҳама аст. Бо мо бимонед!Масъалаҳои консептуалӣ бо Microservices
Ба ғайр аз мушкилоти мушаххаси хидматрасонии микросервисҳо дар Java, мушкилоти дигаре низ ҳастанд, ки бигӯем, ки дар ҳама гуна лоиҳаҳои хидматрасонии хурд пайдо мешаванд. Онҳо асосан ба созмон, даста ва идора дахл доранд.Мутобиқати Frontend ва Backend
Мутобиқати Frontend ва Backend мушкилоти хеле маъмул дар бисёр лоиҳаҳои микросервис мебошад. Ин чӣ маъно дорад? Танҳо дар он аст, ки дар монолитҳои хуби кӯҳна, таҳиягарони интерфейси веб як манбаи мушаххас барои ба даст овардани маълумот доштанд. Дар лоиҳаҳои хидматрасонии хурд, таҳиягарони пешрафта ногаҳон n манбаи гирифтани маълумотро доранд. Тасаввур кунед, ки шумо дар Java як навъ лоиҳаи микросервисҳои IoT (Internet of Things) эҷод карда истодаед. Фарз мекунем, ки шумо мошинҳои геодезӣ ва печҳои саноатиро дар тамоми Аврупо идора мекунед. Ва ин танӯрҳо ба шумо дар бораи ҳарорати худ ва монанди инҳо мунтазам навсозиҳо мефиристанд. Дер ё зуд шумо метавонед дар интерфейси администратор танӯрҳо пайдо кунед, эҳтимол бо истифода аз хидматҳои микросервисҳои "ҷустуҷӯи оташдон". Вобаста аз он, ки ҳамтоёни пуштибони шумо то чӣ андоза қонунҳои тарҳрезии домен ё хидматрасонии хурдро ба кор мебаранд, хидматрасонии "ёфт кардани танӯр" метавонад танҳо ID-ҳои танӯрро баргардонад, на дигар маълумот ба монанди намуд, модел ё макон. Барои ин кор, ба таҳиягарони фронтенд лозим меояд, ки як ё н занги иловагӣ (вобаста ба татбиқи пейджинг) дар хидмати микросервиси "дастрас кардани маълумотҳои оташдон" бо ID-ҳое, ки аз микросервиси аввал гирифтаанд, анҷом диҳанд. Ва гарчанде ки ин як мисоли оддӣ аст, гарчанде ки аз лоиҳаи воқеӣ (!) гирифта шудааст, ҳатто он мушкилоти зеринро нишон медиҳад: супермаркетҳо хеле маъмул гаштаанд. Ин барои он аст, ки бо онҳо ба шумо лозим нест, ки ба 10 ҷои гуногун барои харидани сабзавот, лимонад, пиццаи яхкардашуда ва коғази ташноб равед. Ба ҷои ин, шумо ба як ҷо меравед. Ин осонтар ва тезтар аст. Ҳамин чиз ба таҳиягарони фронт ва микросервис дахл дорад.Интизориҳои идоракунӣ
Менеҷмент дар таассуроти иштибоҳ қарор дорад, ки онҳо ҳоло бояд шумораи беохири таҳиягаронро барои як лоиҳа (умумӣ) киро кунанд, зеро таҳиягарон акнун метавонанд комилан мустақилона аз ҳамдигар кор кунанд, ҳар кадом дар хидмати микросервиси худ. Танҳо як кори каме ҳамгироӣ дар ниҳоят лозим аст (чанд пеш аз оғози кор). Дар асл, ин равиш хеле мушкил аст. Дар сархатҳои минбаъда мо кӯшиш хоҳем кард, ки чаро инро шарҳ диҳем."Порчаҳои хурдтар" ба "пораҳои беҳтар" баробар нестанд
Фарз кардан хатои калон мебуд, ки codeи ба 20 қисм тақсимшуда ҳатман аз як порчаи пурра сифати баландтар хоҳад дошт. Ҳатто агар мо сифатро аз нуқтаи назари техникӣ қабул кунем ҳам, хидматҳои инфиродии мо то ҳол метавонанд 400 дархости Hibernate-ро барои интихоби корбар аз пойгоҳи додаҳо иҷро кунанд ва қабатҳои codeи дастгирӣнашавандаро тай кунанд. Бори дигар, мо ба иқтибосҳои Саймон Браун бармегардем: агар шумо монолитҳоро дуруст сохта натавонед, сохтани микросервисҳои дуруст душвор хоҳад буд. Дар бораи таҳаммулпазирии хатогиҳо дар лоиҳаҳои хидматрасонии хурд сухан гуфтан хеле дер аст. Ба дараҷае, ки дидани он ки чӣ тавр микросервисҳо дар лоиҳаҳои воқеӣ кор мекунанд, баъзан даҳшатнок аст. Сабаби ин дар он аст, ки таҳиягарони Java на ҳамеша омодаанд, ки таҳаммулпазирии хатогиҳо, шабакасозӣ ва дигар мавзӯъҳои марбутро дар сатҳи зарурӣ омӯзанд. Худи "порчаҳо" хурдтаранд, аммо "қисмҳои техникӣ" калонтаранд. Тасаввур кунед, ки аз дастаи микросервисҳои шумо хоҳиш карда мешавад, ки барои ворид шудан ба системаи пойгоҳи додаҳо як хидмати техникӣ нависад, масалан:@Controller
class LoginController {
// ...
@PostMapping("/login")
public boolean login(String username, String password) {
User user = userDao.findByUserName(username);
if (user == null) {
// обработка варианта с несуществующим пользователем
return false;
}
if (!user.getPassword().equals(hashed(password))) {
// обработка неверного пароля
return false;
}
// 'Ю-ху, залогинorсь!';
// установите cookies, делайте, что угодно
return true;
}
}
Акнун дастаи шумо метавонад қарор кунад (ва шояд ҳатто одамони тоҷирро бовар кунонад) ки ин ҳама хеле содда ва дилгиркунанда аст, ба ҷои навиштани хидмати воридшавӣ, беҳтар аст, ки хидматрасонии воқеан муфиди UserStateChanged-ро бидуни ягон оқибатҳои воқеӣ ва воқеии тиҷорат нависед. Ва азбаски баъзе одамон дар айни замон ба Java мисли динозавр муносибат мекунанд, биёед микросервиси UserStateChanged-и худро дар Эрланги мӯд нависем. Ва биёед кӯшиш кунем, ки дарахтони сурху сиёҳро дар ҷое истифода барем, зеро Стив Йегге навиштааст, ки шумо бояд онҳоро дарун донед, то ба Google муроҷиат кунед. Аз нуқтаи назари ҳамгироӣ, нигоҳдорӣ ва тарҳрезии умумӣ, ин ба мисли навиштани қабатҳои рамзи спагетти дар дохor як монолит бад аст. Намунаи сунъӣ ва оддӣ? Ин дуруст аст. Бо вуҷуди ин, ин метавонад дар воқеият рӯй диҳад.
Қисмҳои камтар - фаҳмиши камтар
Пас табиатан савол дар бораи фаҳмидани система дар маҷмӯъ, равандҳо ва ҷараёнҳои кори он ба миён меояд, аммо дар айни замон шумо ҳамчун таҳиякунанда танҳо барои кор кардан дар микросервиси ҷудошудаи худ масъул ҳастед [95: login-101: updateUserProfile]. Он бо параграфи қаблӣ мувофиқат мекунад, аммо вобаста ба созмони шумо, сатҳи эътимод ва муоширати шумо, ин метавонад боиси нофаҳмиҳои зиёд, китф даркашӣ ва гунаҳкорӣ гардад, агар дар занҷири хидматрасонии микросервис тасодуфӣ рух диҳад. Ва касе нест, ки масъулияти пурраи ҳодисаро ба дӯш гирад. Ва ин умуман масъалаи беинсофӣ нест. Дарвоқеъ, пайваст кардани қисмҳои гуногун ва дарк кардани ҷои онҳо дар тасвири умумии лоиҳа хеле душвор аст.Алоқа ва хизматрасонӣ
Дараҷаи алоқа ва хидмат вобаста ба андозаи ширкат хеле фарқ мекунад. Бо вуҷуди ин, муносибати умумӣ равшан аст: ҳар қадар бештар, мушкилот бештар.- Микросервиси №47-ро кӣ идора мекунад?
- Оё онҳо танҳо як versionи нави номувофиқи микросервисро ҷойгир карданд? Ин дар куҷо ҳуҷҷатгузорӣ шудааст?
- Барои дархост кардани хусусияти нав ман бояд бо кӣ сӯҳбат кунам?
- Пас аз он ки ягона шахсе, ки ин забонро медонист, аз ширкат хориҷ шуд, ки он микросервисро дар Эрланг дастгирӣ мекунад?
- Ҳамаи дастаҳои хидматрасонии хурди мо на танҳо бо забонҳои гуногуни барномасозӣ, балки дар минтақаҳои гуногуни вақт кор мекунанд! Мо хамаи инро чй тавр дуруст координация мекунем?
GO TO FULL VERSION