Posted in

Software Development Architecture (அல்லது Software Architecture) என்றால் என்ன?

Software Development Architecture (அல்லது Software Architecture) என்றால் என்ன?

Software Development Architecture (அல்லது Software Architecture) என்பது ஒரு software system எப்படி வடிவமைக்கப்படுகிறது, மற்றும் அதன் பகுதிகள் ஒன்றுடன் ஒன்று எப்படி தொடர்பு கொள்கின்றன என்பதை விவரிக்கும் உயர் நிலை (high-level) திட்டமாகும். ஒரு கட்டிடத்தை கட்டுவதற்கு முன் architect ஒரு வரைபடம் உருவாக்குவது போல, software உருவாக்குவதற்கு முன் அதன் அமைப்பு, data flow, database இணைப்பு, API தொடர்பு, security, performance மற்றும் scalability போன்ற அம்சங்கள் அனைத்தும் முன்கூட்டியே திட்டமிடப்படுவது தான் Software Architecture ஆகும்.

இதில் system-இன் முக்கிய components (frontend, backend, database), அவற்றின் பொறுப்புகள், பயன்படுத்தப்படும் technologies, மற்றும் பயனர் request எப்படி process ஆகிறது என்பதும் தீர்மானிக்கப்படுகிறது. நல்ல architecture இருந்தால் software maintain செய்ய எளிதாகும், future-ல் scale செய்ய முடியும், security மேம்படும், மற்றும் பெரிய team உடன் வேலை செய்வதும் சுலபமாகும். அதனால் Software Architecture என்பது எந்த software project-க்கும் backbone போல செயல்படும் மிகவும் முக்கியமான அடிப்படை அமைப்பாக கருதப்படுகிறது.

Software Architecture ஏன் முக்கியம்?

oftware Architecture என்பது ஒரு software system-இன் அடிப்படை அமைப்பு (foundation) ஆகும். ஒரு கட்டிடத்தின் அடித்தளம் வலுவாக இருந்தால் அது நீண்ட காலம் நிலைத்து நிற்கும் போல, software-க்கும் நல்ல architecture இருந்தால் அது நிலையானதாகவும், பாதுகாப்பானதாகவும், விரிவாக்கக்கூடியதாகவும் (scalable) இருக்கும்.

முதலில், நல்ல architecture system-ஐ maintain செய்வதை எளிதாக்குகிறது. Code structure தெளிவாக இருந்தால் future-ல் புதிய features சேர்ப்பது அல்லது bugs சரிசெய்வது சுலபமாகும். இரண்டாவது, performance மற்றும் scalability மேம்படும். Users அதிகரித்தாலும் system slow ஆகாமல் செயல்பட architecture உதவுகிறது. மூன்றாவது, security aspect-கள் சரியாக திட்டமிடப்படுவதால் data பாதுகாப்பாக இருக்கும்.

மேலும், பெரிய development team உடன் வேலை செய்யும்போது responsibilities தெளிவாக பிரிக்க முடியும். இது collaboration-ஐ எளிதாக்குகிறது. Business வளர்ச்சிக்கு ஏற்ப software-ஐ மாற்றி அமைக்கவும் architecture உதவுகிறது.

அதனால் Software Architecture என்பது ஒரு software project-இன் backbone ஆகும்; அது இல்லாமல் ஒரு system நீண்ட காலம் வெற்றிகரமாக செயல்பட முடியாது.

Monolithic Architecture என்றால் என்ன?

Monolithic Architecture என்பது ஒரு software application முழுவதும் ஒரே ஒரு single unit ஆக உருவாக்கப்படும் architecture வகை ஆகும். இதில் frontend, backend, business logic, மற்றும் database access போன்ற அனைத்தும் ஒரே project-இல், ஒரே codebase-இல் இணைந்து இருக்கும். அதாவது application-இன் எல்லா components-களும் tightly connected ஆக இருக்கும்.

இந்த architecture-ல் system-ஐ deploy செய்யும்போது முழு application-ஐயே ஒரே நேரத்தில் deploy செய்ய வேண்டும். சிறிய மற்றும் நடுத்தர அளவிலான projects-க்கு இது எளிமையான மற்றும் வேகமான தீர்வாக இருக்கும். ஆரம்ப கட்ட development-க்கு இது மிகவும் சுலபமானது, ஏனெனில் separate services, API communication போன்ற சிக்கல்கள் குறைவாக இருக்கும்.

ஆனால் application பெரிதாக வளரும்போது, maintain செய்வது சற்று கடினமாகலாம். ஒரு சிறிய மாற்றத்திற்கும் முழு system-ஐ rebuild மற்றும் redeploy செய்ய வேண்டி வரும். Scalability-யும் சற்று கட்டுப்பாடுடன் இருக்கும், ஏனெனில் ஒரு குறிப்பிட்ட பகுதியை மட்டும் scale செய்ய முடியாது; முழு application-ஐயே scale செய்ய வேண்டும்.

எளிமையாகச் சொன்னால், Monolithic Architecture என்பது “அனைத்தும் ஒன்றாக இணைந்த ஒரு பெரிய application” என்ற வடிவமைப்பு முறையாகும்.

Monolithic Architecture நன்மைகள் தீமைகள்

நன்மைகள்:
Monolithic Architecture-இன் மிகப்பெரிய நன்மை அதன் எளிமை. அனைத்து components (UI, business logic, database access) ஒன்றாக ஒரே codebase-இல் இருப்பதால் ஆரம்ப கட்ட development மிகவும் வேகமாக செய்ய முடியும். Small projects மற்றும் startups க்கு இது மிகவும் பொருத்தமானது. Testing மற்றும் debugging சுலபமாக இருக்கும், ஏனெனில் முழு system ஒரே இடத்தில் இருக்கும். Deployment கூட எளிதாக இருக்கும்; ஒரே application-ஐ build செய்து deploy செய்தால் போதும். Infrastructure complexity குறைவாக இருக்கும் என்பதால் ஆரம்ப செலவும் குறைவாக இருக்கும்.

தீமைகள்:
Application பெரிதாக வளரும்போது maintain செய்வது சிரமமாகலாம். Codebase மிகப்பெரியதாக மாறி, புதிய developers க்கு புரிந்து கொள்ள கடினமாக இருக்கும். ஒரு சிறிய change செய்தாலும் முழு application-ஐ rebuild மற்றும் redeploy செய்ய வேண்டி வரும். Scalability-யில் கட்டுப்பாடு இருக்கும், ஏனெனில் ஒரு பகுதியை மட்டும் scale செய்ய முடியாது; முழு system-ஐயே scale செய்ய வேண்டும். மேலும், ஒரு module-ல் error ஏற்பட்டால் அது முழு application-ஐ பாதிக்க வாய்ப்பு உள்ளது.

சுருக்கமாகச் சொன்னால், Monolithic Architecture சிறிய மற்றும் ஆரம்ப கட்ட projects-க்கு நல்ல தேர்வு, ஆனால் பெரிய மற்றும் அதிக traffic கொண்ட systems-க்கு இது சவாலாக மாறலாம்.

Client – Server Architecture என்றால் என்ன?

Client–Server Architecture என்பது ஒரு software architecture முறை ஆகும், இதில் system இரண்டு முக்கிய பகுதிகளாக பிரிக்கப்படுகிறது: Client மற்றும் Server. Client என்பது பயனர் பயன்படுத்தும் application அல்லது browser ஆகும்; Server என்பது data process செய்து response வழங்கும் backend system ஆகும்.

இந்த architecture-இல், பயனர் ஒரு request அனுப்பும்போது (உதாரணமாக login, data fetch, form submit), அந்த request Server-க்கு செல்கிறது. Server அந்த request-ஐ process செய்து database-இல் இருந்து data எடுத்து, அல்லது business logic செயல்படுத்தி, அதன் பிறகு response-ஐ Client-க்கு திருப்பி அனுப்பும். Client அந்த response-ஐ பயன்படுத்தி UI-ல் result காட்டும்.

