මෙම වසරේ අපි බහාලුම් තේමාවන් බැරෑරුම් ලෙස සංවර්ධනය කිරීමට සැලසුම් කරමු,
Java සහ JVM තවමත් අතිශයින් ජනප්රියයි, නමුත් සේවාදායක රහිත තාක්ෂණයන් සහ Cloud-native microservices සමඟ වැඩ කරන විට, Java සහ අනෙකුත් JVM භාෂා අඩුවෙන් භාවිතා කරනුයේ ඒවා මතකයේ ඉඩ ප්රමාණය වැඩි නිසා සහ පූරණය වීමට ප්රමාද වන නිසා ය. කෙටි කාලීන බහාලුම් සමඟ භාවිතය සඳහා දුර්වල ලෙස සුදුසුය. වාසනාවකට මෙන්, ක්වාර්කස්ට පින්සිදු වන්නට මේ තත්ත්වය දැන් වෙනස් වීමට පටන් ගෙන ඇත.
Superfast subatomic Java නව මට්ටමකට පැමිණ ඇත!
නිකුතු 42 ක්, මාස 8 ක ප්රජා වැඩ සහ විස්මිත සංවර්ධකයින් 177 ක් - මේ සියල්ලේ ප්රතිඵලය වූයේ 2019 නොවැම්බර් මාසයේදී නිකුත් වීමයි.
අද අපි ඔබට පෙන්වන්නේ ක්වාර්කස් අත්යවශ්ය සහ ප්රතික්රියාශීලී ක්රමලේඛන ආකෘති තනි ප්රතික්රියාශීලී හරයක් බවට ඒකාබද්ධ කරන ආකාරයයි. අපි කෙටි ඉතිහාසයකින් ආරම්භ කර ක්වාර්කස්ගේ ප්රතික්රියාශීලී මූලික ද්විත්වවාදය යනු කුමක්ද සහ කෙසේද යන්න පිළිබඳව විස්තරාත්මකව යන්නෙමු.
පළමුව, අපි ඉතිහාසය දෙස බලමු.
ධාරා සහ බහාලුම්
8u131 අනුවාදයෙන් පටන් ගෙන, ergonomics ක්රියාකාරීත්වයේ වැඩි දියුණු කිරීම් හේතුවෙන් Java බහාලුම් සඳහා අඩු වැඩි වශයෙන් ආධාර කිරීමට පටන් ගත්තේය. විශේෂයෙන්ම, JVM දැන් එය ක්රියාත්මක වන ප්රොසෙසර මධ්ය ගණන දන්නා අතර නූල් තටාක - සාමාන්යයෙන් fork/join pools - වින්යාසගත කළ හැක. ඇත්ත වශයෙන්ම, මෙය විශිෂ්ටයි, නමුත් අපි කියමු HTTP servlets භාවිතා කරන සහ Tomcat, Jetty, ආදියෙහි ධාවනය වන සාම්ප්රදායික වෙබ් යෙදුමක් අප සතුව ඇත. එහි ප්රතිඵලයක් ලෙස, මෙම යෙදුම සෑම ඉල්ලීමකටම වෙනම නූලක් ලබා දෙන අතර I/O මෙහෙයුම් සඳහා රැඳී සිටින විට, උදාහරණයක් ලෙස, දත්ත සමුදාය, ලිපිගොනු හෝ වෙනත් සේවාවන් වෙත ප්රවේශ වීමේදී මෙම නූල අවහිර කිරීමට ඉඩ සලසයි. එනම්, එවැනි යෙදුමක විශාලත්වය පවතින හර ගණන මත නොව, එකවර ඉල්ලීම් ගණන මත රඳා පවතී. මීට අමතරව, මෙයින් අදහස් කරන්නේ කෝර් ගණනට කුබර්නෙටස් හි ඇති කෝටා හෝ සීමාවන් මෙහි එතරම් ප්රයෝජනවත් නොවන අතර අවසානයේ කාරණය තෙරපීමකින් අවසන් වන බවයි.
මතකය වෙහෙසට පත්වීම
නූල් යනු මතකයයි. සහ අන්තර්-බහාලුම් මතක සීමාවන් කිසිසේත් කෝකටත් තෛලයක් නොවේ. යෙදුම් සහ නූල් ගණන වැඩි කිරීම ආරම්භ කරන්න, ඉක්මනින් හෝ පසුව ඔබට මාරුවීම් සංඛ්යාතයේ තීරණාත්මක වැඩි වීමක් සහ එහි ප්රතිඵලයක් ලෙස කාර්ය සාධනය පිරිහීමට ලක් වනු ඇත. එසේම, ඔබේ යෙදුම සම්ප්රදායික ක්ෂුද්ර සේවා රාමු භාවිතා කරන්නේ නම්, හෝ දත්ත සමුදායකට සම්බන්ධ වන්නේ නම්, හෝ හැඹිලි භාවිතා කරන්නේ නම්, හෝ වෙනත් ආකාරයකින් මතකය භාවිතා කරන්නේ නම්, ඔබට පැහැදිලිවම JVM එක ඇතුළත බැලීමට සහ එය මතකය විනාශ නොකර එය කළමනාකරණය කරන්නේ කෙසේදැයි බැලීමට ඔබට ඉඩ සලසන මෙවලමක් අවශ්ය වේ. JVM ම (උදාහරණයක් ලෙස, XX:+UseCGroupMemoryLimitForHeap). තවද, Java 9 සිට, JVM cgroups පිළිගැනීමට සහ ඒ අනුව අනුවර්තනය වීමට ඉගෙන ගෙන ඇතත්, මතකය වෙන් කිරීම සහ කළමනාකරණය කිරීම තරමක් සංකීර්ණ කාරණයක් ලෙස පවතී.
කෝටා සහ සීමාවන්
Java 11 CPU කෝටා සඳහා සහය හඳුන්වා දුන්නේය (PreferContainerQuotaForCPUCount වැනි). Kubernetes සීමාවන් සහ කෝටා සඳහා ද සහාය ලබා දෙයි. ඔව්, මේ සියල්ල අර්ථවත් කරයි, නමුත් යෙදුම නැවතත් වෙන් කළ කෝටාව ඉක්මවා ගියහොත්, අපි නැවතත් ප්රමාණයෙන් අවසන් වෙමු - සාම්ප්රදායික ජාවා යෙදුම්වල මෙන් - හර ගණන අනුව සහ එක් එක් නූලක් වෙන් කිරීම මගින් තීරණය වේ. ඉල්ලන්න, එහෙනම් මේ හැමදේකම තේරුමක් නැහැ.
ඊට අමතරව, ඔබ Kubernetes යටින් පවතින වේදිකාවේ කෝටා සහ සීමාවන් හෝ පරිමාණයෙන් බැහැර ශ්රිත භාවිතා කරන්නේ නම්, ගැටළුව ද විසඳෙන්නේ නැත. අපි සරලවම මුල් ගැටලුව විසඳීම සඳහා වැඩි සම්පත් වියදම් කරන්නෙමු, නැතහොත් අවසානයේ අධික ලෙස වියදම් කරන්නෙමු. එය පොදු පොදු වලාකුළක් තුළ ඉහළ බරක් ඇති පද්ධතියක් නම්, අපට ඇත්ත වශයෙන්ම අවශ්ය ප්රමාණයට වඩා වැඩි සම්පත් භාවිතා කිරීම නිසැකවම අවසන් වේ.
සහ මේ සියල්ල සමඟ කුමක් කළ යුතුද?
එය සරලව කිවහොත්, Netty වැනි අසමමුහුර්ත සහ අවහිර නොවන I/O පුස්තකාල සහ රාමු භාවිතා කරන්න,
අවහිර නොවන I/O සමඟ, සමාන්තරව ක්රියාත්මක කළ හැකි I/O නූල් සංඛ්යාව තීරණය කරන නිසා හර ගණන ප්රධාන පරාමිතියක් බවට පත්වේ. නිවැරදිව භාවිතා කළ විට, මෙය ඔබට හරය අතර බර ඵලදායී ලෙස බෙදා හැරීමට සහ අඩු සම්පත් සමඟ ඉහළ කාර්ය භාරයන් හැසිරවීමට ඉඩ සලසයි.
කොහොමද, ඒ ඔක්කොම?
නෑ, තව දෙයක් තියෙනවා. ප්රතික්රියාශීලී ක්රමලේඛනය සම්පත් වඩා හොඳින් භාවිතා කිරීමට උපකාරී වේ, නමුත් මිලකට ද පැමිණේ. විශේෂයෙන්, කේතය අවහිර නොකිරීමේ මූලධර්මවලට අනුව නැවත ලිවිය යුතු අතර I/O නූල් අවහිර කිරීමෙන් වළකින්න. තවද මෙය සංවර්ධනයේ සහ ක්රියාත්මක කිරීමේ සම්පූර්ණයෙන්ම වෙනස් ආකෘතියකි. තවද මෙහි ප්රයෝජනවත් පුස්තකාල රාශියක් ඇතත්, එය තවමත් සුපුරුදු චින්තනයේ රැඩිකල් වෙනසක් වේ.
පළමුව, ඔබ අසමමුහුර්තව ධාවනය වන කේතය ලිවීමට ඉගෙන ගත යුතුය. ඔබ අවහිර නොවන I/O භාවිතා කිරීමට පටන් ගත් පසු, ඉල්ලීමකට ප්රතිචාරයක් ලැබුණු විට සිදු විය යුතු දේ ඔබ පැහැදිලිව සඳහන් කළ යුතුය. සරලව අවහිර කිරීම සහ බලා සිටීම තවදුරටත් ක්රියා නොකරනු ඇත. ඒ වෙනුවට, ඔබට නැවත ඇමතුම් ලබා ගැනීමට, ප්රතික්රියාශීලී ක්රමලේඛනය හෝ අඛණ්ඩව භාවිතා කළ හැක. නමුත් එය සියල්ලම නොවේ: අවහිර නොවන I/O භාවිතා කිරීමට, ඔබට අවහිර නොවන සේවාදායකයන් සහ සේවාදායකයින් යන දෙකම අවශ්ය වේ, වඩාත් සුදුසු සෑම තැනකම. HTTP සම්බන්ධයෙන් ගත් කල, සියල්ල සරල ය, නමුත් දත්ත සමුදායන්, ගොනු පද්ධති සහ තවත් බොහෝ දේ ඇත.
සම්පූර්ණ අන්තයේ සිට අවසානය දක්වා ඇති ප්රතික්රියාශීලීත්වය කාර්යක්ෂමතාවය උපරිම කළද, එවැනි මාරුවක් ප්රායෝගිකව බඩට ගැනීමට අපහසු විය හැක. එබැවින්, ප්රතික්රියාශීලී සහ අත්යවශ්ය කේතය ඒකාබද්ධ කිරීමේ හැකියාව පූර්ව අවශ්යතාවයක් බවට පත්වේ:
- මෘදුකාංග පද්ධතියේ වැඩිපුරම පටවා ඇති ප්රදේශ වල සම්පත් ඵලදායී ලෙස භාවිතා කරන්න;
- එහි ඉතිරි කොටස්වල සරල මෝස්තර කේතය භාවිතා කරන්න.
ක්වාර්කස් හඳුන්වා දීම
ඇත්ත වශයෙන්ම, ක්වාර්කස්හි සාරය මෙයයි - එක් ධාවන කාල පරිසරයක් තුළ ප්රතික්රියාශීලී සහ අත්යවශ්ය ආකෘති ඒකාබද්ධ කිරීම.
Quarkus පදනම් වී ඇත්තේ Vert.x සහ Netty මත වන අතර, සංවර්ධකයාට උපකාර කිරීම සඳහා ඉහළින් ඇති ප්රතික්රියාශීලී රාමු සහ දිගු පරාසයක් ඇත. Quarkus නිර්මාණය කර ඇත්තේ HTTP ක්ෂුද්ර සේවා පමණක් නොව, සිදුවීම් මත පදනම් වූ ගෘහ නිර්මාණ ශිල්පය ගොඩනැගීම සඳහා ය. එහි ප්රතික්රියාශීලී ස්වභාවය නිසා, එය පණිවුඩකරණ පද්ධති (Apache Kafka, AMQP, ආදිය) සමඟ ඉතා ඵලදායී ලෙස ක්රියා කරයි.
උපක්රමය නම් අත්යවශ්ය සහ ප්රතික්රියාශීලී කේතය යන දෙකටම එකම ප්රතික්රියා එන්ජිම භාවිතා කරන්නේ කෙසේද යන්නයි.
ක්වාර්කස් මෙය විශිෂ්ට ලෙස කරයි. අත්යවශ්ය සහ ප්රතික්රියාකාරක අතර තේරීම පැහැදිලිය - දෙකම සඳහා ප්රතික්රියාකාරක කර්නලයක් භාවිතා කරන්න. එය සැබවින්ම උපකාරී වන්නේ ඉවෙන්ට්-ලූප් නූල්, හෙවත් IO නූල් හරහා ගමන් කරන සෑම දෙයක්ම පාහේ හසුරුවන වේගවත්, අවහිර නොවන කේතයකි. නමුත් ඔබ සතුව සම්භාව්ය REST හෝ සේවාදායක පාර්ශවීය යෙදුම් තිබේ නම්, Quarkus සතුව අනිවාර්ය ක්රමලේඛන ආකෘතියක් සූදානම්ව ඇත. උදාහරණයක් ලෙස, Quarkus හි HTTP සහය පදනම් වන්නේ අවහිර නොවන සහ ප්රතික්රියාශීලී එන්ජිමක් (Eclipse Vert.x සහ Netty) භාවිතය මතය. ඔබගේ යෙදුමට ලැබෙන සියලුම HTTP ඉල්ලීම් පළමුව සිදුවීම් ලූපයක් (IO නූල්) හරහා යවනු ලබන අතර පසුව ඉල්ලීම් කළමනාකරණය කරන කේතයේ කොටස වෙත යවනු ලැබේ. ගමනාන්තය මත පදනම්ව, ඉල්ලීම් කළමනාකරණ කේතය වෙනම නූලක් (ඊනියා සේවක නූල්, servlets සහ Jax-RS සඳහා භාවිතා කරන) හෝ මූලාශ්ර I/O නූල් (ප්රතික්රියා මාර්ගය) භාවිතා කළ හැක.
පණිවුඩකරණ පද්ධති සම්බන්ධක මඟින් Vert.x එන්ජිම මත ධාවනය වන අවහිර නොවන සේවාලාභීන් භාවිතා කරයි. එබැවින්, ඔබට පණිවිඩ යැවීමේ මිඩ්ල්වෙයාර් පද්ධති වලින් ඵලදායී ලෙස පණිවිඩ යැවීමට, ලැබීමට සහ සැකසීමට හැකිය.
අඩවියේ
ප්රතික්රියාකාරක මාර්ග භාවිතා කිරීම ප්රතික්රියාශීලී SQL සේවාලාභීන් ප්රතික්රියාශීලී පණිවිඩ යැවීම සමඟ Apache Kafka භාවිතා කිරීම ප්රතික්රියාශීලී පණිවිඩ යැවීම සමඟ AMQP භාවිතා කිරීම Vertx API භාවිතා කිරීම
අපි ඔබට බ්රවුසරයක් තුළ ප්රතික්රියාශීලී ක්රමලේඛනයේ විවිධ පැති ඉගැන්වීමට මාර්ගගත ප්රායෝගික නිබන්ධන ද නිර්මාණය කර ඇත්තෙමු, IDE අවශ්ය නොවේ, සහ පරිගණකයක් අවශ්ය නොවේ. ඔබට මෙම පාඩම් සොයාගත හැකිය
ප්රයෝජනවත් සම්පත්
Quarkus උත්සාහ කිරීමට හේතු 4ක් - ක්වාර්කස් ව්යාපෘති වෙබ් අඩවිය -
quarkus.io - GitHub හි Quarkus ව්යාපෘතිය -
github.com/quarkusio/quarkus - ක්වාර්කස් ව්යාපෘතිය ට්විටර් -
twitter.com/QuarkusIO - ක්වාර්කස් ව්යාපෘති කතාබස් -
quarkusio.zulipchat.com - ක්වාර්කස් ව්යාපෘති සංසද -
group.google.com/forum/# !forum/quarkus-dev
මාතෘකාව පිළිබඳව හුරුපුරුදු වීමට Quarkus පිළිබඳ වීඩියෝ පාඩම් 10ක්
ඔවුන් වෙබ් අඩවියේ පවසන පරිදි
ඔබට මාතෘකාව තේරුම් ගැනීමට උපකාර කිරීම සඳහා, අපි Quarkus හි විවිධ පැතිකඩ සහ එහි භාවිතය පිළිබඳ උදාහරණ ආවරණය කරන වීඩියෝ නිබන්ධන 10ක් තෝරාගෙන ඇත:
1. Quarkus හඳුන්වාදීම: Kubernetes සඳහා ඊළඟ පරම්පරාවේ ජාවා රාමුව
Thomas Qvarnstrom සහ Jason Greene විසිනි
Quarkus ව්යාපෘතියේ පරමාර්ථය වන්නේ Kubernetes සහ serverless පරිසරයන් සඳහා Java වේදිකාවක් නිර්මාණය කිරීම සහ ප්රතික්රියාශීලී සහ අනිවාර්ය ක්රමලේඛන ආකෘති එක් ධාවන කාල පරිසරයක් බවට ඒකාබද්ධ කිරීම වන අතර එමඟින් සංවර්ධකයින්ට පුළුල් පරාසයක බෙදා හරින ලද යෙදුම් ගෘහ නිර්මාණ ශිල්පය සමඟ වැඩ කිරීමේදී ඔවුන්ගේ ප්රවේශය නම්යශීලීව වෙනස් කළ හැකිය. පහත හඳුන්වාදීමේ දේශනයෙන් වැඩි විස්තර දැනගන්න.
2. Quarkus: Superfast Subatomic Java
විසින්: බර් සුටර්
DevNation Live වෙතින් වන මෙම වීඩියෝ නිබන්ධනය, Kubernetes/OpenShift පරිසරයක් තුළ ව්යවසාය ජාවා යෙදුම්, APIs, ක්ෂුද්ර සේවා සහ සේවාදායක රහිත ක්රියාකාරකම් ප්රශස්ත කිරීමට Quarkus භාවිතා කරන්නේ කෙසේදැයි පෙන්වයි, ඒවා ඉතා කුඩා, වේගවත් සහ වැඩි කළ හැකි බවට පත් කරයි.
3. Quarkus සහ GraalVM: Hibernate සුපිරි වේගය දක්වා වේගවත් කිරීම සහ උප පරමාණුක ප්රමාණයට හැකිලීම
කර්තෘ: Sanne Grinovero
ඉදිරිපත් කිරීමෙන් ඔබ Quarkus හටගත් ආකාරය, එය ක්රියා කරන ආකාරය සහ එය ඔබට Hibernate ORM වැනි සංකීර්ණ පුස්තකාල, ස්වදේශීය GraalVM රූප සමඟ අනුකූල වන ආකාරය ඉගෙන ගනු ඇත.
4. සේවාදායක රහිත යෙදුම් සංවර්ධනය කිරීමට ඉගෙන ගන්න
කර්තෘ: මාටින් ලූතර්
පහත වීඩියෝවෙන් දැක්වෙන්නේ Quarkus භාවිතයෙන් සරල ජාවා යෙදුමක් සාදා එය Knative මත සේවාදායක රහිත යෙදුමක් ලෙස යොදවන ආකාරයයි.
5. Quarkus: විනෝද කේතීකරණය කරන්න
කර්තෘ: එඩ්සන් යනගා
ඔබේ පළමු Quarkus ව්යාපෘතිය නිර්මාණය කිරීම සඳහා වීඩියෝ මාර්ගෝපදේශයක්, Quarkus සංවර්ධකයින්ගේ හදවත් දිනා ගන්නේ මන්දැයි තේරුම් ගැනීමට ඔබට ඉඩ සලසයි.
6. ජාවා සහ බහාලුම් - එකට ඔවුන්ගේ අනාගතය කුමක් වේවිද?
මාර්ක් ලිට්ල් විසින් පළ කරන ලදී
මෙම ඉදිරිපත් කිරීම ජාවා හි ඉතිහාසය හඳුන්වා දෙන අතර ක්වාර්කස් ජාවා හි අනාගතය වන්නේ මන්දැයි පැහැදිලි කරයි.
7. Quarkus: Superfast Subatomic Java
කර්තෘ: Dimitris Andreadis
සංවර්ධකයින්ගෙන් පිළිගැනීමක් ලැබී ඇති Quarkus හි වාසි පිළිබඳ දළ විශ්ලේෂණයක්: සරල බව, අතිශය ඉහළ වේගයන්, හොඳම පුස්තකාල සහ ප්රමිතීන්.
8. ක්වාර්කස් සහ උප පරමාණුක රොකට් පද්ධති
කර්තෘ: Clement Escoffier
GraalVM සමඟ ඒකාබද්ධ වීම හරහා, Quarkus අතිශය වේගවත් සංවර්ධන අත්දැකීමක් සහ උප පරමාණුක ධාවන කාල පරිසරයක් සපයයි. කතුවරයා Quarkus හි ප්රතික්රියාශීලී පැත්ත සහ ප්රතික්රියාශීලී සහ ප්රවාහ යෙදුම් තැනීමට එය භාවිතා කරන්නේ කෙසේද යන්න ගැන කතා කරයි.
9. ක්වාර්කස් සහ Eclipse MicroProfile හි වේගවත් යෙදුම් සංවර්ධනය
කර්තෘ: ජෝන් ක්ලින්ගන්
Eclipse MicroProfile සහ Quarkus ඒකාබද්ධ කිරීමෙන්, සංවර්ධකයින්ට මිලි තත්පර දස ගණනකින් දියත් කරන සම්පූර්ණ විශේෂාංග සහිත බහාලුම් සහිත MicroProfile යෙදුම් නිර්මාණය කළ හැකිය. Kubernetes වේදිකාවේ යෙදවීම සඳහා බහාලුම් කරන ලද MicroProfile යෙදුමක් කේතනය කරන්නේ කෙසේද යන්න පිළිබඳ වීඩියෝව විස්තරාත්මකව දක්වා ඇත.
10. ජාවා, "ටර්බෝ" අනුවාදය
කර්තෘ: මාකස් බීල්
කතුවරයා පෙන්වන්නේ ක්වාර්කස් භාවිතා කර සුපිරි කුඩා, සුපිරි වේගවත් ජාවා කන්ටේනර් නිර්මාණය කරන ආකාරය, විශේෂයෙන්ම සේවාදායක රහිත පරිසරයන් තුළ සැබෑ ඉදිරි ගමනක් ඇති කිරීමට හැකි වන පරිදිය.
මූලාශ්රය: www.habr.com