వందనాలు!
నా పేరు సెర్గీ, నేను tinkoff.ru ప్లాట్ఫారమ్ యొక్క API బృందంలో ఇన్ఫ్రాస్ట్రక్చర్ ఇంజనీర్గా పని చేస్తున్నాను.
ఈ వ్యాసంలో నేను బ్యాలెన్సర్లను సిద్ధం చేసేటప్పుడు మా బృందం ఎదుర్కొన్న సమస్యల గురించి మాట్లాడుతాను వికీపీడియా వివిధ ప్రాజెక్టుల కోసం. వాటిలో ఎక్కువ భాగాన్ని అధిగమించడానికి నన్ను అనుమతించిన సాధనం గురించి కూడా నేను మీకు చెప్తాను.
Nginx ఒక మల్టీఫంక్షనల్ మరియు చురుకుగా అభివృద్ధి చెందుతున్న ప్రాక్సీ సర్వర్. ఇది పెద్ద సంఖ్యలో మాడ్యూళ్లను కలిగి ఉంది, ఇది పూర్తి జాబితా కాదు. ప్రతి ప్రాజెక్ట్ బాలన్సర్ యొక్క కార్యాచరణ మరియు Nginx సంస్కరణ (ఉదాహరణకు, http/2 మరియు grpc ప్రాక్సింగ్ ఉనికి) మరియు దాని మాడ్యూళ్ల కూర్పుపై కొన్ని అవసరాలను విధిస్తుంది.
మేము నిర్దిష్ట Linux పంపిణీలో అమలులో ఉన్న మాడ్యూల్స్తో అవసరమైన తాజా సంస్కరణను చూడాలనుకుంటున్నాము. మా విషయంలో, ఇవి deb- మరియు rpm-ఆధారిత సిస్టమ్లు. కంటైనర్లతో ఎంపిక ఈ వ్యాసంలో పరిగణించబడదు.
మేము మా బ్యాలెన్సర్ల కార్యాచరణను త్వరగా మార్చాలనుకుంటున్నాము. మరియు ఇక్కడ ప్రశ్న వెంటనే తలెత్తుతుంది: వీలైనంత తక్కువ వనరులను ఖర్చు చేస్తున్నప్పుడు దీన్ని ఎలా సాధించాలి? ప్రాసెస్ను సెటప్ చేయడం మరింత ఉత్తమం, తద్వారా మనం పరిమిత సంఖ్యలో ఇన్పుట్ పారామితులను పేర్కొనవచ్చు మరియు అవుట్పుట్ వద్ద కావలసిన OS కోసం deb/rpm ప్యాకేజీ రూపంలో ఒక కళాఖండాన్ని అందుకోవచ్చు.
ఫలితంగా, అనేక సమస్యలను రూపొందించవచ్చు:
Nginx యొక్క తాజా వెర్షన్తో ఎల్లప్పుడూ ప్యాకేజీలు ఉండవు.
అవసరమైన మాడ్యూళ్లతో ప్యాకేజీలు లేవు.
మాన్యువల్గా ప్యాకేజీని కంపైల్ చేయడం మరియు నిర్మించడం సమయం తీసుకుంటుంది మరియు చాలా శ్రమతో కూడుకున్నది.
ఈ లేదా ఆ Nginx ఉదాహరణ ఎలా అసెంబుల్ చేయబడిందో వివరణ లేదు.
ఈ సమస్యలను పరిష్కరించడానికి, మానవులు చదవగలిగే ఆకృతిలో స్పెసిఫికేషన్ను ఇన్పుట్గా తీసుకుని, దాని ఆధారంగా అవసరమైన కార్యాచరణతో Nginx ప్యాకేజీని సమీకరించే సాధనం అవసరం.
గితుబ్ యొక్క విస్తారతపై మాకు తగిన ఎంపికను కనుగొనలేదు, మేము మా స్వంత సాధనాన్ని రూపొందించాలని నిర్ణయించుకున్నాము - nginx-బిల్డర్.
లక్షణాలు (సవరించండి)
మా సాధనంలో, మేము కోడ్ రూపంలో స్పెసిఫికేషన్ యొక్క వివరణను సృష్టించాలనుకుంటున్నాము, దానిని Git రిపోజిటరీలో ఉంచవచ్చు. దీన్ని చేయడానికి, మేము అలాంటి వాటి కోసం సుపరిచితమైన ఆకృతిని ఎంచుకున్నాము - yaml. స్పెసిఫికేషన్ ఉదాహరణ:
అవసరమైన మాడ్యూల్స్తో Nginx వెర్షన్ 1.14.2తో deb ప్యాకేజీని చూడాలనుకుంటున్నామని ఇక్కడ మేము సూచిస్తున్నాము. మాడ్యూల్స్తో కూడిన విభాగం ఐచ్ఛికం. వాటిలో ప్రతిదానికి మీరు సెట్ చేయవచ్చు:
పేరు.
మీరు పొందగలిగే చిరునామా:
Git రిపోజిటరీ. మీరు శాఖ లేదా ట్యాగ్ని కూడా పేర్కొనవచ్చు.
ఆర్కైవ్ వెబ్ లింక్.
ఆర్కైవ్కి స్థానిక లింక్.
కొన్ని మాడ్యూల్లకు అదనపు డిపెండెన్సీలు ఇన్స్టాల్ చేయబడాలి, ఉదాహరణకు nginx-auth-ldapకి libldap2-dev ఇన్స్టాల్ చేయడం అవసరం. మాడ్యూల్ను వివరించేటప్పుడు అవసరమైన డిపెండెన్సీలను కూడా పేర్కొనవచ్చు.
పర్యావరణం
మా సాధనంలో మీరు కంపైలేషన్, ప్యాకేజీ అసెంబ్లీ మరియు ఇతర సహాయక సాఫ్ట్వేర్ కోసం ఇన్స్టాల్ చేసిన యుటిలిటీలతో వాతావరణాన్ని త్వరగా పొందవచ్చు. మీకు అవసరమైన ప్రతిదానితో కూడిన డాకర్ కంటైనర్ ఇక్కడ అనువైనది (రిపోజిటరీలో ఇప్పటికే ఉబుంటు మరియు సెంటోస్ కోసం డాకర్ ఫైల్ల యొక్క కొన్ని ఉదాహరణలు ఉన్నాయి).
స్పెసిఫికేషన్ రూపొందించబడిన తర్వాత మరియు పర్యావరణం సిద్ధమైన తర్వాత, మేము మా బిల్డర్ను ప్రారంభిస్తాము, మునుపు దాని డిపెండెన్సీలను ఇన్స్టాల్ చేసాము:
ఇక్కడ పునర్విమర్శ సంఖ్య ఐచ్ఛికం మరియు సంస్కరణ సమావేశాల కోసం ఉపయోగించబడుతుంది. ఇది ప్యాకేజీ యొక్క మెటా సమాచారంలో వ్రాయబడింది, సర్వర్లలో నవీకరించడాన్ని సులభతరం చేస్తుంది.
లాగ్ల నుండి మీరు ఏమి జరుగుతుందో పర్యవేక్షించవచ్చు. ఇక్కడ ప్రధాన అంశాలకు ఉదాహరణ:
builder - INFO - Parse yaml file: example.config.yaml
builder - INFO - Download scripts for build deb package
builder - INFO - Downloading nginx src...
builder - INFO - --> http://nginx.org/download/nginx-1.14.1.tar.gz
builder - INFO - Downloading 3d-party modules...
builder - INFO - Module nginx-auth-ldap will download by branch
builder - INFO - -- Done: nginx-auth-ldap
builder - INFO - -- Done: ngx_http_substitutions_filter_module
builder - INFO - Module headers-more-nginx-module will downloading
builder - INFO - Module nginx-module-vts will download by tag
builder - INFO - -- Done: nginx-module-vts
builder - INFO - Module ngx_devel_kit will download by tag
builder - INFO - -- Done: ngx_devel_kit
builder - INFO - -- Done: ngx_cache_purge
builder - INFO - -- Done: ngx_http_dyups_module
builder - INFO - Downloading dependencies
builder - INFO - Building .deb package
builder - INFO - Running 'dh_make'...
builder - INFO - Running 'dpkg-buildpackage'...
dpkg-deb: building package 'nginx' in '../nginx_1.14.1-1_amd64.deb'.
కాబట్టి, కేవలం రెండు ఆదేశాలతో, మేము పర్యావరణాన్ని మరియు అవసరమైన Nginx అసెంబ్లీని సృష్టిస్తాము మరియు స్క్రిప్ట్ ప్రారంభించబడిన డైరెక్టరీలో ప్యాకేజీ కనిపిస్తుంది.
పొందుపరచడం
మేము మా సాధనాన్ని CI/CD ప్రక్రియలలోకి చేర్చవచ్చు. ఈ రోజు ఉన్న అనేక CI సిస్టమ్లలో ఏదైనా దీనికి సహాయపడవచ్చు, ఉదాహరణకు టీమ్సిటీ లేదా గిట్లాబ్ సీఐ.
ఫలితంగా, Git రిపోజిటరీలో స్పెసిఫికేషన్ మారిన ప్రతిసారీ, ఆర్టిఫ్యాక్ట్ యొక్క బిల్డ్ స్వయంచాలకంగా ప్రారంభించబడుతుంది. పునర్విమర్శ నంబర్ బిల్డ్ లాంచ్ కౌంటర్కి లింక్ చేయబడింది.
మరికొంత సమయంతో, మీరు మీ స్థానిక ప్యాకేజీ రిపోజిటరీ, Nexus, ఆర్టిఫ్యాక్టరీ మొదలైన వాటికి పంపబడేలా కళాఖండాన్ని కాన్ఫిగర్ చేయవచ్చు.
ఒక అదనపు ప్రయోజనం ఏమిటంటే, yaml కాన్ఫిగరేషన్ ఫైల్ను Ansible లేదా మరొక ఆటోమేటిక్ కాన్ఫిగరేషన్ సిస్టమ్కు కనెక్ట్ చేయవచ్చు మరియు అక్కడ నుండి మనం అమలు చేయాలనుకుంటున్న సంస్కరణ సంఖ్య మరియు ప్యాకేజీ రకాన్ని తీసుకోవచ్చు.
తదుపరి ఏమిటి
ప్రాజెక్ట్ ఇంకా పూర్తి కాలేదు. మేము ఇప్పుడు పని చేస్తున్నది ఇక్కడ ఉంది:
మేము కాన్ఫిగరేషన్ యొక్క అవకాశాన్ని విస్తరిస్తాము, కానీ అదే సమయంలో వీలైనంత సరళంగా ఉంచండి. మీకు రెండు మాత్రమే అవసరమైతే మీరు వెయ్యి పారామితులను నిర్వచించకూడదు మరియు మిగిలినవి డిఫాల్ట్గా సరిపోతాయి. ఇందులో కంపైలేషన్ ఫ్లాగ్లు ఉన్నాయి (ఇప్పుడు మీరు వాటిని అంతర్గత కాన్ఫిగరేషన్ ఫైల్ src/config.pyలో మార్చవచ్చు), ఇన్స్టాలేషన్ పాత్ మరియు లాంచ్ యూజర్.
మేము వివిధ ఆర్టిఫ్యాక్ట్ రిపోజిటరీలకు ప్యాకేజీని స్వయంచాలకంగా పంపడానికి ఎంపికలను జోడిస్తున్నాము.
మాడ్యూల్ను లోడ్ చేస్తున్నప్పుడు అనుకూల ఆదేశాన్ని అమలు చేయండి (ఉదాహరణకు, ఉపయోగించడానికి github.com/nginx-modules/nginx_upstream_check_module మీరు ముందుగా ఒక నిర్దిష్ట సంస్కరణ యొక్క ప్యాచ్ను తప్పనిసరిగా వర్తింపజేయాలి)
పరీక్షలను జోడిస్తోంది:
ప్యాకేజీ సరిగ్గా ఇన్స్టాల్ చేయబడింది.
Nginx అవసరమైన సంస్కరణను కలిగి ఉంది మరియు అవసరమైన ఫ్లాగ్లు మరియు మాడ్యూల్లతో నిర్మించబడింది.
అవసరమైన మార్గాలు, ఖాతాలు మరియు మొదలైనవి సృష్టించబడతాయి.