ProHoster > بلاګ > اداره > Quarkus څنګه اړین او عکس العمل پروګرامونه سره یوځای کوي
Quarkus څنګه اړین او عکس العمل پروګرامونه سره یوځای کوي
سږکال موږ پلان لرو چې په جدي ډول د کانټینر موضوعاتو ته وده ورکړو، Cloud-Native Java и کوبنیټس. د دې موضوعاتو منطقي دوام به د کوارکوس چوکاټ په اړه یوه کیسه وي، مخکې له دې په پام کې نیول شوی په Habré کې. د نن ورځې مقاله د "سباتومیک سپرفاسټ جاوا" ډیزاین په اړه لږ او د هغه ژمنې په اړه نور څه دي چې کوارکوس شرکت ته راوړي.
جاوا او JVM لاهم خورا مشهور دي ، مګر کله چې د سرور بې ټیکنالوژیو او کلاوډ اصلي مایکرو سرویسونو سره کار کوي ، جاوا او نورې JVM ژبې لږ او لږ کارول کیږي ځکه چې دوی د حافظې ډیر ځای نیسي او د بارولو لپاره خورا ورو دی ، دوی رامینځته کوي. د لنډمهاله کانټینرونو سره د کارونې لپاره په خراب ډول مناسب. خوشبختانه، دا وضعیت اوس د کوارکوس څخه مننه بدلولو پیل کوي.
سوپرفاسټ سباتومیک جاوا نوې کچې ته رسیدلی!
42 ریلیزونه ، د ټولنې 8 میاشتې کار او 177 حیرانونکي پراختیا کونکي - د دې ټولو پایله د نومبر 2019 کې خوشې شوه کوارکس ۲, یوه خپرونه چې د پروژې په پراختیا کې یو مهم پړاو په نښه کوي او ډیری ښایسته ځانګړتیاوې او وړتیاوې وړاندې کوي (تاسو کولی شئ د دوی په اړه نور ولولئ اعلان).
نن ورځ موږ به تاسو ته وښیو چې کوارکس څنګه اړین او عکس العمل برنامې ماډلونه په یو واحد عکس العمل کې ترکیب کوي. موږ به د لنډ تاریخ سره پیل وکړو او بیا به په تفصیل سره وګورو چې د Quarkus غبرګون اصلي دوه اړخیزه څه ده او څنګه جاوا- پرمخ وړونکي کولی شي له دې ګټو ګټه پورته کړي.
کوچني خدمتونه, د پیښې پرمخ وړل شوي معمارۍ и serverless-فعالیتونه - دا ټول لکه څنګه چې دوی وايي، نن ورځ مخ په زیاتیدو دي. په دې وروستیو کې، د کلاوډ-مرکزي معمارۍ رامینځته کول خورا اسانه او د لاسرسي وړ شوي، مګر ستونزې پاتې دي - په ځانګړې توګه د جاوا پراختیا کونکو لپاره. د مثال په توګه، د سرور بې کاره فعالیتونو او مایکرو خدماتو په صورت کې، د پیل کولو وخت کمولو، د حافظې مصرف کمولو، او بیا هم د دوی پراختیا خورا اسانه او خوندور کولو لپاره عاجل اړتیا شتون لري. جاوا په وروستیو کلونو کې ډیری پرمختګونه کړي، لکه د کانټینرونو لپاره د ergonomics فعالیت ښه شوی او داسې نور. په هرصورت ، په کانټینر کې د سم کار کولو لپاره جاوا ترلاسه کول لاهم ننګونه ده. نو موږ به د جاوا ځینې اصلي پیچلتیاو ته په کتلو سره پیل وکړو ، کوم چې په ځانګړي توګه شدید دي کله چې د کانټینر پر بنسټ جاوا غوښتنلیکونو رامینځته کول.
لومړی، راځئ چې تاریخ وګورو.
جریانونه او کانتینرونه
د 8u131 نسخه سره پیل کول، جاوا د ergonomics فعالیت کې د پرمختګ له امله لږ یا لږ مالتړ کانټینرونو ته پیل وکړ. په ځانګړې توګه، JVM اوس پوهیږي چې څومره پروسیسر کورونه روان دي او کولی شي د تار حوضونه تنظیم کړي - په ځانګړي ډول فورک / جوین پولونه - په همدې اساس. البته، دا خورا ښه دی، مګر راځئ چې ووایو چې موږ یو دودیز ویب غوښتنلیک لرو چې د HTTP خدمتونه کاروي او په Tomcat، Jetty، او نور کې چلوي. د پایلې په توګه، دا غوښتنلیک به هرې غوښتنې ته جلا تار ورکړي او اجازه ورکړي چې د I/O عملیاتو په انتظار کې دا تار بند کړي، د بیلګې په توګه، کله چې ډیټابیس، فایلونو یا نورو خدماتو ته لاسرسی ومومي. دا دی، د داسې غوښتنلیک اندازه د شته کورونو په شمیر پورې اړه نلري، مګر په ورته وخت کې د غوښتنو شمیر پورې اړه لري. برسېره پردې، دا پدې مانا ده چې د کورونو په شمیر کې په کوبرنیټس کې کوټې یا محدودیتونه به دلته ډیره مرسته ونکړي، او موضوع به په پای کې په تخته کولو کې پای ته ورسیږي.
د حافظې ستړیا
تارونه حافظه ده. او د انټر کانټینر حافظې محدودیتونه په هیڅ ډول د درملنې لپاره ندي. یوازې د غوښتنلیکونو او تارونو شمیر ډیرول پیل کړئ ، او ژر یا وروسته به تاسو د سویچ کولو فریکونسۍ کې د جدي زیاتوالي سره مخ شئ او په پایله کې ، د فعالیت تخریب. همچنان ، که ستاسو غوښتنلیک دودیز مایکرو سرویس چوکاټ کاروي ، یا ډیټابیس سره وصل وي ، یا کیچنګ کاروي ، یا بل ډول حافظه کاروي ، تاسو په څرګنده توګه داسې وسیلې ته اړتیا لرئ چې تاسو ته اجازه درکوي د JVM دننه وګورئ او وګورئ چې دا څنګه له وژلو پرته حافظه اداره کوي. JVM پخپله (د مثال په توګه، XX:+UseCGroupMemoryLimitForHeap). او که څه هم، د جاوا 9 راهیسې، JVM د cgroups منل او د هغې مطابق تطبیق کول زده کړل، د حافظې ساتل او اداره کول یوه پیچلې مسله پاتې ده.
کوټې او حدود
جاوا 11 د CPU کوټو لپاره ملاتړ معرفي کړ (لکه PreferContainerQuotaForCPUCount). Kubernetes د محدودیتونو او کوټو لپاره هم ملاتړ وړاندیز کوي. هو ، دا ټول معنی لري ، مګر که غوښتنلیک بیا له تخصیص شوي کوټې څخه ډیر شي ، نو موږ بیا د اندازې سره پای ته ورسیږو - لکه څنګه چې د دودیز جاوا غوښتنلیکونو قضیه ده - د کور شمیر لخوا ټاکل کیږي او د هر یو لپاره د جلا تار تخصیص سره. غوښتنه، نو په دې ټولو کې لږ احساس شتون لري.
سربیره پردې ، که تاسو د کوبرنیټس لاندې پلیټ فارم کوټا او محدودیتونه یا د پیمانه کولو افعال وکاروئ ، ستونزه هم پخپله نه حل کیږي. موږ په ساده ډول د اصلي ستونزې په حل کولو کې ډیرې سرچینې مصرف کوو یا ډیر لګښت پای ته رسوو. او که دا په عامه عامه بادل کې د لوړ بار سیسټم وي ، نو موږ نږدې یقینا د اړتیا په پرتله ډیرې سرچینې وکاروو.
او د دې ټولو سره څه وکړي؟
د دې ساده کولو لپاره ، غیر متزلزل او غیر بلاکیدونکي I/O کتابتونونه او چوکاټونه لکه نیټي ، Vert.x یا اکا. دوی د دوی د عکس العمل طبیعت له امله په کانټینرونو کې د کار کولو لپاره خورا مناسب دي. د غیر بندولو I/O څخه مننه، ورته تار کولی شي ډیری یوځل غوښتنې پروسس کړي. پداسې حال کې چې یوه غوښتنه د I/O پایلو ته انتظار باسي ، د تار پروسس کولو دا خوشې کیږي او د بلې غوښتنې لخوا اخیستل کیږي. او کله چې د I/O پایلې په پای کې راشي، د لومړۍ غوښتنې پروسس دوام لري. په ورته تار کې د غوښتنو د مینځلو پروسس کولو سره ، تاسو کولی شئ د تارونو ټولټال شمیر کم کړئ او د غوښتنو پروسس کولو لپاره د سرچینو مصرف کم کړئ.
د I/O نه بلاک کولو سره، د کور شمیره یو کلیدي پیرامیټر کیږي ځکه چې دا د I/O تارونو شمیر ټاکي چې په موازي توګه اجرا کیدی شي. کله چې په سمه توګه کارول کیږي، دا تاسو ته اجازه درکوي په مؤثره توګه د کور ترمنځ بار وویشئ او د لږو سرچینو سره د لوړ کاري بار اداره کړئ.
څنګه، دا ټول؟
نه، بل څه شته. عکس العمل برنامه کول د سرچینو غوره کارولو کې مرسته کوي ، مګر په نرخ کې هم راځي. په ځانګړې توګه، کوډ باید د غیر بلاک کولو اصولو سره سم بیا لیکل شي او د I/O تارونو بندولو څخه مخنیوی وشي. او دا د پراختیا او اجرا کولو یو بشپړ مختلف ماډل دی. او که څه هم دلته ډیر ګټور کتابتونونه شتون لري، دا لاهم د فکر کولو معمول ډول کې بنسټیز بدلون دی.
لومړی، تاسو اړتیا لرئ د کوډ لیکلو څرنګوالی زده کړئ چې په غیر متناسب ډول پرمخ ځي. یوځل چې تاسو د غیر بلاک کولو I/O کارول پیل کړئ ، تاسو اړتیا لرئ په واضح ډول مشخص کړئ چې څه باید پیښ شي کله چې غوښتنې ته ځواب ترلاسه شي. په ساده ډول بندول او انتظار کول به نور کار ونکړي. پرځای یې، تاسو کولی شئ کال بیکونه تېر کړئ، د غبرګون پروګرام کولو یا دوام څخه کار واخلئ. مګر دا ټول ندي: د غیر بلاکینګ I/O کارولو لپاره ، تاسو دواړه غیر بلاک کولو سرورونو او پیرودونکو ته اړتیا لرئ ، په غوره توګه هرچیرې. د HTTP په قضیه کې، هرڅه ساده دي، مګر ډیټابیسونه، د فایل سیسټمونه، او نور ډیر څه شتون لري.
او که څه هم د پای څخه تر پای پورې بشپړ عکس العمل د موثریت اعظمي کوي، دا ډول بدلون په عمل کې د معدې لپاره ستونزمن کیدی شي. له همدې امله، د غبرګون او لازمي کوډ سره یوځای کولو وړتیا د دې لپاره یو شرط دی چې: