அனைவருக்கும் வணக்கம், குவார்கஸ் தொடரின் மூன்றாவது இடுகை இதோ!
ஜாவா மைக்ரோ சர்வீஸ்களை உருவாக்கும் போது, அது பெரும்பாலும் நம்பப்படுகிறது
இன்னும் கொஞ்சம் விரிவாக, ஸ்பிரிங் டெவலப்பர்கள் தங்கள் அன்றாட வேலையில் மைக்ரோ ப்ரோஃபைல் ஏபிஐயை எப்படிப் பயன்படுத்துவது என்பதைக் காட்ட, குவார்கஸ் ஸ்பிரிங் ஏபிஐகளை எவ்வாறு ஆதரிக்கிறது என்பதன் நோக்கம் மற்றும் விவரங்களை முதலில் பார்ப்போம். மைக்ரோ சர்வீஸ்களை உருவாக்கும் போது ஸ்பிரிங் டெவலப்பர்களுக்கு பயனுள்ளதாக இருக்கும் மைக்ரோ ப்ரோஃபைல் ஏபிஐகளை நாங்கள் காப்போம்.
ஏன் குவார்கஸ்? முதலாவதாக, இது நேரடி குறியீட்டு முறை, அதாவது மைக்ரோ ப்ரோஃபைல் ஏபிஐ, ஸ்பிரிங் ஏபிஐ மற்றும் பிற ஜாவா ஏபிஐகளில் ஏதேனும் மாற்றங்களைத் தானாக மீண்டும் ஏற்றுவது, இது ஒரே ஒரு கட்டளையுடன் செய்யப்படுகிறது: mvn quarkus:dev. இரண்டாவதாக, விவாதிக்கப்பட்டது
Quarkus இல் MicroProfile APIகளுடன் Spring APIகளை எப்படிப் பயன்படுத்தலாம் என்பதை Spring டெவலப்பர்கள் புரிந்துகொள்ள உதவுவதைத் தவிர, MicroProfile பற்றி விரிவாகப் பேச மாட்டோம்.
கொள்கலன்கள் மற்றும் குபெர்னெட்ஸ்
இந்தக் கட்டுரையை எளிமையாக வைத்திருக்க, ஆதரவின் உயர்மட்ட அம்சங்களை மட்டும் இங்கு காண்போம்.
குவார்கஸ் கூட
இறுதியாக, குபெர்னெட்ஸை இலக்கு வரிசைப்படுத்தல் சூழலாக மையப்படுத்துவதன் மூலம், குபெர்னெட்ஸ் இயங்குதளத்தின் மட்டத்தில் இதேபோன்ற செயல்பாடு செயல்படுத்தப்படும் சந்தர்ப்பங்களில் குவார்கஸ் ஜாவா கட்டமைப்பைப் பயன்படுத்துவதில்லை. குபெர்னெட்டஸ் மற்றும் ஸ்பிரிங் டெவலப்பர்கள் பயன்படுத்தும் வழக்கமான ஜாவா கட்டமைப்புகளுக்கு இடையிலான செயல்பாட்டு கடிதத்தின் வரைபடத்தை அட்டவணை 1 வழங்குகிறது.
அட்டவணை 1. ஜாவா ஃப்ரேம்வொர்க்குகள் மற்றும் குபெர்னெட்ஸ் இடையேயான செயல்பாட்டு கடிதப் பரிமாற்றத்தின் வரைபடம்.
செயல்பாட்டு
பாரம்பரிய வசந்த காலணி
Kubernetes
சேவை கண்டுபிடிப்பு
யுரேகா
டிஎன்எஸ்
கட்டமைப்பு
ஸ்பிரிங் கிளவுட் கட்டமைப்பு
வரைபடங்கள்/ரகசியங்களை உள்ளமைக்கவும்
சுமை சமநிலை
ரிப்பன் (வாடிக்கையாளர் பக்கம்)
சேவை, பிரதி கட்டுப்படுத்தி (சர்வர் பக்கம்)
உதாரணத்திலிருந்து குறியீட்டைத் தொகுத்து இயக்குதல்
இந்த கட்டுரையில் நாம் குறிப்பிடுகிறோம்
ஸ்பிரிங் ஃப்ரேம்வொர்க் APIகள்
சார்பு ஊசி
குவார்கஸ் ஒரு வரம்பை ஆதரிக்கிறது
В
அட்டவணை 2. ஆதரிக்கப்படும் ஸ்பிரிங் DI APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
ஆதரிக்கப்படும் ஸ்பிரிங் DI அம்சங்கள்
உதாரணங்கள்
கன்ஸ்ட்ரக்டர் ஊசி
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
On கட்டமைப்பு
@Configuration
public class AppConfiguration {
@Bean(name = "capitalizeFunction")
public StringFunction capitalizer() {
return String::toUpperCase;
}
}
@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
@Override
public String apply(String s) {
return s;
}
}
@Service
public class MessageProducer {
@Value("${greeting.message}")
String message;
public String getPrefix() {
return message;
}
}
வலை கட்டமைப்பு
குவார்கஸ் JAX-RS, MicroProfile Rest Client, JSON-P மற்றும் JSON-B ஐ முதன்மை வலை நிரலாக்க மாதிரியாக ஆதரிக்கிறது என்பதை மைக்ரோ ப்ரோஃபைல் பயனர்கள் விரும்புவார்கள். Spring Web API, குறிப்பாக REST இடைமுகங்களுக்கான Quarkus இன் சமீபத்திய ஆதரவில் ஸ்பிரிங் டெவலப்பர்கள் மகிழ்ச்சி அடைவார்கள். ஸ்பிரிங் டிஐயைப் போலவே, ஸ்பிரிங் வெப் ஏபிஐ ஆதரவின் முக்கிய குறிக்கோள், மைக்ரோ ப்ரோஃபைல் ஏபிஐகளுடன் இணைந்து ஸ்பிரிங் வெப் ஏபிஐகளைப் பயன்படுத்த ஸ்பிரிங் டெவலப்பர்களை இயக்குவதாகும். ஆதரிக்கப்படும் ஸ்பிரிங் வெப் ஏபிஐகளை எவ்வாறு பயன்படுத்துவது என்பதற்கான எடுத்துக்காட்டுகள் அட்டவணை 3 இல் வழங்கப்பட்டுள்ளன, மேலும் இந்தத் தலைப்பைப் பற்றிய கூடுதல் தகவல்களையும் எடுத்துக்காட்டுகளையும் குவார்கஸ் டுடோரியலில் காணலாம்
அட்டவணை 3. ஆதரிக்கப்படும் Spring Web APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
ஆதரிக்கப்படும் ஸ்பிரிங் வெப் அம்சங்கள்
உதாரணங்கள்
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@பாத்வேரியபிள்
@குக்கீ மதிப்பு
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (பகுதி)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
வசந்த தரவு JPA
ஹைபர்னேட் ORM ஐப் பயன்படுத்தி குவார்கஸ் JPA ஐ ஆதரிக்கிறது என்பதை மைக்ரோ ப்ரோஃபைல் பயனர்கள் பாராட்டுவார்கள். ஸ்பிரிங் டெவலப்பர்களுக்கு ஒரு நல்ல செய்தியும் உள்ளது: குவார்கஸ் பொதுவான ஸ்பிரிங் டேட்டா JPA குறிப்புகள் மற்றும் வகைகளை ஆதரிக்கிறது. ஆதரிக்கப்படும் ஸ்பிரிங் டேட்டா JPA APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள் அட்டவணை 4 இல் கொடுக்கப்பட்டுள்ளன.
В
அட்டவணை 4. ஆதரிக்கப்படும் ஸ்பிரிங் டேட்டா JPA APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
ஆதரிக்கப்படும் ஸ்பிரிங் டேட்டா JPA அம்சங்கள்
உதாரணங்கள்
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
களஞ்சியம்
Jpa களஞ்சியம்
பேஜிங் மற்றும் வரிசைப்படுத்தல் களஞ்சியம்
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
களஞ்சிய துண்டுகள்
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
பெறப்பட்ட வினவல் முறைகள்
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
பயனர் வரையறுக்கப்பட்ட வினவல்கள்
public interface MovieRepository
extends CrudRepository {
Movie findFirstByOrderByDurationDesc();
@Query("select m from Movie m where m.rating = ?1")
Iterator findByRating(String rating);
@Query("from Movie where title = ?1")
Movie findByTitle(String title);
}
MicroProfile APIகள்
தவறு சகிப்புத்தன்மை
கேஸ்கேடிங் தோல்விகளைத் தடுப்பதற்கும் நம்பகமான மைக்ரோ சர்வீஸ் கட்டமைப்புகளை உருவாக்குவதற்கும் தவறு சகிப்புத்தன்மை கட்டுமானங்கள் மிகவும் முக்கியம். ஸ்பிரிங் டெவலப்பர்கள் பல ஆண்டுகளாக தவறு சகிப்புத்தன்மைக்கு சர்க்யூட் பிரேக்கர்களைப் பயன்படுத்துகின்றனர்.
அட்டவணை 5. ஆதரிக்கப்படும் MicroProfile Fault Tolerance APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
MicroProfile தவறு சகிப்புத்தன்மை அம்சங்கள்
விளக்கம்
உதாரணங்கள்
@Asynchronous
ஒரு தனி நூலில் தர்க்கத்தை செயல்படுத்துதல்
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@பல்க்ஹெட்
ஒரே நேரத்தில் கோரிக்கைகளின் எண்ணிக்கையை வரம்பிடவும்
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@சுற்று பிரிப்பான்
ஸ்மார்ட் தோல்வியைக் கையாளுதல் மற்றும் தோல்விகளில் இருந்து மீள்தல்
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
தோல்வி ஏற்பட்டால் மாற்று தர்க்கத்தை அழைப்பது
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
கோரிக்கை தோல்வியில் மீண்டும் முயற்சிக்கவும்
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
தோல்வி கட்டுப்பாட்டு நேரம் முடிந்தது
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
சோதனை சேவைகள் (சேவை ஆரோக்கியம்)
சிறப்பு சேவைகளைப் பயன்படுத்தி கொள்கலன்களின் ஆரோக்கியத்தை Kubernetes இயங்குதளங்கள் கண்காணிக்கின்றன. சேவைகளைக் கண்காணிக்க அடிப்படை இயங்குதளத்தை அனுமதிக்க, ஸ்பிரிங் டெவலப்பர்கள் பொதுவாக தனிப்பயன் ஹெல்த்இண்டிகேட்டர் மற்றும் ஸ்பிரிங் பூட் ஆக்சுவேட்டரைப் பயன்படுத்துகின்றனர். குவார்கஸில், மைக்ரோ ப்ரோஃபைல் ஹெல்த் மூலம் இதைச் செய்யலாம், இது இயல்புநிலையாக ஒரு லைவ்னெஸ் காசோலையைச் செய்கிறது, ஆனால் ஒரே நேரத்தில் உயிரோட்டத்தையும் தயார்நிலையையும் சரிபார்க்க கட்டமைக்க முடியும். ஆதரிக்கப்படும் மைக்ரோ ப்ரோஃபைல் ஹெல்த் ஏபிஐகளை எவ்வாறு பயன்படுத்துவது என்பதற்கான எடுத்துக்காட்டுகள் அட்டவணை 6 இல் வழங்கப்பட்டுள்ளன, மேலும் கூடுதல் தகவல்கள் குவார்கஸ் கையேட்டில் வழங்கப்பட்டுள்ளன.
அட்டவணை 6: ஆதரிக்கப்படும் MicroProfile Health APIகளின் பயன்பாட்டு எடுத்துக்காட்டுகள்.
மைக்ரோ ப்ரோஃபைல் ஹெல்த் அம்சங்கள்
விளக்கம்
உதாரணங்கள்
@வாழ்க்கை
பிளாட்ஃபார்ம் தோல்வியுற்ற கண்டெய்னரைஸ் செய்யப்பட்ட பயன்பாடுகளை மறுதொடக்கம் செய்கிறது
இறுதிப்புள்ளி:
புரவலன்:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@ தயார்நிலை
பிளாட்ஃபார்ம் தயாராக இல்லை என்றால், கொள்கலன் செய்யப்பட்ட பயன்பாடுகளுக்கு போக்குவரத்தை அனுப்பாது
இறுதிப்புள்ளி:
புரவலன்:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
அளவீடுகள்
பயன்பாடுகள் செயல்பாட்டு நோக்கங்களுக்காக (செயல்திறன் SLAகளை கண்காணிக்க) அல்லது செயல்படாத நோக்கங்களுக்காக (வணிக SLAகள்) அளவீடுகளை வழங்குகின்றன. ஸ்பிரிங் டெவலப்பர்கள் ஸ்பிரிங் பூட் ஆக்சுவேட்டர் மற்றும் மைக்ரோமீட்டரைப் பயன்படுத்தி அளவீடுகளை வழங்குகிறார்கள். இதையொட்டி, அடிப்படை அளவீடுகள் (ஜேவிஎம் மற்றும் இயக்க முறைமை), விற்பனையாளர் அளவீடுகள் (குவார்கஸ்) மற்றும் பயன்பாட்டு அளவீடுகளை வழங்க குவார்கஸ் மைக்ரோ ப்ரோஃபைல் மெட்ரிக்ஸைப் பயன்படுத்துகிறது. MicroProfile Metrics க்கு JSON மற்றும் OpenMetrics (Prometheus) வெளியீட்டு வடிவங்களை செயல்படுத்துவதற்கு ஆதரவு தேவை. MicroProfile Metrics API ஐப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள் அட்டவணை 7 இல் கொடுக்கப்பட்டுள்ளன.
В
அட்டவணை 7. MicroProfile Metrics APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
மைக்ரோ ப்ரோஃபைல் மெட்ரிக்ஸ் அம்சங்கள்
விளக்கம்
உதாரணங்கள்
@எண்ணப்பட்டது
சிறுகுறிப்பு செய்யப்பட்ட பொருள் எத்தனை முறை அழைக்கப்பட்டது என்பதைக் கணக்கிடும் எதிர் கவுண்டரைக் குறிக்கிறது
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
சிறுகுறிப்பு செய்யப்பட்ட பொருளுக்கு ஒரே நேரத்தில் அழைப்புகளின் எண்ணிக்கையைக் கணக்கிடும் அளவைக் குறிக்கிறது
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@கேஜ்
சிறுகுறிப்பு செய்யப்பட்ட பொருளின் மதிப்பை அளவிடும் கேஜ் சென்சாரைக் குறிக்கிறது
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@மீட்டர்
சிறுகுறிப்பு செய்யப்பட்ட பொருளின் அழைப்பு அதிர்வெண்ணைக் கண்காணிக்கும் மீட்டர் உணரியைக் குறிக்கிறது
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
ஒரு மெட்ரிக்கை உள்ளிட அல்லது உருவாக்குவதற்கான கோரிக்கையைப் பெறும்போது, மெட்டாடேட்டா பற்றிய தகவலைக் கொண்ட சிறுகுறிப்பு
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
சிறுகுறிப்பு செய்யப்பட்ட பொருளின் கால அளவைக் கண்காணிக்கும் டைமரைக் குறிக்கிறது
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
அளவீடுகள் இறுதிப்புள்ளிகள்
விண்ணப்ப அளவீடுகள்
அடிப்படை அளவீடுகள்
விற்பனையாளர் அளவீடுகள்
அனைத்து அளவீடுகள்
MicroProfile ஓய்வு கிளையண்ட்
மைக்ரோ சர்வீஸ்கள் பெரும்பாலும் RESTful இறுதிப்புள்ளிகளை வழங்குகின்றன, அவை தொடர்புடைய கிளையன்ட் APIகள் வேலை செய்ய வேண்டும். RESTful endpointகளைப் பயன்படுத்த, Spring டெவலப்பர்கள் பொதுவாக RestTemplate ஐப் பயன்படுத்துகின்றனர். இந்தச் சிக்கலைத் தீர்க்க Quarkus மைக்ரோ ப்ரோஃபைல் ரெஸ்ட் கிளையண்ட் APIகளை வழங்குகிறது, அவற்றின் பயன்பாட்டின் எடுத்துக்காட்டுகள் அட்டவணை 8 இல் கொடுக்கப்பட்டுள்ளன.
В
அட்டவணை 8. MicroProfile Rest Client APIகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்.
MicroProfile ஓய்வு கிளையண்ட் அம்சங்கள்
விளக்கம்
உதாரணங்கள்
@RegisterRestClient
தட்டச்சு செய்யப்பட்ட ஜாவா இடைமுகத்தை REST கிளையண்டாகப் பதிவு செய்கிறது
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
தட்டச்சு செய்யப்பட்ட REST கிளையன்ட் இடைமுகத்தின் நிகழ்வை செயல்படுத்துவதைக் குறிக்கிறது
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
பிரார்த்தனையுடன்
REST இறுதிப்புள்ளியை அழைக்கிறது
System.out.println(
restClient.getSalutation());
mp-rest/url
REST இறுதிப் புள்ளியைக் குறிப்பிடுகிறது
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
முடிவுகளை
இந்த வலைப்பதிவில், முதன்மையாக ஸ்பிரிங் டெவலப்பர்களை இலக்காகக் கொண்டு, ஜாவா மைக்ரோ சர்வீஸ்களை உருவாக்க, குவார்கஸில் உள்ள மைக்ரோ ப்ரோஃபைல் ஏபிஐகளுடன் ஸ்பிரிங் ஏபிஐகளை எவ்வாறு பயன்படுத்துவது என்பதை விரைவாகப் பார்த்தோம். ஒரு மில்லி விநாடிகள்.
நீங்கள் ஏற்கனவே புரிந்து கொண்டபடி, Spring மற்றும் MicroProfile APIகளுக்கான ஆதரவைப் பற்றிய கூடுதல் தகவல்கள் மற்றும் பல பயனுள்ள தகவல்களைக் காணலாம்
ஆதாரம்: www.habr.com