இந்த முறையில் responsibilities தெளிவாக பிரிக்கப்படுகின்றன: Client UI மற்றும் user interaction-ஐ handle செய்யும், Server data management மற்றும் core logic-ஐ handle செய்யும். இதனால் security, scalability மற்றும் maintenance மேம்படும். மேலும், ஒரே server-ஐ பல clients பயன்படுத்த முடியும் (browser, mobile app, desktop app போன்றவை). எளிமையாகச் சொன்னால், Client–Server Architecture என்பது “User request அனுப்புகிறான் – Server அதை process செய்து பதில் அளிக்கிறது” என்ற செயல்முறை அடிப்படையிலான architecture ஆகும்.

Client – Server Architecture நன்மைகள் தீமைகள்

நன்மைகள்:
Client–Server Architecture-இன் முக்கிய நன்மை responsibilities தெளிவாக பிரிக்கப்பட்டிருப்பது. Client user interface மற்றும் user interaction-ஐ handle செய்யும்; Server data processing மற்றும் business logic-ஐ handle செய்யும். இதனால் system structure தெளிவாக இருக்கும். Data centralized ஆக server-ல் இருப்பதால் security மற்றும் data control மேம்படும். ஒரே server-ஐ பல clients (web, mobile, desktop) பயன்படுத்த முடியும் என்பதால் scalability அதிகரிக்கும். Maintenance செய்வதும் எளிதாகும், ஏனெனில் backend logic-ஐ server-ல் மட்டும் update செய்தால் போதும்; எல்லா clients-க்கும் அது reflect ஆகும்.

தீமைகள்:
Server மீது அதிக load வந்தால் performance குறையலாம். Server down ஆனால் முழு system-யும் செயலிழக்கலாம். Network dependency அதிகம் இருக்கும்; internet connection இல்லாமல் client சரியாக செயல்படாது. Infrastructure setup மற்றும் server maintenance செலவு கூடும். மேலும், security சரியாக configure செய்யவில்லை என்றால் centralized data hack ஆகும் அபாயம் இருக்கும்.

சுருக்கமாகச் சொன்னால், Client–Server Architecture scalable மற்றும் secure systems உருவாக்க நல்லது, ஆனால் server management மற்றும் network மீது அதிக சார்பு இருப்பது ஒரு சவாலாக இருக்கலாம்.

MVC Architecture (Model View Controller) என்றால் என்ன?

MVC Architecture (Model–View–Controller) என்பது software design pattern ஆகும். இதில் application மூன்று முக்கிய பகுதிகளாக பிரிக்கப்படுகிறது: Model, View, மற்றும் Controller. இந்த பிரிப்பு காரணமாக code structure தெளிவாகவும், maintain செய்ய எளிதாகவும் இருக்கும்.

Model என்பது data மற்றும் business logic-ஐ handle செய்யும் பகுதி. Database-இல் இருந்து data எடுப்பது, save செய்வது, rules apply செய்வது போன்ற செயல்கள் Model-ல் நடக்கும்.
View என்பது user-க்கு காணப்படும் UI (User Interface). HTML page, mobile screen, forms, tables போன்றவை View ஆகும்.
Controller என்பது Model மற்றும் View இரண்டிற்கும் நடுவில் bridge போல செயல்படும். User request-ஐ பெறுகிறது, அதை Model-க்கு அனுப்பி process செய்யச் செய்கிறது, பிறகு result-ஐ View-க்கு அனுப்பி காட்டச் செய்கிறது.

இந்த architecture-இன் முக்கிய நன்மை separation of concerns ஆகும். UI, data, logic ஆகியவை தனித்தனியாக இருப்பதால் code clean ஆக இருக்கும். Large projects மற்றும் team development-க்கு இது மிகவும் பொருத்தமானது.

எளிமையாகச் சொன்னால், MVC Architecture என்பது “Data (Model), Display (View), Control Logic (Controller)” என்று மூன்று பகுதிகளாக application-ஐ பிரித்து உருவாக்கும் design முறையாகும்.

MVC Architecture (Model View Controller) நன்மைகள் தீமைகள்

