چند روز پیش دوست عزیزم "امیر صدیقی" این عکس رو توئیت کرده بود. برام خیلی جالب اومد الگوهای مختلف معماری نرم افزارو به غذا ها تشبیه کرده و در پایان یک سوال جالب طرح می کنه که بعدی چیه؟
اگر به نسل های مختلف معماری های نرم افزار از دیدگاه چهار عامل کاربر، نرم افزار، داده و فرآیند در طول زمان نگاه کنیم ، در همه آن ها روند مشخصی را مشاهده می کنیم.
در نسل های اولیه نرم افزار، فرآیندها و اطلاعات در دنیایی خارج از نرم افزار توسط کاربران گردش و تولید شده سپس نتایج آن توسط کاربران در سیستم ها ثبت و نگهداری می گردید. از این نسل می توان به سیستم های مدیریت اطلاعات - MIS اشاره کرد که در آنها، این کاربر است که نقش Orchestration را برعهده داشته و وظیفه ارتباط میان سایر عامل ها را به عهده دارد.
سپس با رشد نرم افزارها و افزایش توانمندی ها، نرم افزارها در مرکز قرار گرفته و نقش محوری و Orchestration سایر اجزای سازمان را بر عهده گرفتند. در این نسل از معماری ها می توان به Workflow ها اشاره کرد.
اما با ظهور معماری سرویس گرا و شکست نرم افزارها به مولفه های سرویس این فرایند ها هستند که در مرکز قرار می گیرند و نقش Orchestration را برعهده دارد. در این نگاه اصالت به فرآیند ها داده شده که همچون نخ تسبیح دانه ها را به هم متصل می کند. داده ها , نرم افزارها(Service) و کاربران در اطراف آن شکل می گیرد.
با رشد و سریعتر شدن تولید داده ها و ایجاد روند های داده های کلان و یادگیری ماشین داده ها از اهمیت فوق العاده ای در سال های اخیر برخوردار شده به طوری که گارتنر پیش بینی میکند در سالهای آینده شغل های تولید نرم افزار کاهش یافته و شغلهای داده محور و یادگیری افزایش خواهد یافت..
این اهمیت پیدا کردن داده ها سبب شده در معماری های نوین اصالت با داده ها قرار گرفته و این سایر اجزا است که در اطراف آن Orchestrate می شوند.
داده ها یا همان رویدادها (EVENT) حقیقت های اتفاق افتاده و غیر قابل انکاری است. که دنیای واقعی را در نرم افزار مدل سازی می نماید.
"a business is a series of events and the reactions to those events"
--Jay Kreps | Kafka Summit 2018 Keynote
رویدادهای تولید شده توسط سنسورها , نرم افزارها , کاربران و … تبدیل به جریانی بی انتها, از اطلاعات (Streaming) می گردد.سپس در طول سرویس ها جریان می یابد.سرویس های نرم افزاری در راستای این جریان اطلاعات اقدام به Validation , Enrichment, Filtering, Processing … و حتی تولید رویداد های جدید می کنند.
بانک های اطلاعاتی که فقط، وظیفه ذخیره سازی State ها در قالب ها استاتیک رابر عهده داشتند جای خود را به انباره هایی از رویدادها(Event Sourcing) می دهند. State ها در این مدل قابل بازیابی از رویدادها می باشد. و هر جز از سیستم که از دست برود قابل بازیابی و بازسازی از روی رویدادها می باشد.
رویداد ها به تنهایی قابل ارزش بوده و با جمع شدن رویداد ها در کنار هم، الگو ها کم کم پدیدار می گردد. و این الگوها مبنای یادگیری و تحلیل(Machine Learning) و بصیرت (Insight)قرار می گیرد.
رویداد ها در هر زمان از زندگی خود(از تولد تا جایگیری در انبارها) دارای ارزش هستند اند. هرچه از زمان تولد می گذرد ارزش فردی خود را از دست داده( Fast Data - Fine Grain) و با در کنار هم قرار گرفتن ارزش جمعی ایجاد می کنند.(Big Data - Cross Grain)
حالا میشه گفت نسل جدید الگوهای معماری نرم افزار Event-Driven Architecture است. که اتفاق افتاده و روند بلوغ خود را می گذراند.
این انقلاب داده محور رویداد گرا، معماری مایکروسرویس را هم متحول کرده و نسل جدیدی از مایکروسرویس را به وجود می آورد. این نوع نگاه به عکس نگاه قدیمی request-driven، رویداد گرا شده و پلتفرم قابل انعطافی را بوجود میاورد که در آن ارتباطات میان سرویس ها دچار وارونگی(Inversion) شده و سست تر (loosely coupled)از گذشته می گردد.
"For tech to be a real driver of innovation and growth, IT need to reorganize itself around --flexible platforms." -McKenzie
سرویس های می توانند آزادانه بدون تاثیر روی سرویس های توسعه یافته گذشته به جریان ارزش رویدادها اضافه گردند.(Open–closed principle)در این نوع ارتباط مقیاس پذیری دوطرفه گشته هم Up Stream و Down Stream به صورت مستقل قابلیت مقیاس پذیری پیدا می کنند.با جهت گیری به رویداد محوری و مایکروسرویس , قابلیت ارتجاعی (Resilience) را به شدت افزایش می دهد .
رویدادهای زنده Business Activity Monitoring را به صورت بالقوه به همراه آورده و دستاوردی جدید که همان بصیرت (Insight) می باشد را به کسب و کارها هدیه می دهد.
حال سوال بعدی چیه؟
در طی این سالها این چهار عامل کاربر، نرم افزار ، داده و فرآیند دچار جایگشت شده و انواع معماری ها را بوجود آورده شاید تغییر آینده دیگر از نوع جایگشت نبوده بلکه افزوده شدن یک عامل جدید باشه ولی این عامل جدید چیه؟