Ndikukonzekera kupereka nkhani yosiyana pa sitepe iliyonse.
Cholinga cha nkhanizi si momwe mungalembere ma microservices, koma momwe mungawapangire kuti azigwira ntchito mu dongosolo limodzi. Ngakhale kuti zinthu zonsezi nthawi zambiri zimakhala kunja kwa udindo wa wopanga mapulogalamuwo, ndikuganiza kuti ndizothandizabe kuzidziwa bwino 20% (zomwe, monga mukudziwa, zimapatsa 80% zotsatira). Mitu ina yofunika mopanda malire, monga chitetezo, idzasiyidwa mu polojekitiyi, popeza wolembayo amamvetsa pang'ono za dongosololi lapangidwa kuti ligwiritse ntchito payekha. Ndimalandira malingaliro aliwonse ndi kutsutsa kolimbikitsa.
Kupanga ma microservices
Ntchitozi zidalembedwa mu Java 11 pogwiritsa ntchito Spring Boot. Kulumikizana kwa Interservice kumakonzedwa pogwiritsa ntchito REST. Pulojekitiyi idzaphatikizapo chiwerengero chochepa cha mayesero (kotero kuti pambuyo pake pali chinachake choyesa ku Jenkins). Khodi yoyambira ntchitoyo ikupezeka pa GitHub: kumbuyo ΠΈ Chipata.
Kuti muwone momwe ntchito iliyonse ilili, Spring Actuator yawonjezedwa ku zomwe amadalira. Idzapanga / actuator/health endpoint ndipo idzabweretsanso 200 ngati ntchitoyo ili yokonzeka kuvomereza magalimoto, kapena 504 ngati pali vuto. Pachifukwa ichi, ichi ndi cheke chabodza, chifukwa mautumikiwa ndi osavuta, ndipo ngati atakhala ndi mphamvu yayikulu, amatha kukhala osapezeka konse kuposa kukhalabe akugwira ntchito pang'ono. Koma pamakina enieni, Actuator imatha kuthandizira kuzindikira vuto ogwiritsa ntchito asanayambe kulimbana nalo. Mwachitsanzo, ngati pali zovuta zofikira ku database, titha kuyankha izi poyimitsa zopempha ndi ntchito yosweka.
Utumiki wakumbuyo
Utumiki wakumbuyo umangowerengera ndikubwezera kuchuluka kwa zopempha zovomerezeka.
Controller kodi:
@RestController
public class RequestsCounterController {
private final AtomicLong counter = new AtomicLong();
@GetMapping("/requests")
public Long getRequestsCount() {
return counter.incrementAndGet();
}
}
Mayeso owongolera:
@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void firstRequest_one() throws Exception {
mockMvc.perform(get("/requests"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("1"));
}
}
Service Gateway
Chipatacho chidzatumiza pempho ku utumiki wakumbuyo, ndikuwonjezera ndi izi:
gateway id. Zimafunika kuti zitheke kusiyanitsa chitsanzo chimodzi cha chipata kuchokera ku china ndi yankho la seva
Chimodzi mwa zinthu zofunika kwambiri za fano ndi kukula kwake. Chithunzi chophatikizika chidzatsitsidwa mwachangu kuchokera kunkhokwe yakutali, kutenga malo ochepa, ndipo ntchito yanu iyamba mwachangu. Chithunzi chilichonse chimamangidwa pamaziko a chithunzi choyambira, ndipo tikulimbikitsidwa kusankha njira yochepetsetsa kwambiri. Njira yabwino ndi Alpine, kugawa kwathunthu kwa Linux ndi mapaketi ochepa.
Poyamba, tiyeni tiyese kulemba Dockerfile "pamphumi" (Ine ndinena nthawi yomweyo kuti iyi ndi njira zoipa, musachite izo):
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]
Apa tikugwiritsa ntchito chithunzi chochokera ku Alpine chokhala ndi JDK yokhazikitsidwa kale kuti timange pulojekiti yathu. Ndi lamulo la ADD, timawonjezera chikwatu cha src pa chithunzicho, chisonyezeni kuti chikugwira ntchito (WORKDIR) ndikuyamba kumanga. Lamulo la EXPOSE 8080 limasainira docker kuti ntchito yomwe ili mumtsukoyo idzagwiritsa ntchito doko 8080 (izi sizipangitsa kuti pulogalamuyo ipezeke kunja, koma ilola kuti pulogalamuyo ipezeke, mwachitsanzo, kuchokera ku chidebe china pa netiweki yomweyi. ).
Zotsatira zake ndi chithunzi cha 456 MB (chomwe chithunzi choyambira cha JDK chidatenga 340 MB). Ndipo zonse ngakhale kuti makalasi mu polojekiti yathu akhoza kuwerengedwa pa chala. Kuchepetsa kukula kwa chithunzi chathu:
Timagwiritsa ntchito masitepe ambiri. Mu sitepe yoyamba tidzamanga polojekitiyi, mu sitepe yachiwiri tidzakhazikitsa JRE, ndipo mu sitepe yachitatu tidzayikopera zonse mu chithunzi chatsopano cha Alpine choyera. Pazonse, zigawo zofunikira zokha zidzakhala mu chithunzi chomaliza.
Tiyeni tigwiritse ntchito modularization ya java. Kuyambira ndi Java 9, mutha kugwiritsa ntchito chida cha jlink kupanga JRE kuchokera pama module omwe mukufuna
Kenako, yambani chidebe chakumbuyo chotchedwa 'backend' ndi microservices-backend:1.0.0 chithunzi:
docker run -dit --name backend --network msvc-net microservices-backend:1.0.0
Ndizofunikira kudziwa kuti maukonde a mlatho amapereka kuchokera m'bokosi kupezeka kwa zotengera ndi mayina awo. Ndiye kuti, ntchito yakumbuyo ipezeka mkati mwa netiweki ya docker pa http://backend:8080.
Mu lamulo ili, tikuwonetsa kuti tikutumiza doko 80 la omwe atilandira ku doko 8080 la chidebecho. Timagwiritsa ntchito zosankha za env kuti tikhazikitse zosintha zachilengedwe zomwe zidzawerengedwa zokha ndi masika ndikuchotsa katundu kuchokera ku application.properties.