மிகவும் நம்பகமான மற்றும் பராமரிக்கக்கூடிய சிஸ்டம்களை உருவாக்குவது எப்படி என்பதை ஆராயுங்கள். இந்த வழிகாட்டி REST APIகள், gRPC முதல் நிகழ்வு சார்ந்த சிஸ்டம்கள் வரை architectural மட்டத்தில் டைப் பாதுகாப்பை உள்ளடக்கியது.
உங்கள் அடித்தளங்களை வலுப்படுத்துதல்: பொதுவான மென்பொருள் கட்டமைப்பில் சிஸ்டம் டிசைன் டைப் பாதுகாப்புக்கான ஒரு வழிகாட்டி
விநியோகிக்கப்பட்ட சிஸ்டம்களின் உலகில், சேவைகளுக்கு இடையில் நிழல்களில் ஒரு மௌனமான கொலையாளி பதுங்கியிருக்கிறான். அது மேம்பாட்டின் போது உரத்த கம்பைலேஷன் பிழைகளையோ அல்லது வெளிப்படையான செயலிழப்புகளையோ ஏற்படுத்தாது. மாறாக, அது உற்பத்திச் சூழலில் சரியான தருணத்திற்காக பொறுமையாகக் காத்திருந்து, முக்கியமான வேலைப்பாய்வுகளைத் தாக்கி, தொடர் தோல்விகளை ஏற்படுத்துகிறது. இந்த கொலையாளி, தொடர்பு கொள்ளும் கூறுகளுக்கு இடையேயான தரவு வகைகளின் நுட்பமான பொருத்தமின்மை ஆகும்.
ஒரு இ-காமர்ஸ் தளத்தை கற்பனை செய்து பாருங்கள், அங்கு புதிதாகப் பயன்படுத்தப்பட்ட `Orders` சேவையானது பயனரின் ஐடியை ஒரு எண் மதிப்பாக, `{"userId": 12345}` என்று அனுப்பத் தொடங்குகிறது, அதே சமயம் பல மாதங்களுக்கு முன்பு பயன்படுத்தப்பட்ட கீழ்நிலை `Payments` சேவையானது அதை ஒரு ஸ்டிரிங்காக, `{"userId": "u-12345"}` என்று கண்டிப்பாக எதிர்பார்க்கிறது. பேமெண்ட் சேவையின் JSON பார்சர் தோல்வியடையலாம், அல்லது மோசமாக, அது தரவைத் தவறாகப் புரிந்துகொண்டு, தோல்வியுற்ற கொடுப்பனவுகள், சிதைந்த பதிவுகள் மற்றும் ஒரு பரபரப்பான நள்ளிரவு பிழைத்திருத்த அமர்வுக்கு வழிவகுக்கும். இது ஒரு நிரலாக்க மொழியின் வகை அமைப்பின் தோல்வி அல்ல; இது கட்டமைப்பு ஒருமைப்பாட்டின் தோல்வி.
இங்குதான் சிஸ்டம் டிசைன் டைப் பாதுகாப்பு வருகிறது. இது ஒரு பெரிய மென்பொருள் அமைப்பின் சுயாதீனமான பகுதிகளுக்கு இடையேயான ஒப்பந்தங்கள் நன்கு வரையறுக்கப்பட்டு, சரிபார்க்கப்பட்டு, மதிக்கப்படுவதை உறுதிசெய்வதில் கவனம் செலுத்தும் ஒரு முக்கியமான, ஆனால் பெரும்பாலும் கவனிக்கப்படாத ஒழுக்கம். இது டைப் பாதுகாப்பு என்ற கருத்தை ஒரு தனிப்பட்ட குறியீட்டுத் தளத்தின் வரம்புகளிலிருந்து, மைக்ரோசர்வீசஸ், சேவை சார்ந்த கட்டமைப்புகள் (SOA), மற்றும் நிகழ்வு சார்ந்த சிஸ்டம்கள் உள்ளிட்ட நவீன பொதுவான மென்பொருள் கட்டமைப்பின் பரந்த, ஒன்றோடொன்று இணைக்கப்பட்ட நிலப்பரப்புக்கு உயர்த்துகிறது.
இந்த விரிவான வழிகாட்டி, உங்கள் சிஸ்டத்தின் அடித்தளங்களை கட்டமைப்பு டைப் பாதுகாப்புடன் வலுப்படுத்த தேவையான கொள்கைகள், உத்திகள் மற்றும் கருவிகளை ஆராயும். நாங்கள் கோட்பாட்டிலிருந்து நடைமுறைக்குச் செல்வோம், உடையாமல் உருவாகக்கூடிய, மீள்தன்மை கொண்ட, பராமரிக்கக்கூடிய மற்றும் கணிக்கக்கூடிய சிஸ்டம்களை எவ்வாறு உருவாக்குவது என்பதை உள்ளடக்குவோம்.
சிஸ்டம் டிசைன் டைப் பாதுகாப்பை விளக்குதல்
டெவலப்பர்கள் "டைப் பாதுகாப்பு" என்று கேட்கும்போது, அவர்கள் பொதுவாக ஜாவா, சி#, கோ, அல்லது டைப்ஸ்கிரிப்ட் போன்ற ஒரு ஸ்டேடிக்கலி-டைப்டு மொழிக்குள் கம்பைல்-டைம் சரிபார்ப்புகளைப் பற்றி நினைக்கிறார்கள். ஒரு கம்பைலர் ஒரு ஸ்டிரிங்கை ஒரு இன்டிஜர் வேரியபிளுக்கு ஒதுக்கவிடாமல் தடுப்பது ஒரு பழக்கமான பாதுகாப்பு வலை. இது விலைமதிப்பற்றதாக இருந்தாலும், இது புதிரின் ஒரு பகுதி மட்டுமே.
கம்பைலருக்கு அப்பால்: ஒரு கட்டமைப்பு அளவில் டைப் பாதுகாப்பு
சிஸ்டம் டிசைன் டைப் பாதுகாப்பு ஒரு உயர் மட்ட சுருக்கத்தில் செயல்படுகிறது. இது செயல்முறை மற்றும் நெட்வொர்க் எல்லைகளைக் கடக்கும் தரவு கட்டமைப்புகளுடன் தொடர்புடையது. ஒரு ஜாவா கம்பைலர் ஒரு தனிப்பட்ட மைக்ரோசர்வீஸுக்குள் வகை நிலைத்தன்மையை உறுதிப்படுத்த முடியும் என்றாலும், அதன் API-ஐப் பயன்படுத்தும் பைதான் சேவை அல்லது அதன் தரவை வழங்கும் ஜாவாஸ்கிரிப்ட் ஃப்ரண்ட்எண்ட் பற்றி அதற்கு எந்தப் பார்வையும் இல்லை.
அடிப்படை வேறுபாடுகளைக் கவனியுங்கள்:
- மொழி-நிலை டைப் பாதுகாப்பு: ஒரு நிரலின் நினைவக இடத்திற்குள் உள்ள செயல்பாடுகள் சம்பந்தப்பட்ட தரவு வகைகளுக்கு செல்லுபடியாகும் என்பதை சரிபார்க்கிறது. இது ஒரு கம்பைலர் அல்லது ஒரு ரன்டைம் இயந்திரத்தால் செயல்படுத்தப்படுகிறது. உதாரணம்: `int x = "hello";` // கம்பைல் செய்யத் தவறியது.
- சிஸ்டம்-நிலை டைப் பாதுகாப்பு: இரண்டு அல்லது அதற்கு மேற்பட்ட சுயாதீனமான சிஸ்டம்களுக்கு இடையில் (எ.கா., ஒரு REST API, ஒரு மெசேஜ் கியூ, அல்லது ஒரு RPC அழைப்பு வழியாக) பரிமாறப்படும் தரவு பரஸ்பரம் ஒப்புக்கொள்ளப்பட்ட கட்டமைப்பு மற்றும் வகைகளின் தொகுப்பைப் பின்பற்றுகிறது என்பதை சரிபார்க்கிறது. இது ஸ்கீமாக்கள், சரிபார்ப்பு அடுக்குகள் மற்றும் தானியங்கு கருவிகளால் செயல்படுத்தப்படுகிறது. உதாரணம்: சேவை A `{"timestamp": "2023-10-27T10:00:00Z"}` என்று அனுப்புகிறது, அதே சமயம் சேவை B `{"timestamp": 1698397200}` என்று எதிர்பார்க்கிறது.
இந்த கட்டமைப்பு டைப் பாதுகாப்பு உங்கள் விநியோகிக்கப்பட்ட கட்டமைப்பின் நோயெதிர்ப்பு அமைப்பாகும், இது பல சிக்கல்களை ஏற்படுத்தக்கூடிய செல்லாத அல்லது எதிர்பாராத தரவு பேலோடுகளிலிருந்து அதைப் பாதுகாக்கிறது.
வகை தெளிவின்மையின் அதிக விலை
சிஸ்டம்களுக்கு இடையில் வலுவான வகை ஒப்பந்தங்களை நிறுவத் தவறுவது ஒரு சிறிய அசௌகரியம் அல்ல; இது ஒரு குறிப்பிடத்தக்க வணிக மற்றும் தொழில்நுட்ப ஆபத்து. அதன் விளைவுகள் தொலைநோக்குடையவை:
- உடையக்கூடிய சிஸ்டம்கள் மற்றும் ரன்டைம் பிழைகள்: இது மிகவும் பொதுவான விளைவாகும். ஒரு சேவை எதிர்பாராத வடிவத்தில் தரவைப் பெறுகிறது, இதனால் அது செயலிழக்கிறது. அழைப்புகளின் சிக்கலான சங்கிலியில், அத்தகைய ஒரு தோல்வி ஒரு அடுக்கைத் தூண்டி, ஒரு பெரிய செயலிழப்புக்கு வழிவகுக்கும்.
- மௌனமான தரவு சிதைவு: ஒரு உரத்த செயலிழப்பை விட ஒரு மௌனமான தோல்வி ஒருவேளை அதிக ஆபத்தானது. ஒரு சேவை ஒரு எண்ணை எதிர்பார்த்த இடத்தில் ஒரு நல் மதிப்பை பெற்று, அதை `0` ஆக இயல்புநிலையாகக் கொண்டால், அது ஒரு தவறான கணக்கீட்டைத் தொடரலாம். இது டேட்டாபேஸ் பதிவுகளை சிதைக்கலாம், தவறான நிதி அறிக்கைகளுக்கு வழிவகுக்கலாம், அல்லது வாரங்கள் அல்லது மாதங்களுக்கு யாரும் கவனிக்காமல் பயனர் தரவைப் பாதிக்கலாம்.
- அதிகரித்த மேம்பாட்டு உராய்வு: ஒப்பந்தங்கள் வெளிப்படையாக இல்லாதபோது, அணிகள் தற்காப்பு நிரலாக்கத்தில் ஈடுபட வேண்டிய கட்டாயத்தில் உள்ளன. அவர்கள் ஒவ்வொரு கற்பனை செய்யக்கூடிய தரவு சிதைவுக்கும் அதிகப்படியான சரிபார்ப்பு தர்க்கம், நல் சரிபார்ப்புகள் மற்றும் பிழை கையாளுதலைச் சேர்க்கிறார்கள். இது குறியீட்டுத் தளத்தை வீங்கச் செய்கிறது மற்றும் அம்ச மேம்பாட்டை மெதுவாக்குகிறது.
- கடுமையான பிழைத்திருத்தம்: சேவைகளுக்கு இடையிலான தரவுப் பொருத்தமின்மையால் ஏற்படும் ஒரு பிழையைக் கண்டுபிடிப்பது ஒரு கனவு. இதற்கு பல சிஸ்டம்களின் பதிவுகளை ஒருங்கிணைத்தல், நெட்வொர்க் போக்குவரத்தை பகுப்பாய்வு செய்தல், மற்றும் பெரும்பாலும் அணிகளுக்கு இடையில் விரல் நீட்டுதல் ("உங்கள் சேவை மோசமான தரவை அனுப்பியது!" "இல்லை, உங்கள் சேவையால் அதை சரியாகப் பாகுபடுத்த முடியவில்லை!") தேவைப்படுகிறது.
- நம்பிக்கை மற்றும் வேகத்தின் அரிப்பு: ஒரு மைக்ரோசர்வீசஸ் சூழலில், அணிகள் மற்ற அணிகளால் வழங்கப்படும் API-களை நம்ப முடிய வேண்டும். உத்தரவாதமான ஒப்பந்தங்கள் இல்லாமல், இந்த நம்பிக்கை உடைகிறது. ஒருங்கிணைப்பு ஒரு மெதுவான, வலிமிகுந்த சோதனை மற்றும் பிழை செயல்முறையாக மாறுகிறது, இது மைக்ரோசர்வீசஸ் வழங்க வாக்குறுதியளிக்கும் சுறுசுறுப்பை அழிக்கிறது.
கட்டமைப்பு டைப் பாதுகாப்பின் தூண்கள்
சிஸ்டம் அளவிலான டைப் பாதுகாப்பை அடைவது என்பது ஒரு மந்திரக் கருவியைக் கண்டுபிடிப்பது பற்றியது அல்ல. இது முக்கிய கொள்கைகளின் தொகுப்பை ஏற்றுக்கொள்வது மற்றும் அவற்றை சரியான செயல்முறைகள் மற்றும் தொழில்நுட்பங்களுடன் செயல்படுத்துவது பற்றியது. இந்த நான்கு தூண்களும் ஒரு வலுவான, டைப்-பாதுகாப்பான கட்டமைப்பின் அடித்தளமாகும்.
கொள்கை 1: வெளிப்படையான மற்றும் அமல்படுத்தப்பட்ட தரவு ஒப்பந்தங்கள்
கட்டமைப்பு டைப் பாதுகாப்பின் మూలக்கல் தரவு ஒப்பந்தம் ஆகும். ஒரு தரவு ஒப்பந்தம் என்பது சிஸ்டம்களுக்கு இடையில் பரிமாறப்படும் தரவின் கட்டமைப்பு, தரவு வகைகள் மற்றும் கட்டுப்பாடுகளை விவரிக்கும் ஒரு முறையான, இயந்திரம் படிக்கக்கூடிய ஒப்பந்தமாகும். இது அனைத்து தொடர்பு கொள்ளும் தரப்பினரும் பின்பற்ற வேண்டிய உண்மையின் ஒற்றை மூலமாகும்.
முறைசாரா ஆவணங்கள் அல்லது வாய்மொழிச் சொற்களை நம்புவதற்குப் பதிலாக, அணிகள் இந்த ஒப்பந்தங்களை வரையறுக்க குறிப்பிட்ட தொழில்நுட்பங்களைப் பயன்படுத்துகின்றன:
- OpenAPI (முன்னர் Swagger): RESTful API-களை வரையறுப்பதற்கான தொழில்துறை தரநிலை. இது எண்ட்பாயிண்ட்கள், கோரிக்கை/பதில் அமைப்புகள், அளவுருக்கள் மற்றும் அங்கீகார முறைகளை ஒரு YAML அல்லது JSON வடிவத்தில் விவரிக்கிறது.
- Protocol Buffers (Protobuf): கூகிளால் உருவாக்கப்பட்ட, கட்டமைக்கப்பட்ட தரவை வரிசைப்படுத்துவதற்கான ஒரு மொழி-சார்பற்ற, தளம்-நடுநிலை பொறிமுறை. gRPC உடன் பயன்படுத்தப்படும்போது, இது மிகவும் திறமையான மற்றும் வலுவாக-டைப்டு RPC தகவல்தொடர்பை வழங்குகிறது.
- GraphQL Schema Definition Language (SDL): ஒரு தரவு வரைபடத்தின் வகைகள் மற்றும் திறன்களை வரையறுப்பதற்கான ஒரு சக்திவாய்ந்த வழி. இது வாடிக்கையாளர்கள் தங்களுக்குத் தேவையான தரவை சரியாகக் கேட்க அனுமதிக்கிறது, அனைத்து தொடர்புகளும் ஸ்கீமாவிற்கு எதிராக சரிபார்க்கப்படுகின்றன.
- Apache Avro: ஒரு பிரபலமான தரவு வரிசைப்படுத்தல் அமைப்பு, குறிப்பாக பெரிய தரவு மற்றும் நிகழ்வு சார்ந்த சுற்றுச்சூழல் அமைப்பில் (எ.கா., Apache Kafka உடன்). இது ஸ்கீமா பரிணாம வளர்ச்சியில் சிறந்து விளங்குகிறது.
- JSON Schema: JSON ஆவணங்களை சிறுகுறிப்பு மற்றும் சரிபார்க்க உங்களை அனுமதிக்கும் ஒரு சொற்களஞ்சியம், அவை குறிப்பிட்ட விதிகளுக்கு இணங்குவதை உறுதி செய்கிறது.
கொள்கை 2: ஸ்கீமா-முதல் வடிவமைப்பு
நீங்கள் தரவு ஒப்பந்தங்களைப் பயன்படுத்த உறுதியளித்தவுடன், அடுத்த முக்கியமான முடிவு அவற்றை எப்போது உருவாக்குவது என்பதுதான். ஒரு ஸ்கீமா-முதல் அணுகுமுறை, நீங்கள் ஒரு வரி செயலாக்கக் குறியீட்டை எழுதுவதற்கு முன் தரவு ஒப்பந்தத்தை வடிவமைத்து ஒப்புக்கொள்ள வேண்டும் என்று ஆணையிடுகிறது.
இது ஒரு குறியீடு-முதல் அணுகுமுறைக்கு முரணானது, அங்கு டெவலப்பர்கள் தங்கள் குறியீட்டை (எ.கா., ஜாவா வகுப்புகள்) எழுதுகிறார்கள், பின்னர் அதிலிருந்து ஒரு ஸ்கீமாவை உருவாக்குகிறார்கள். குறியீடு-முதல் ஆரம்ப முன்மாதிரிக்கு வேகமாக இருக்க முடியும் என்றாலும், ஸ்கீமா-முதல் ஒரு பல-அணி, பல-மொழி சூழலில் குறிப்பிடத்தக்க நன்மைகளை வழங்குகிறது:
- குழுக்களுக்கிடையேயான சீரமைப்பை கட்டாயப்படுத்துகிறது: ஸ்கீமா கலந்துரையாடல் மற்றும் மதிப்பாய்வுக்கான முதன்மை கலைப்பொருளாக மாறுகிறது. ஃப்ரண்ட்எண்ட், பேக்எண்ட், மொபைல் மற்றும் QA அணிகள் அனைவரும் முன்மொழியப்பட்ட ஒப்பந்தத்தை பகுப்பாய்வு செய்து, எந்த மேம்பாட்டு முயற்சியும் வீணடிக்கப்படுவதற்கு முன்பு கருத்துக்களை வழங்க முடியும்.
- இணை மேம்பாட்டை செயல்படுத்துகிறது: ஒப்பந்தம் இறுதி செய்யப்பட்டவுடன், அணிகள் இணையாக வேலை செய்ய முடியும். ஃப்ரண்ட்எண்ட் அணி ஸ்கீமாவிலிருந்து உருவாக்கப்பட்ட ஒரு மாக் சர்வருக்கு எதிராக UI கூறுகளை உருவாக்க முடியும், அதே நேரத்தில் பேக்எண்ட் அணி வணிக தர்க்கத்தை செயல்படுத்துகிறது. இது ஒருங்கிணைப்பு நேரத்தை வெகுவாகக் குறைக்கிறது.
- மொழி-சார்பற்ற ஒத்துழைப்பு: ஸ்கீமா உலகளாவிய மொழி. ஒரு பைதான் அணியும் ஒரு கோ அணியும் ஒருவருக்கொருவர் குறியீட்டுத் தளங்களின் நுணுக்கங்களைப் புரிந்து கொள்ளத் தேவையில்லாமல், Protobuf அல்லது OpenAPI வரையறையில் கவனம் செலுத்துவதன் மூலம் திறம்பட ஒத்துழைக்க முடியும்.
- மேம்படுத்தப்பட்ட API வடிவமைப்பு: செயலாக்கத்திலிருந்து தனிமைப்படுத்தப்பட்ட ஒப்பந்தத்தை வடிவமைப்பது பெரும்பாலும் தூய்மையான, அதிக பயனர் மைய API-களுக்கு வழிவகுக்கிறது. இது உள் டேட்டாபேஸ் மாடல்களை வெளிப்படுத்துவதை விட, நுகர்வோரின் அனுபவத்தைப் பற்றி சிந்திக்க கட்டடக் கலைஞர்களை ஊக்குவிக்கிறது.
கொள்கை 3: தானியங்கு சரிபார்ப்பு மற்றும் குறியீடு உருவாக்கம்
ஒரு ஸ்கீமா ஒரு ஆவணம் மட்டுமல்ல; இது ஒரு இயக்கக்கூடிய சொத்து. ஒரு ஸ்கீமா-முதல் அணுகுமுறையின் உண்மையான சக்தி ஆட்டோமேஷன் மூலம் உணரப்படுகிறது.
குறியீடு உருவாக்கம்: கருவிகள் உங்கள் ஸ்கீமா வரையறையை பாகுபடுத்தி, தானாகவே ஒரு பெரிய அளவிலான கொதிகலன் குறியீட்டை உருவாக்க முடியும்:
- சர்வர் ஸ்டப்ஸ்: உங்கள் சர்வருக்கான இடைமுகம் மற்றும் மாடல் வகுப்புகளை உருவாக்குங்கள், இதனால் டெவலப்பர்கள் வணிக தர்க்கத்தை மட்டும் நிரப்ப வேண்டும்.
- கிளையன்ட் SDK-கள்: பல மொழிகளில் (TypeScript, Java, Python, Go, போன்றவை) முழுமையாக-டைப்டு கிளையன்ட் நூலகங்களை உருவாக்குங்கள். இதன் பொருள் ஒரு நுகர்வோர் ஆட்டோ-கம்ப்ளீட் மற்றும் கம்பைல்-டைம் சரிபார்ப்புகளுடன் உங்கள் API-ஐ அழைக்க முடியும், இது ஒரு முழு வகை ஒருங்கிணைப்பு பிழைகளை நீக்குகிறது.
- தரவு பரிமாற்ற பொருள்கள் (DTOs): ஸ்கீமாவுடன் சரியாகப் பொருந்தக்கூடிய மாறாத தரவுப் பொருள்களை உருவாக்குங்கள், உங்கள் பயன்பாட்டிற்குள் நிலைத்தன்மையை உறுதி செய்கிறது.
ரன்டைம் சரிபார்ப்பு: ரன்டைமில் ஒப்பந்தத்தை அமல்படுத்த நீங்கள் அதே ஸ்கீமாவைப் பயன்படுத்தலாம். API கேட்வேக்கள் அல்லது மிடில்வேர் தானாகவே உள்வரும் கோரிக்கைகளையும் வெளிச்செல்லும் பதில்களையும் இடைமறித்து, அவற்றை OpenAPI ஸ்கீமாவிற்கு எதிராக சரிபார்க்க முடியும். ஒரு கோரிக்கை இணங்கவில்லை என்றால், அது ஒரு தெளிவான பிழையுடன் உடனடியாக நிராகரிக்கப்படுகிறது, இது செல்லாத தரவு உங்கள் வணிக தர்க்கத்தை எப்போதும் சென்றடைவதைத் தடுக்கிறது.
கொள்கை 4: மையப்படுத்தப்பட்ட ஸ்கீமா ரெஜிஸ்ட்ரி
ஒரு சில சேவைகளைக் கொண்ட ஒரு சிறிய சிஸ்டத்தில், ஸ்கீமாக்களை ஒரு பகிரப்பட்ட களஞ்சியத்தில் வைத்து நிர்வகிக்கலாம். ஆனால் ஒரு நிறுவனம் டஜன் கணக்கான அல்லது நூற்றுக்கணக்கான சேவைகளுக்கு அளவிடும்போது, இது தாங்க முடியாததாகிவிடும். ஒரு ஸ்கீமா ரெஜிஸ்ட்ரி என்பது உங்கள் தரவு ஒப்பந்தங்களை சேமித்தல், பதிப்பித்தல் மற்றும் விநியோகிப்பதற்கான ஒரு மையப்படுத்தப்பட்ட, அர்ப்பணிக்கப்பட்ட சேவையாகும்.
ஒரு ஸ்கீமா ரெஜிஸ்ட்ரியின் முக்கிய செயல்பாடுகள் பின்வருமாறு:
- உண்மையின் ஒற்றை மூலம்: இது அனைத்து ஸ்கீமாக்களுக்கும் உறுதியான இடம். ஸ்கீமாவின் எந்த பதிப்பு சரியானது என்று இனி யோசிக்க வேண்டாம்.
- பதிப்பித்தல் மற்றும் பரிணாம வளர்ச்சி: இது ஒரு ஸ்கீமாவின் வெவ்வேறு பதிப்புகளை நிர்வகிக்கிறது மற்றும் இணக்கத்தன்மை விதிகளை அமல்படுத்த முடியும். எடுத்துக்காட்டாக, பின்தங்கிய-இணக்கமற்ற எந்த புதிய ஸ்கீமா பதிப்பையும் நிராகரிக்க நீங்கள் அதை உள்ளமைக்கலாம், இது டெவலப்பர்கள் தற்செயலாக ஒரு உடைக்கும் மாற்றத்தை வரிசைப்படுத்துவதைத் தடுக்கிறது.
- கண்டுபிடிக்கக்கூடிய தன்மை: இது நிறுவனத்தில் உள்ள அனைத்து தரவு ஒப்பந்தங்களின் உலாவக்கூடிய, தேடக்கூடிய பட்டியலை வழங்குகிறது, இது அணிகள் ஏற்கனவே உள்ள தரவு மாதிரிகளைக் கண்டுபிடித்து மீண்டும் பயன்படுத்துவதை எளிதாக்குகிறது.
Confluent Schema Registry என்பது காஃப்கா சுற்றுச்சூழல் அமைப்பில் ஒரு நன்கு அறியப்பட்ட எடுத்துக்காட்டு, ஆனால் இதே போன்ற வடிவங்களை எந்த ஸ்கீமா வகைக்கும் செயல்படுத்தலாம்.
கோட்பாட்டிலிருந்து நடைமுறைக்கு: டைப்-பாதுகாப்பான கட்டமைப்புகளை செயல்படுத்துதல்
பொதுவான கட்டமைப்பு வடிவங்கள் மற்றும் தொழில்நுட்பங்களைப் பயன்படுத்தி இந்தக் கொள்கைகளை எவ்வாறு பயன்படுத்துவது என்பதை ஆராய்வோம்.
OpenAPI உடன் RESTful API-களில் டைப் பாதுகாப்பு
JSON பேலோடுகளுடன் கூடிய REST API-கள் இணையத்தின் உழைப்பாளிகள், ஆனால் அவற்றின் உள்ளார்ந்த நெகிழ்வுத்தன்மை வகை தொடர்பான சிக்கல்களின் முக்கிய ஆதாரமாக இருக்கலாம். OpenAPI இந்த உலகிற்கு ஒழுக்கத்தைக் கொண்டுவருகிறது.
உதாரண காட்சி: ஒரு `UserService` அதன் ஐடி மூலம் ஒரு பயனரைப் பெறுவதற்கான ஒரு எண்ட்பாயிண்டை வெளிப்படுத்த வேண்டும்.
படி 1: OpenAPI ஒப்பந்தத்தை வரையறுக்கவும் (எ.கா., `user-api.v1.yaml`)
openapi: 3.0.0
info:
title: User Service API
version: 1.0.0
paths:
/users/{userId}:
get:
summary: Get user by ID
parameters:
- name: userId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: A single user
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
description: User not found
components:
schemas:
User:
type: object
required:
- id
- email
- createdAt
properties:
id:
type: string
format: uuid
email:
type: string
format: email
firstName:
type: string
lastName:
type: string
createdAt:
type: string
format: date-time
படி 2: தானியக்கமாக்கி அமல்படுத்துங்கள்
- கிளையன்ட் உருவாக்கம்: ஒரு ஃப்ரண்ட்எண்ட் அணி ஒரு டைப்ஸ்கிரிப்ட் கிளையன்டை உருவாக்க `openapi-typescript-codegen` போன்ற ஒரு கருவியைப் பயன்படுத்தலாம். அழைப்பு `const user: User = await apiClient.getUserById('...')` போல இருக்கும். `User` வகை தானாகவே உருவாக்கப்படுகிறது, எனவே அவர்கள் `user.userName` (அது இல்லை) ஐ அணுக முயற்சித்தால், டைப்ஸ்கிரிப்ட் கம்பைலர் ஒரு பிழையை எறியும்.
- சர்வர்-பக்க சரிபார்ப்பு: ஸ்பிரிங் பூட் போன்ற ஒரு கட்டமைப்பைப் பயன்படுத்தும் ஒரு ஜாவா பேக்எண்ட், உள்வரும் கோரிக்கைகளை இந்த ஸ்கீமாவிற்கு எதிராக தானாகவே சரிபார்க்க ஒரு நூலகத்தைப் பயன்படுத்தலாம். ஒரு கோரிக்கை UUID அல்லாத `userId` உடன் வந்தால், உங்கள் கட்டுப்பாட்டாளர் குறியீடு இயங்குவதற்கு முன்பே கட்டமைப்பு அதை `400 Bad Request` உடன் நிராகரிக்கிறது.
gRPC மற்றும் Protocol Buffers உடன் இரும்பு போன்ற ஒப்பந்தங்களை அடைதல்
உயர்-செயல்திறன், உள் சேவை-க்கு-சேவை தகவல்தொடர்புக்கு, gRPC உடன் Protobuf டைப் பாதுகாப்பிற்கு ஒரு சிறந்த தேர்வாகும்.
படி 1: Protobuf ஒப்பந்தத்தை வரையறுக்கவும் (எ.கா., `user_service.proto`)
syntax = "proto3";
package user.v1;
import "google/protobuf/timestamp.proto";
service UserService {
rpc GetUser(GetUserRequest) returns (User);
}
message GetUserRequest {
string user_id = 1; // Field numbers are crucial for evolution
}
message User {
string id = 1;
string email = 2;
string first_name = 3;
string last_name = 4;
google.protobuf.Timestamp created_at = 5;
}
படி 2: குறியீட்டை உருவாக்குங்கள்
`protoc` கம்பைலரைப் பயன்படுத்தி, நீங்கள் கிளையன்ட் மற்றும் சர்வர் இரண்டிற்கும் டஜன் கணக்கான மொழிகளில் குறியீட்டை உருவாக்கலாம். ஒரு கோ சர்வர் வலுவாக-டைப்டு கட்டமைப்புகள் மற்றும் செயல்படுத்த ஒரு சேவை இடைமுகத்தைப் பெறும். ஒரு பைதான் கிளையன்ட் RPC அழைப்பைச் செய்து, முழுமையாக-டைப்டு `User` பொருளைத் திருப்பியளிக்கும் ஒரு வகுப்பைப் பெறும்.
இங்கு முக்கிய நன்மை என்னவென்றால், வரிசைப்படுத்தல் வடிவம் பைனரி மற்றும் ஸ்கீமாவுடன் இறுக்கமாக இணைக்கப்பட்டுள்ளது. சர்வர் பாகுபடுத்த முயற்சிக்கும் ஒரு சிதைந்த கோரிக்கையை அனுப்புவது கிட்டத்தட்ட சாத்தியமற்றது. டைப் பாதுகாப்பு பல அடுக்குகளில் செயல்படுத்தப்படுகிறது: உருவாக்கப்பட்ட குறியீடு, gRPC கட்டமைப்பு மற்றும் பைனரி வயர் வடிவம்.
நெகிழ்வான மற்றும் பாதுகாப்பானது: GraphQL இல் உள்ள வகை அமைப்புகள்
GraphQL-இன் சக்தி அதன் வலுவாக-டைப்டு ஸ்கீமாவில் உள்ளது. முழு API-ம் GraphQL SDL-ல் விவரிக்கப்பட்டுள்ளது, இது கிளையன்ட் மற்றும் சர்வருக்கு இடையேயான ஒப்பந்தமாக செயல்படுகிறது.
படி 1: GraphQL ஸ்கீமாவை வரையறுக்கவும்
type Query {
user(id: ID!): User
}
type User {
id: ID!
email: String!
firstName: String
lastName: String
createdAt: String! # Typically an ISO 8601 string
}
படி 2: கருவிகளைப் பயன்படுத்துங்கள்
நவீன GraphQL கிளையன்ட்கள் (Apollo Client அல்லது Relay போன்றவை) சர்வரின் ஸ்கீமாவைப் பெற "introspection" எனப்படும் ஒரு செயல்முறையைப் பயன்படுத்துகின்றன. பின்னர் அவர்கள் இந்த ஸ்கீமாவை மேம்பாட்டின் போது பயன்படுத்துகிறார்கள்:
- வினவல்களைச் சரிபார்க்கவும்: ஒரு டெவலப்பர் `User` வகையிலேயே இல்லாத ஒரு ஃபீல்டைக் கேட்கும் ஒரு வினவலை எழுதினால், அவர்களின் IDE அல்லது ஒரு பில்ட்-ஸ்டெப் கருவி உடனடியாக அதை ஒரு பிழையாகக் கொடியிடும்.
- வகைகளை உருவாக்கவும்: கருவிகள் ஒவ்வொரு வினவலுக்கும் TypeScript அல்லது Swift வகைகளை உருவாக்க முடியும், API-யிலிருந்து பெறப்பட்ட தரவு கிளையன்ட் பயன்பாட்டில் முழுமையாக டைப் செய்யப்பட்டிருப்பதை உறுதி செய்கிறது.
ஒத்திசைவற்ற மற்றும் நிகழ்வு சார்ந்த கட்டமைப்புகளில் (EDA) டைப் பாதுகாப்பு
நிகழ்வு சார்ந்த சிஸ்டம்களில் டைப் பாதுகாப்பு என்பது விவாதத்திற்குரிய வகையில் மிகவும் முக்கியமானதும், மிகவும் சவாலானதும் ஆகும். உற்பத்தியாளர்களும் நுகர்வோரும் முற்றிலும் பிரிக்கப்பட்டுள்ளனர்; அவர்கள் வெவ்வேறு அணிகளால் உருவாக்கப்பட்டு வெவ்வேறு நேரங்களில் வரிசைப்படுத்தப்படலாம். ஒரு செல்லாத நிகழ்வு பேலோட் ஒரு டாப்பிக்கை விஷமாக்கி, அனைத்து நுகர்வோரும் தோல்வியடையச் செய்யலாம்.
இங்குதான் Apache Avro போன்ற ஒரு வடிவமைப்புடன் இணைந்த ஒரு ஸ்கீமா ரெஜிஸ்ட்ரி பிரகாசிக்கிறது.
காட்சி: ஒரு `UserService` ஒரு புதிய பயனர் பதிவு செய்யும்போது ஒரு காஃப்கா டாப்பிக்கிற்கு `UserSignedUp` நிகழ்வை உருவாக்குகிறது. ஒரு `EmailService` இந்த நிகழ்வை ஒரு வரவேற்பு மின்னஞ்சலை அனுப்பப் பயன்படுத்துகிறது.
படி 1: Avro ஸ்கீமாவை வரையறுக்கவும் (`UserSignedUp.avsc`)
{
"type": "record",
"namespace": "com.example.events",
"name": "UserSignedUp",
"fields": [
{ "name": "userId", "type": "string" },
{ "name": "email", "type": "string" },
{ "name": "timestamp", "type": "long", "logicalType": "timestamp-millis" }
]
}
படி 2: ஒரு ஸ்கீமா ரெஜிஸ்ட்ரியைப் பயன்படுத்தவும்
- `UserService` (உற்பத்தியாளர்) இந்த ஸ்கீமாவை மத்திய ஸ்கீமா ரெஜிஸ்ட்ரியில் பதிவு செய்கிறது, இது அதற்கு ஒரு தனிப்பட்ட ஐடியை ஒதுக்குகிறது.
- ஒரு மெசேஜை உருவாக்கும்போது, `UserService` Avro ஸ்கீமாவைப் பயன்படுத்தி நிகழ்வுத் தரவை வரிசைப்படுத்தி, காஃப்காவுக்கு அனுப்புவதற்கு முன்பு மெசேஜ் பேலோடில் ஸ்கீமா ஐடியை முன்கூட்டியே சேர்க்கிறது.
- `EmailService` (நுகர்வோர்) மெசேஜைப் பெறுகிறது. அது பேலோடிலிருந்து ஸ்கீமா ஐடியைப் படித்து, ஸ்கீமா ரெஜிஸ்ட்ரியிலிருந்து தொடர்புடைய ஸ்கீமಾವைப் பெறுகிறது (அது தற்காலிக சேமிப்பில் இல்லை என்றால்), பின்னர் அந்த சரியான ஸ்கீமாவைப் பயன்படுத்தி மெசேஜை பாதுகாப்பாக வரிசைப்படுத்தப்படுத்துகிறது.
இந்த செயல்முறை, உற்பத்தியாளர் ஸ்கீமாவின் புதிய, பின்தங்கிய-இணக்கமான பதிப்புடன் புதுப்பிக்கப்பட்டிருந்தாலும், நுகர்வோர் தரவைப் புரிந்துகொள்ள எப்போதும் சரியான ஸ்கீமாவைப் பயன்படுத்துவதை உறுதி செய்கிறது.
டைப் பாதுகாப்பில் தேர்ச்சி பெறுதல்: மேம்பட்ட கருத்துகள் மற்றும் சிறந்த நடைமுறைகள்
ஸ்கீமா பரிணாம வளர்ச்சி மற்றும் பதிப்பித்தலை நிர்வகித்தல்
சிஸ்டம்கள் நிலையானவை அல்ல. ஒப்பந்தங்கள் உருவாக வேண்டும். ஏற்கனவே உள்ள கிளையன்ட்களை உடைக்காமல் இந்த பரிணாம வளர்ச்சியை நிர்வகிப்பதே முக்கியம். இதற்கு இணக்கத்தன்மை விதிகளைப் புரிந்துகொள்வது தேவை:
- பின்னோக்கிய இணக்கத்தன்மை: ஸ்கீமாவின் பழைய பதிப்பிற்கு எதிராக எழுதப்பட்ட குறியீடு, புதிய பதிப்புடன் எழுதப்பட்ட தரவை இன்னும் சரியாக செயலாக்க முடியும். உதாரணம்: ஒரு புதிய, விருப்பத்தேர்வு ஃபீல்டைச் சேர்ப்பது. பழைய நுகர்வோர் புதிய ஃபீல்டை வெறுமனே புறக்கணிப்பார்கள்.
- முன்னோக்கிய இணக்கத்தன்மை: ஸ்கீமாவின் புதிய பதிப்பிற்கு எதிராக எழுதப்பட்ட குறியீடு, பழைய பதிப்புடன் எழுதப்பட்ட தரவை இன்னும் சரியாக செயலாக்க முடியும். உதாரணம்: ஒரு விருப்பத்தேர்வு ஃபீல்டை நீக்குதல். புதிய நுகர்வோர் அதன் இல்லாததைக் கையாள எழுதப்பட்டுள்ளனர்.
- முழு இணக்கத்தன்மை: மாற்றம் பின்தங்கிய மற்றும் முன்னோக்கிய இணக்கமானது.
- உடைக்கும் மாற்றம்: பின்தங்கிய அல்லது முன்னோக்கிய இணக்கமற்ற ஒரு மாற்றம். உதாரணம்: ஒரு தேவைப்படும் ஃபீல்டின் பெயரை மாற்றுவது அல்லது அதன் தரவு வகையை மாற்றுவது.
உடைக்கும் மாற்றங்கள் தவிர்க்க முடியாதவை, ஆனால் வெளிப்படையான பதிப்பித்தல் (எ.கா., உங்கள் API அல்லது நிகழ்வின் `v2` ஐ உருவாக்குதல்) மற்றும் ஒரு தெளிவான நீக்கக் கொள்கை மூலம் நிர்வகிக்கப்பட வேண்டும்.
ஸ்டேடிக் அனாலிசிஸ் மற்றும் லின்டிங்கின் பங்கு
நாம் நமது மூலக் குறியீட்டை லின்ட் செய்வது போலவே, நமது ஸ்கீமாக்களையும் லின்ட் செய்ய வேண்டும். OpenAPI க்கான Spectral அல்லது Protobuf க்கான Buf போன்ற கருவிகள் உங்கள் தரவு ஒப்பந்தங்களில் ஸ்டைல் கைடுகள் மற்றும் சிறந்த நடைமுறைகளை அமல்படுத்த முடியும். இதில் அடங்குவன:
- பெயரிடல் மரபுகளை அமல்படுத்துதல் (எ.கா., JSON ஃபீல்டுகளுக்கு `camelCase`).
- அனைத்து செயல்பாடுகளுக்கும் விளக்கங்கள் மற்றும் குறிச்சொற்கள் இருப்பதை உறுதி செய்தல்.
- சாத்தியமான உடைக்கும் மாற்றங்களைக் கொடியிடுதல்.
- அனைத்து ஸ்கீமாக்களுக்கும் எடுத்துக்காட்டுகள் தேவைப்படுதல்.
லின்டிங் வடிவமைப்பு குறைபாடுகளையும் முரண்பாடுகளையும் செயல்முறையின் ஆரம்பத்திலேயே பிடிக்கிறது, அவை சிஸ்டத்தில் ஊடுருவுவதற்கு நீண்ட காலத்திற்கு முன்பே.
CI/CD பைப்லைன்களில் டைப் பாதுகாப்பை ஒருங்கிணைத்தல்
டைப் பாதுகாப்பை உண்மையிலேயே பயனுள்ளதாக மாற்ற, அது தானியக்கமாக்கப்பட்டு உங்கள் மேம்பாட்டு பணிப்பாய்வில் பதிக்கப்பட வேண்டும். உங்கள் CI/CD பைப்லைன் உங்கள் ஒப்பந்தங்களை அமல்படுத்துவதற்கான சரியான இடம்:
- லின்டிங் படி: ஒவ்வொரு புல் கோரிக்கையிலும், ஸ்கீமா லின்டரை இயக்கவும். ஒப்பந்தம் தரத் தரங்களை பூர்த்தி செய்யவில்லை என்றால் பில்டைத் தோல்வியடையச் செய்யுங்கள்.
- இணக்கத்தன்மை சரிபார்ப்பு: ஒரு ஸ்கீமா மாற்றப்படும்போது, தற்போது உற்பத்தியில் உள்ள பதிப்பிற்கு எதிராக அதன் இணக்கத்தன்மையை சரிபார்க்க ஒரு கருவியைப் பயன்படுத்தவும். ஒரு `v1` API-க்கு ஒரு உடைக்கும் மாற்றத்தை அறிமுகப்படுத்தும் எந்த புல் கோரிக்கையையும் தானாகவே தடுக்கவும்.
- குறியீடு உருவாக்கும் படி: பில்ட் செயல்முறையின் ஒரு பகுதியாக, சர்வர் ஸ்டப்ஸ் மற்றும் கிளையன்ட் SDK-களைப் புதுப்பிக்க குறியீடு உருவாக்கும் கருவிகளை தானாகவே இயக்கவும். இது குறியீடும் ஒப்பந்தமும் எப்போதும் ஒத்திசைவில் இருப்பதை உறுதி செய்கிறது.
ஒப்பந்தம்-முதல் மேம்பாட்டு கலாச்சாரத்தை வளர்ப்பது
இறுதியில், தொழில்நுட்பம் பாதி தீர்வு மட்டுமே. கட்டமைப்பு டைப் பாதுகாப்பை அடைய ஒரு கலாச்சார மாற்றம் தேவை. இது உங்கள் தரவு ஒப்பந்தங்களை உங்கள் கட்டமைப்பின் முதல்-தர குடிமக்களாகக் கருதுவதாகும், குறியீட்டைப் போலவே முக்கியமானது.
- குறியீட்டு மதிப்புரைகளைப் போலவே API மதிப்புரைகளையும் ஒரு நிலையான நடைமுறையாக ஆக்குங்கள்.
- மோசமாக வடிவமைக்கப்பட்ட அல்லது முழுமையற்ற ஒப்பந்தங்களைத் தள்ளுவதற்கு அணிகளுக்கு அதிகாரம் அளியுங்கள்.
- டெவலப்பர்கள் சிஸ்டத்தின் தரவு ஒப்பந்தங்களைக் கண்டுபிடித்து, புரிந்துகொண்டு, பயன்படுத்துவதை எளிதாக்கும் ஆவணங்கள் மற்றும் கருவிகளில் முதலீடு செய்யுங்கள்.
முடிவுரை: பின்னடைவுத்திறன் மற்றும் பராமரிக்கக்கூடிய சிஸ்டம்களை உருவாக்குதல்
சிஸ்டம் டிசைன் டைப் பாதுகாப்பு என்பது கட்டுப்படுத்தும் அதிகாரத்துவத்தைச் சேர்ப்பது பற்றியது அல்ல. இது சிக்கலான, விலையுயர்ந்த மற்றும் கண்டறிய கடினமான பிழைகளின் ஒரு பெரிய வகையை முன்கூட்டியே நீக்குவது பற்றியது. உற்பத்திச் சூழலில் ரன்டைமில் பிழை கண்டறிதலை, மேம்பாட்டில் வடிவமைப்பு மற்றும் பில்ட் நேரத்திற்கு மாற்றுவதன் மூலம், நீங்கள் மேலும் பின்னடைவுத்திறன், நம்பகமான மற்றும் பராமரிக்கக்கூடிய சிஸ்டம்களுக்கு வழிவகுக்கும் ஒரு சக்திவாய்ந்த பின்னூட்ட வளையத்தை உருவாக்குகிறீர்கள்.
வெளிப்படையான தரவு ஒப்பந்தங்களை ஏற்றுக்கொள்வதன் மூலம், ஒரு ஸ்கீமா-முதல் மனநிலையை ஏற்றுக்கொள்வதன் மூலம், மற்றும் உங்கள் CI/CD பைப்லைன் மூலம் சரிபார்ப்பை தானியக்கமாக்குவதன் மூலம், நீங்கள் சேவைகளை இணைப்பது மட்டுமல்ல; நீங்கள் ஒரு ஒத்திசைவான, கணிக்கக்கூடிய மற்றும் அளவிடக்கூடிய சிஸ்டத்தை உருவாக்குகிறீர்கள், அங்கு கூறுகள் நம்பிக்கையுடன் ஒத்துழைத்து உருவாக முடியும். உங்கள் சுற்றுச்சூழல் அமைப்பில் ஒரு முக்கியமான API-ஐத் தேர்ந்தெடுத்துத் தொடங்குங்கள். அதன் ஒப்பந்தத்தை வரையறுத்து, அதன் முதன்மை நுகர்வோருக்கு ஒரு டைப்டு கிளையன்டை உருவாக்கி, தானியங்கு சோதனைகளை உருவாக்குங்கள். நீங்கள் பெறும் ஸ்திரத்தன்மையும் டெவலப்பர் வேகமும் இந்த நடைமுறையை உங்கள் முழு கட்டமைப்பு முழுவதும் விரிவுபடுத்துவதற்கான ஊக்கியாக இருக்கும்.