நன்மைகள்:
MVC Architecture-இன் முக்கிய நன்மை Separation of Concerns ஆகும். Model (data & logic), View (UI), Controller (control flow) ஆகியவை தனித்தனியாக இருப்பதால் code clean ஆகவும், structured ஆகவும் இருக்கும். இதனால் maintenance எளிதாகும்; UI மாற்ற வேண்டும் என்றால் View-ஐ மட்டும் மாற்றலாம், business logic மாற்ற வேண்டும் என்றால் Model-ஐ மட்டும் மாற்றலாம். Team development-க்கு இது மிகவும் உதவியாக இருக்கும், ஏனெனில் developers தனித்தனி பகுதிகளில் வேலை செய்ய முடியும். Reusability அதிகரிக்கும், testing செய்யவும் சுலபமாகும். Large-scale applications-க்கு MVC மிகவும் பொருத்தமான architecture ஆகும்.

தீமைகள்:
சிறிய projects-க்கு MVC சில நேரங்களில் தேவையற்ற complexity ஏற்படுத்தலாம். ஆரம்ப கட்டத்தில் structure அமைப்பது beginners-க்கு சற்று சிக்கலாக இருக்கலாம். Files மற்றும் folders அதிகமாக இருக்கும் என்பதால் project structure பெரிதாக தோன்றலாம். Controller-ல் அதிக logic சேர்த்தால் அது bulky ஆக மாறும் அபாயம் உள்ளது.

சுருக்கமாகச் சொன்னால், MVC Architecture clean மற்றும் maintainable systems உருவாக்க உதவுகிறது, ஆனால் small projects-க்கு அது சற்று அதிக structure மற்றும் complexity தரக்கூடும்.

Microservices Architecture என்றால் என்ன ?

Microservices Architecture என்பது ஒரு பெரிய software application-ஐ சிறிய, தனித்தனி services ஆகப் பிரித்து உருவாக்கும் architecture முறை ஆகும். ஒவ்வொரு service-மும் தனியாக வேலை செய்யக்கூடியது, தனி business function-ஐ handle செய்யும், மற்றும் பொதுவாக தனி database கூட வைத்திருக்கலாம். இந்த services அனைத்தும் API மூலம் ஒன்றுடன் ஒன்று தொடர்பு கொண்டு முழு system-ஆக செயல்படும்.

உதாரணமாக, ஒரு e-commerce application-இல் User Service, Product Service, Order Service, Payment Service போன்றவை தனித்தனி microservices ஆக இருக்கும். ஒரு service-இல் மாற்றம் செய்தாலும் மற்ற services-ஐ பாதிக்காமல் update செய்ய முடியும்.

இந்த architecture பெரிய மற்றும் அதிக traffic கொண்ட systems-க்கு மிகவும் பொருத்தமானது, ஏனெனில் தேவையான service-ஐ மட்டும் scale செய்ய முடியும். அதாவது முழு application-ஐ scale செய்யாமல், அதிக load வரும் service-ஐ மட்டும் scale செய்யலாம்.

எளிமையாகச் சொன்னால், Microservices Architecture என்பது “ஒரு பெரிய application-ஐ பல சிறிய, சுயாதீன services ஆகப் பிரித்து உருவாக்கும் modern architecture முறை” ஆகும்.

Microservices Architecture நன்மைகள் தீமைகள்

நன்மைகள்:
Microservices Architecture-இன் முக்கிய நன்மை scalability ஆகும். Application-இல் அதிக load வரும் ஒரு service-ஐ மட்டும் scale செய்ய முடியும்; முழு system-ஐ scale செய்ய தேவையில்லை. ஒவ்வொரு service-மும் தனித்தனியாக deploy செய்ய முடிவதால் updates வேகமாக செய்யலாம். Team-கள் தனித்தனி services-ல் parallel-ஆக வேலை செய்ய முடியும், அதனால் development வேகம் அதிகரிக்கும். Technology flexibility கூட இருக்கும்; ஒரு service-க்கு Node.js பயன்படுத்தி, மற்றொன்றுக்கு Python பயன்படுத்தலாம். மேலும், ஒரு service-ல் error ஏற்பட்டாலும் முழு system crash ஆகாமல் இருக்க வாய்ப்பு அதிகம்.

