During learn and experience

۲ مطلب با کلمه‌ی کلیدی «reactive» ثبت شده است

Spring reactive stack web framework یا همان Spring WebFlux

از این بعد نام Spring reactive stack web framework را بیشتر بیشتر خواهید شنید. این stack جدید که برای توسعه برنامه های تحت وب در Spring 5 معرفی شده است و نسل بعدی توسعه برنامه های تحت وب در Spring Framework است که پس از Spring MVC و Spring Boot (Spring Servlet stack based web framework) که سال ها در بین توسعه دهندگان جاوا استفاده می شد آمده است و قابلیت تولید سیستم های reactive و non-blocking درون Spring Framework را با استفاده از پروژه Reactor خواهد داد.

برنامه های تولید شده با Spring WebFlux هم قابلیت اجرا درون Servlet container ها  مثل Tomcat, Jetty, Servlet 3.1 و هم قابلیت اجرا بر روی سرور هایی مانند Netty یا Undertow را دارد.

من اولین بار این مدل تولید برنامه تحت وب در دنیای جاوا رو با Play Framework تجربه کردم (حدود ۴ سال پیش) و سیستم های خوبی با Play Framework تولید کردیم ولی همیشه مشکل کمبود توسعه دهنده و پلاگین برای Play Framework را داشتیم ولی کاملا مشخص بود که أینده تولید برنامه تحت وب در دنیای جاوا از servlet container ها نمی گذرد و مدل پردازشی با event-loop بهمراه تعداد thread های کم آینده توسعه برنامه های تحت وب جاوا را رقم خواهد زد و قدرت JVM بصورت کامل نمایش داده خواهد شد.

سازگاری کامل Reactor با استاندارد Reactive Stream که در جاوا ۹ معرفی شده است آینده Spring WebFlux را تضمین خواهد کرد.

فعلا Spring 5 M5 عرضه شده و مستندات Spring WebFlux کامل نیست و مثال های کاملی برای آن وجود نداره ولی چیزی که واضح هستش اینه که مثل همیشه Backward compatibility وجود خواهد داشت. در زیر یک کنترلر که با Spring WebFlux پیاده سازی شده است را می بینیم:

@GetMapping("/persons")
Flux<Person> getPersons() {
    return this.repository.getPersons();
}
۲۵ ارديبهشت ۹۶ ، ۲۳:۲۷ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Reactive Streams استانداردی برای آینده Stream Processing

با توجه به رشد سریع سیستم های نرم افزاری و افزایش شدید حجم اطلاعات و نیاز به سیستم های real time برای انجام پردازش های سنگین بر روی اطلاعات و جمع آوری اطلاعات مهم از آنها، نیاز به وجود استانداردی برای ارتباط سیستم ها بر پایه stream بسیار دیده می شود. امروزه ابزار ها و framework های فراوانی پردازش های برپایه Stream  را از منابع داده ای مختلف برای ما انجام می دهند ابزار هایی مثل Spark، Kafka، Hadoop و... با استاندارد های خود به پایگاه داده های NoSQL و ... متصل می شوند و در بعضی موارد حتی لازم است این سیستم ها با یکدیگر ارتباط بر پایه Stream داشته باشند.

استاندارد Reactive Streams یک استاندارد مدرن برای متصل کردن سیستم ها و منابع اطلاعاتی برپایه Stream است. به نظر من اهمیت استاندارد Reactive Streams در حال حاضر مانند اهمیت استاندارد JDBC در زمان اوج RDBMS ها بود. در حال حاضر با اینکه Reactive Streams در ابتدای راه است ولی بسیاری از محصولات، ابزار ها و فریم ورک ها در حال تکمیل پشتیبانی خود از استاندارد Reactive Streams هستند و خود را برای آینده آماده می کنند.

در حال حاضر در بین سیستم های پایگاه داده، Mongodb و Kafka و Cassandra و ... در بین فریم ورک ها و ابزار های stream processing سیستم هایی مثل Spark ، کتابخانه ارتباط با دیتابیس Slick در اسکالا، فریم ورک Akka در قالب Akka Stream ، پشتیبانی از Reactive Streams در JDK 9 و بسیاری دیگر از سیستم هایی که نقش بزرگی در دنیای big data و stream processing در حال پشتیبانی از این استاندارد هستند.

نسخه ۱ استاندارد Reactive Streams تمرکز خود را بر روی back pressure، asynchronous و non-blocking بودن قرار داده  ولی احتمالا در آینده مواردی مثل توزیع شدگی و چالش ها آن نیز به این استاندارد اضافه خواهد شد.

تصور یک سیستم large scale که stream processing را را بر مبنای درایور های بر پایه استاندارد Reactive Streams بصورت asynchronous و non-blocking و با کنترل back pressure بین کامپوننت هایی مثل MongoDB، Kafka و Spark انجام می دهد برای تمام کسانی که در این حوزه کار می کنند بسیار هیجان انگیز است.

۱۷ فروردين ۹۵ ، ۲۲:۰۹ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام