درود
دوستان من یه اپ دارم که میخوام بحث سفارشاتش رو جدا کنم تو قالب یک مایکرو سرویس برای اینکار میخوام از کلوژر استفاده کنم حالا سوال اینجاست که چه چالش هایی ممکنه سر راهم قرار بگیره و اینکه آیا کلوژر برای اینکار زبان مناسبی هست یا خیر؟
خود کلوژر، که روی JVM ران میشه پس استارتآپ کندی داره. از طرف دیگه، کلوژر، هستهی بزرگی داره یعنی clojure.core خیلی بزرگه و featureهای خیلی زیادی توش هست. این باعث میشه که استارتآپ، از یه نرمافزار جاوای معمولی خیلی بیشتر بشه. درحد ۲-۳ ثانیه!!
همین مسائل، باعث میشه رم زیادی هم مصرف کنه.
پس برای میکروسرویس مناسب نیست.
حالا کلوژر رو (مثل هر چیز دیگهای که به java bytecode کامپایل بشه) میشه با GraaVM کامپایل کرد و باهاش Native Image گرفت که این باعث میشه مصرف رم به شدت پایین بیاد و سرعت باز شدن اپلیکیشن هم خیلی، خیلی بیشتر بشه. واقعا چیز خفنیه!
فقط بدیش اینه که یه سری لایبرریهایی که با جاوا نوشته شدن (حتی اونایی که خیلی پرطرفدار هستن مثل Jetty) یه سری مشکلاتی دارن و اصولی ساخته نشدن. این باعث میشه که GraalVM نتونه اینا رو به صورت Native Image کامپایل کنه. این مساله درحدی فراگیره بین لایبرریهای جاوا، که من کلا بیخیالش شدم! ولی درمورد میکروسرویس، از اونجاییکه اصولا هیچوقت از لایبرریهای بزرگ استفاده نمیکنیم (و شاید اصلا از لایبرری استفاده نکنیم و همهچیز توی کدهای خودمون نوشته بشه) این مشکل رو ندارید و میتونید به Native Image کامپایلش کنید.
ولی اینم چیزیه که از همون اول پروژه باید بهش فکر کنید و از همون اول باهاش پیش برید.
این از «کلوژر»
درمورد کلوژراسکریپت:
همهچیزش همون کلوژره ولی به جاوااسکریپت کامپایل میشه و میشه توی بروزر (یا توی nodejs) اجراش کرد.
سرعت اجرای اولیش بالاتره، رم کمتری مصرف میکنه و… تنها فرقش هم اینه که لایبرریهای جاوا در دسترستون نیست و به جاش از لایبرریهای جاوااسکریپت استفاده میکنید.
این میتونه گزینهی مناسبی باشه. البته بازم برای میکروسرویس نمیدونم چقدر مناسبه چون به هرحال سایز خروجیش بزرگتر از کدی میشه که با خود جاوااسکریپت (و بدون اضافه کردن پکیجهای npm) نوشته باشید. (به خاطر همون که گفتم core بزرگی داره)
من نمیدونم از چه پلتفرمی استفاده میکنید ولی مثلا اگه با آمازون کار میکنید، بهترین راندمان رو توی پایتون خواهید داشت! حتی سریعتر از C!
به خاطر اینکه حتی C هم یه زمانی میبره برای warm up ولی پایتون (و جاوا اسکریپت) رو طوری پیاده کردن توی آمازون، که همیشه یه interpreter آمادهی ران کردن کدهای شما هست و دیگه اون تایم warmupش کمتر میشه. (دقیقا نمیدونم قضیه از چه قراره ولی اینو توی یه سری سرچی که خیلیوقت پیش زده بودم دیدم)