தீமைகள்:
Microservices architecture அமைப்பது மற்றும் manage செய்வது சற்று சிக்கலானது. Multiple services இடையே communication (API calls, message queues) handle செய்ய வேண்டும். Infrastructure setup (Docker, Kubernetes, API Gateway போன்றவை) தேவையாகலாம். Monitoring, logging, debugging போன்றவை சிரமமாக இருக்கும், ஏனெனில் system distributed ஆக இருக்கும். Network dependency அதிகம் இருக்கும்; services இடையே communication slow ஆனால் performance பாதிக்கப்படும்.

சுருக்கமாகச் சொன்னால், Microservices Architecture பெரிய மற்றும் scalable systems-க்கு மிகவும் சக்திவாய்ந்தது, ஆனால் small projects-க்கு அது அதிக complexity மற்றும் infrastructure தேவையை உருவாக்கக்கூடும்.

Serverless Architecture என்றால் என்ன?

Serverless Architecture என்பது developer server-ஐ manage செய்யாமல் application உருவாக்கும் architecture முறை ஆகும். இதில் server இல்லையென்று பொருள் அல்ல; ஆனால் server management (provisioning, scaling, maintenance) அனைத்தையும் cloud provider handle செய்கிறது. Developer code எழுதுவதில் மட்டும் கவனம் செலுத்துவார்.

இந்த architecture பொதுவாக FaaS (Function as a Service) முறைப்படி செயல்படும். அதாவது, சிறிய functions எழுதப்படும்; ஒரு event (HTTP request, file upload, database trigger) வந்தால் அந்த function execute ஆகும். Execution முடிந்ததும் அது நிற்கும். Continuous running server தேவையில்லை.

Serverless architecture-ல் automatic scaling இருக்கும். Traffic அதிகரித்தால் cloud provider தானாக scale செய்யும். Pay-as-you-go முறைப்படி billing நடக்கும்; function run ஆன நேரத்திற்கு மட்டும் பணம் செலுத்த வேண்டும்.

எளிமையாகச் சொன்னால், Serverless Architecture என்பது “server management பற்றி கவலைப்படாமல், events அடிப்படையில் code run செய்யும் cloud-based architecture முறை” ஆகும்.

Serverless Architecture நன்மைகள் தீமைகள்?

நன்மைகள்:
Serverless Architecture-இன் முக்கிய நன்மை server management தேவையில்லாதது. Infrastructure setup, maintenance, scaling போன்றவற்றை cloud provider தானாக handle செய்வதால் developer code எழுதுவதில் மட்டும் கவனம் செலுத்த முடியும். Automatic scaling இருப்பதால் traffic அதிகரித்தாலும் system தானாக scale ஆகும். Pay-as-you-go billing முறையால் function run ஆன நேரத்திற்கு மட்டும் பணம் செலுத்த வேண்டும்; idle server செலவு இருக்காது. Deployment வேகமாக செய்ய முடியும், மேலும் small projects மற்றும் startup ideas-க்கு இது மிகவும் பொருத்தமானது.

தீமைகள்:
Cold start issue ஏற்பட வாய்ப்பு உள்ளது; நீண்ட நேரம் பயன்படுத்தப்படாத function முதல் request-இல் சற்று delay ஆகலாம். Long-running tasks அல்லது heavy processing applications-க்கு இது எப்போதும் பொருத்தமானதல்ல. Vendor lock-in அபாயம் இருக்கும், ஏனெனில் ஒரு cloud provider-இன் service-களில் அதிகமாக சார்ந்திருப்போம். Debugging மற்றும் monitoring distributed environment-ல் சற்று சிக்கலாக இருக்கலாம்.

சுருக்கமாகச் சொன்னால், Serverless Architecture வேகமான development மற்றும் cost efficiency-க்கு சிறந்தது, ஆனால் பெரிய, complex மற்றும் தொடர்ந்து இயங்கும் systems-க்கு சில வரம்புகள் இருக்கலாம்.

உங்களுக்கு நாம் தெளிவாக தந்துள்ளோம் மேலும் தேவை என்றால் எம்மோடு இணைந்திருங்கள் Ealuvi

Leave a Reply