
Remak. trad.: Otè atik sa a (Luc Perkins) se yon defansè pwomotè nan òganizasyon CNCF, ki se lakay yo nan pwojè Open Source tankou Linkerd, SMI (Service Mesh Interface) ak Kuma (nan chemen an, èske w te mande tou poukisa Istio se pa sou lis sa a?). Yon fwa ankò ap eseye pote kominote DevOps la yon pi bon konpreyansyon sou battage alamòd ki rele "sèvis may", li bay lis 16 kapasite karakteristik ke solisyon sa yo bay.
Jodi a â youn nan sijè ki pi cho nan domèn jeni lojisyèl (ak rezon!). Mwen panse ke teknoloji sa a se ekstrèmman pwomèt epi li ta renmen wè li vin gaye toupatou (lè li fè sans, nan kou). Sepandan, li toujou antoure pa yon aura nan mistè pou pifò moun. An menm tan, menm moun ki byen li te ye ak li, li se souvan difisil yo fòmile avantaj li yo ak ki sa egzakteman li ye (ki gen ladan ou vrèman). Nan atik sa a mwen pral eseye korije sitiyasyon an pa bay lis divès kalite ka itilize "sèvis may"*.
* Remak tradiksyon: isit la ak pi lwen nan atik la egzakteman tradiksyon sa a ("sèvis may") yo pral itilize pou nouvo tèm sèvis may la.
Men, anvan mwen vle fè kèk kòmantè:
- Mwen pa janm te travay ak may sèvis oswa itilize yo deyò nan pwojè yo te kòmanse pou pwòp edikasyon mwen an. Nan lòt men an, se mwen menm ki te ekri yon pakèt dokiman pou may sèvis entèn Twitter a nan 2015 (li pa te menm rele yon "may sèvis" nan lè sa a) epi ki te patisipe nan devlopman nan sit entènèt la ak dokiman pou , se konsa sa vle di yon bagay.
- Lis mwen an se apwoksimatif ak enkonplè. Gen ka itilize ka mwen pa konnen, ak nouvo opsyon ap gen anpil chans rive sou tan teknoloji a devlope ak popilarite li ap grandi.
- An menm tan an, se pa tout aplikasyon may sèvis ki egziste deja sipòte tout ka itilizasyon ki nan lis la. Se poutèt sa, deklarasyon mwen tankou "sèvis may kapab..." ta dwe li kòm "endividyèl, e petèt tout popilè sèvis may enplemantasyon kapab...".
- Lòd egzanp yo pa fè okenn diferans.
Lis kout:
- dekouvèt sèvis;
- chifreman;
- otantifikasyon ak otorizasyon;
- balans chaj;
- sikwi kraze;
- autoscaling;
- deplwaman Canary;
- deplwaman ble-vèt;
- chèk sante;
- chaj koule;
- mirwar trafik;
- izolasyon;
- demann limit to, reesye ak timeout;
- telemetri;
- odit;
- vizyalizasyon.
1. Dekouvèt sèvis
TL;DR: Konekte ak lòt sèvis sou rezo a lè l sèvi avèk non senp.
Sèvis yo ta dwe kapab otomatikman "jwenn" youn lòt lè l sèvi avèk bon non - pou egzanp, service.api.production, pets/staging oswa cassandra. Anviwònman nwaj yo elastik, ak yon sèl non ka kache anpil ka nan yon sèvis. Li klè ke nan yon sitiyasyon konsa li se fizikman enposib di tout adrès IP.
Anplis de sa, lè yon sèvis jwenn yon lòt, li ta dwe kapab voye demann nan sèvis sa a san yo pa pè ke yo pral fini nan opinyon an nan egzanp kase li yo. Nan lòt mo, may sèvis la dwe kontwole sante tout sikonstans sèvis yo epi kenbe lis la nan gen tout pouvwa a ajou ke posib.
Chak may sèvis aplike mekanis dekouvèt sèvis la yon fason diferan. Nan moman sa a, fason ki pi komen se delege nan pwosesis ekstèn tankou Kubernetes DNS. Nan tan lontan an sou Twitter nou te itilize yon sistèm nonmen pou objektif sa a . Anplis de sa, teknoloji may sèvis fè li posib pou mekanis nonmen koutim parèt (byenke mwen poko wè okenn aplikasyon SM ak fonksyonalite sa yo).
2. chifreman
TL;DR: Debarase m de trafik ki pa chiffres ant sèvis yo epi fè pwosesis sa a otomatize ak Êvolutive.
Li bon pou konnen atakè yo pa ka antre nan rezo entèn ou. Firewall fè yon gwo travay nan sa a. Men, sa k ap pase si yon pirate antre anndan an? Ăske l ap kapab fè tou sa li vle ak trafik andedan sèvis? Ann espere sa pa rive apre tout. Pou anpeche senaryo sa a, ou ta dwe aplike yon rezo zewo-konfyans kote tout trafik ant sèvis yo chiffres. Pifò sèvis modèn may reyalize sa atravè mityèl (TLS mityèl, mTLS). Nan kèk ka, mTLS travay nan nyaj antye ak grap (mwen panse ke kominikasyon entèplanetè yo pral yon jou ap ranje menm jan an).
Natirèlman, pou may sèvis mTLS opsyonèl. Chak sèvis ka pran swen pwòp TLS li yo, men sa vle di ke w ap bezwen jwenn yon fason pou jenere sètifika, distribye yo atravè tout lame sèvis yo, epi mete kòd nan aplikasyon an ki pral chaje sètifika sa yo nan dosye yo. Wi, pa bliye renouvle sètifika sa yo nan entèval regilye. Sèvis may otomatize mTLS ak sistèm tankou , ki, nan vire, otomatize pwosesis la nan founi dokiman yo ak wotasyon sètifika.
3. Otantifikasyon ak Otorizasyon
TL;DR: Etabli ki moun ki fè demann lan ye epi defini sa yo gen dwa fè anvan demann lan menm rive nan sèvis la.
Sèvis souvan vle konnen kiyès fè demann lan (otantifikasyon), epi sèvi ak enfòmasyon sa a, deside ki yon antite bay gen dwa fè (otorizasyon). Nan ka sa a, pwonon "ki moun" ka kache:
- Lòt sèvis. Yo rele sa "otantifikasyon" kanmarad" Pou egzanp, sèvis
webvle jwenn aksè nan sèvis ladb. Sèvis may anjeneral rezoud pwoblèm sa yo lè l sèvi avèk mTLS: sètifika nan ka sa a aji kòm idantifyan ki nesesè yo. - Gen kèk itilizatè imen. Yo rele sa "otantifikasyon" demann" Pou egzanp, itilizatè
haxor69vle achte yon nouvo lanp. Sèvis may bay mekanis divès kalite, pa egzanp. .Anpil nan nou te fè sa nan kòd aplikasyon an. Yon demann vini, nou gade nan tab la
users, jwenn itilizatè a epi konpare modpas la, Lè sa a, tcheke kolòn nanpermissionselatriye. Nan ka yon may sèvis, sa rive anvan demann lan menm rive nan sèvis la.
Enn fwa ki nouân etablir ki sa demann i sorti, nou bezwen determinen ki sa antite i kapab fer. Gen kèk may sèvis pèmèt ou mete règleman debaz (sou ki moun ki ka fè sa) kòm dosye YAML oswa sou liy lòd la, pandan ke lòt moun ofri entegrasyon ak kad tankou . Objektif final la se fè sèvis ou yo aksepte nenpòt demann, san danje si li soti nan yon sous ou fè konfyans и aksyon sa a pèmèt.
4. balans chaj
TL; DR: Distribye chaj la atravè ka sèvis selon yon modèl espesifik.
Yon "Sèvis" nan yon seksyon sèvis trè souvan konsiste de anpil ka ki idantik. Pou egzanp, jodi a sèvis la cache konsiste de 5 kopi, ak demen nimewo yo ka ogmante a 11. Demann yo voye bay cache, yo dwe distribye an akò ak yon objektif espesifik. Pou egzanp, minimize latansi oswa maksimize pwobabilite pou rive nan yon egzanp k ap travay. Algorithm ki pi souvan itilize a se Round-robin, men gen anpil lòt - pou egzanp, metòd la filaplon. (pondÊrÊ) demann (ou ka chwazi objektif pi pito), bag (bag) hachaj (itilize hachaj ki konsistan atravè tout lame en) oswa pi piti metòd demann (yo bay preferans nan egzanp ki gen mwens demann).
Balansè klasik yo gen lòt fonksyon, tankou HTTP caching ak pwoteksyon DDoS, men yo pa trè enpòtan pou trafik lès-lwès (ki vle di, pou trafik k ap koule nan yon sant done - approx. Transl.) (dimansyon tipik nan may sèvis). Natirèlman, li pa nesesè yo sèvi ak yon may sèvis pou balanse chaj, men li pèmèt ou mete ak kontwole politik balanse pou chak sèvis soti nan yon kouch kontwòl santralize, kidonk elimine bezwen nan kouri ak konfigirasyon balanse chaj separe nan chemine rezo a. .
5. Awondisman kraze
TL; DR: Sispann trafik nan sèvis ki gen pwoblèm epi kontwole domaj yo nan pi move ka yo.
Si pou kèk rezon sèvis la pa ka fè fas ak trafik la, may sèvis la bay plizyè opsyon pou rezoud pwoblèm sa a (lòt yo pral diskite nan seksyon ki apwopriye yo). Sikwi kraze se opsyon ki pi grav pou dekonekte yon sèvis nan trafik. Sepandan, pou kont li li pa fè sans - yon plan backup nesesè. Yo ka bay presyon nan do () nan sèvis ki fè demann (jis pa bliye konfigirasyon may sèvis ou a pou sa!), oswa, pou egzanp, koloran paj estati a wouj epi redireksyon itilizatè yo nan yon lòt vèsyon paj la ak yon "balèn ki tonbe" ("Twitter se desann").
Sèvis may pa sèlman pèmèt ou defini kote fèmen ap swiv ak ki sa a pral swiv. Nan ka sa a, "lè" ka gen ladan nenpòt konbinezon de paramèt espesifye: kantite total demann pou yon sèten peryòd, kantite koneksyon paralèl, demann annatant, retry aktif, elatriye.
Ou pwobableman pa vle abize sikwi kraze, men li bon pou konnen ke ou gen yon plan backup nan ka ijans.
6. Autoscaling
TL;DR: Ogmante oswa diminye kantite ka sèvis depann sou kritè yo espesifye.
Sèvis may yo pa orè, kidonk yo pa fè sa pote soti dekale tèt ou. Sepandan, yo ka bay enfòmasyon sou ki planifikatè ap baze desizyon yo. Piske may sèvis yo gen aksè a tout trafik ant sèvis yo, yo gen anpil enfòmasyon sou sa k ap pase: ki sèvis ki gen pwoblèm, ki sèvis yo chaje anpil (kapasite yo resevwa yo ap gaspiye), elatriye.
Pou egzanp, Kubernetes balanse sèvis ki baze sou CPU gous yo ak itilizasyon memwa (gade rapò nou an ""- environ. trad.), men si w deside echèl baze sou nenpòt lòt metrik (nan ka nou an, ki gen rapò ak trafik), w ap bezwen yon metrik espesyal. Jesyon montre kijan pou fè sa ak , и , men pwosesis la tèt li se byen konplike. Nou ta renmen may sèvis la senplifye sa a pa pèmèt nou tou senpleman mete kondisyon tankou "ogmante kantite ka sèvis yo. auth, si kantite demann ki annatant depase papòt la nan yon minit."
7. Canary deplwaman
TL; DR: Teste nouvo karakteristik oswa vèsyon sèvis sou yon gwoup itilizatè yo.
Ann di w ap devlope yon pwodwi SaaS epi ou gen entansyon woule yon nouvo vèsyon fre nan li. Ou teste li nan sèn epi li te travay anpil. Men, gen toujou sèten enkyetid sou konpòtman li nan kondisyon reyèl. Nan lòt mo, ou bezwen teste nouvo vèsyon an sou pwoblèm reyèl san yo pa risk itilizatè konfyans. Deplwaman Canary yo bon pou sa. Yo pèmèt ou demontre yon nouvo karakteristik nan yon gwoup itilizatè yo. Souseri sa a ka konpoze de itilizatè yo ki pi fidèl oswa moun ki travay ak vèsyon an gratis nan pwodwi a, oswa itilizatè ki te eksprime yon dezi yo dwe "kochon Gine".
Sèvis may aplike sa a lè yo pèmèt ou presize kritè ki detèmine ki moun ki pral wè ki vèsyon aplikasyon an, ak routage trafik kòmsadwa. Sepandan, pa gen anyen ki chanje pou sèvis yo tèt yo. Vèsyon 1.0 nan sèvis la kwè ke tout demann soti nan itilizatè ki ta dwe wè li, ak vèsyon 1.1 kwè menm bagay la pou itilizatè li yo. Pandan se tan, ou ka chanje pousantaj trafik ant vèsyon yo ansyen ak nouvo, redireksyon yon nimewo k ap grandi nan itilizatè yo nan nouvo a si li travay stab epi "kochon Gine" ou bay ale-ahead.
8. Deplwaman ble-vèt
TL; DR: Dewoule yon nouvo karakteristik fre, men prepare w pou w repran tout bagay imedyatman.
Sa vle di se woule yon nouvo sèvis "ble", lanse li an paralèl ak ansyen, "vèt" yon sèl la. Si tout bagay ale fèt san pwoblèm ak nouvo sèvis la fè byen, Lè sa a, ansyen an ka piti piti enfim. (Ay, yon jou nouvo sèvis "ble" sa a pral repete sò "vèt" la epi disparèt...) Deplwaman ble-vèt diferan de deplwaman kanary yo paske nouvo fonksyon an kouvri tout moun nan yon fwa itilizatè yo (pa fè pati); Pwen isit la se gen yon "safe harbor" pare nan ka yon bagay ale mal.
Sèvis may ofri yon fason trè pratik pou teste yon sèvis "ble" epi imedyatman chanje nan yon travay "vèt" yon sèl nan ka ta gen pwoblèm. Nou pa mansyone lefèt ke sou wout la yo bay anpil enfòmasyon (gade "Telemetry" anba a) sou travay "ble a", ki ede konprann si wi ou non li pare pou operasyon konplè.
Remak. trad.: Ou ka li plis sou diferan estrateji deplwaman nan Kubernetes (ki gen ladan Canary mansyone, ble/vèt ak lòt moun) nan .
9. Chèk sante
TL;DR: Kenbe tras de ki ka sèvis ki fonksyonèl epi reponn a sila ki pa fonksyonèl ankò.
Chèk sante (chèk sante) ede deside si egzanp sèvis yo pare pou aksepte ak trete trafik. Pou egzanp, nan ka sèvis HTTP, yon chèk sante ta ka sanble ak yon demann GET nan pwen final la /health. Repons 200 OK pral vle di ke egzanp lan an sante, nenpòt lòt - ke li pa pare yo resevwa trafik. Sèvis may pèmèt ou presize tou de fason nan ki fonksyonalite yo pral tcheke ak frekans ak ki chèk sa a pral fèt. Lè sa a, enfòmasyon sa a ka itilize pou lòt rezon - pou egzanp, pou balanse chaj ak sikwi kraze.
Kidonk, tcheke sante se pa yon ka itilize otonòm, men anjeneral yo itilize pou reyalize lòt objektif. Epitou, tou depann de rezilta chèk sante yo, aksyon ekstèn nan lòt sib may sèvis yo ka nesesè: pou egzanp, mete ajou paj estati a, kreye yon pwoblèm sou GitHub, oswa ranpli yon tikè JIRA. Ak sèvis may ofri yon mekanis pratik otomatize tout bagay sa yo.
10. Chaj koule
TL;DR: Redireksyon trafik an repons a yon ogmantasyon tanporè nan itilizasyon.
Si yon sèten sèvis chaje twòp ak trafik, ou ka tanporèman redireksyon kèk nan trafik sa a nan yon lòt kote (sa vle di, "depotwa", "transfè" (koule) li la). Pou egzanp, nan yon sèvis backup oswa sant done, oswa nan yon pèmanan sijè. Kòm yon rezilta, sèvis la ap kontinye trete kèk demann olye pou yo fè aksidan ak sispann trete tout bagay ansanm. Chaj koule se pi bon pase kraze kous la, men li toujou pa rekòmande pou abize li. Li ede anpeche echèk kaskad ki lakòz sèvis en aksidan.
11. Paralelizasyon trafik / mirwar
TL; DR: Voye yon sèl demann nan plizyè kote nan yon fwa.
Pafwa gen yon bezwen voye yon demann (oswa yon sèten seleksyon nan demann) nan plizyè sèvis nan yon fwa. Yon egzanp tipik se voye yon pati nan trafik pwodiksyon nan yon sèvis staging. Sèvè entènèt pwodiksyon prensipal la voye yon demann nan sèvis la en products.production epi sèlman pou li. Ak sèvis may la entèlijans kopi demann sa a epi voye li bay products.staging, ki sèvè entènèt la pa menm okouran de.
Yon lòt ka itilize sèvis may ki gen rapò ki ka aplike sou tèt paralelizasyon trafik se . Li enplike voye menm demann yo nan diferan vèsyon nan sèvis la epi tcheke si tout vèsyon yo konpòte yo menm. Mwen poko vini atravè yon aplikasyon may sèvis ak yon sistèm tès regresyon entegre tankou , men lide nan tèt li sanble pwomèt.
12. D'
TL; DR: Kraze may sèvis ou an nan mini-rezo.
Konnen tou kòm segmentasyonIzolasyon se atizay pou divize yon may sèvis an segman lojikman diferan ki pa konnen anyen sou youn ak lòt. Izolasyon se yon ti jan tankou kreye rezo prive vityèl. Diferans fondamantal la se ke ou ka toujou jwi tout benefis ki genyen nan yon may sèvis (tankou dekouvèt sèvis), men ak plis sekirite. Pou egzanp, si yon atakè kapab antre nan yon sèvis sou yon sèl sous-rezo, li pa pral kapab wè ki sèvis yo ap kouri sou lòt sous-rezo oswa entèsepte trafik yo.
Anplis de sa, benefis yo ka tou òganizasyonèl. Ou gendwa vle sous-rezo sèvis ou yo ki baze sou estrikti konpayi ou a epi soulaje devlopè yo nan chay kognitif ki genyen pou kenbe tout may sèvis la nan tèt ou.
13. Mande limite pousantaj, reesye ak timeouts
TL;DR: Ou pa bezwen mete tout travay jesyon demann yo nan baz kod ou a ankò.
Tout bagay sa yo ta ka konsidere kòm ka itilizasyon separe, men mwen deside konbine yo paske nan yon karakteristik komen: yo pran sou travay yo jesyon lifecycle demann anjeneral okipe pa bibliyotèk aplikasyon yo. Si w ap devlope yon sèvè entènèt nan Ruby on Rails (pa entegre ak yon may sèvis) ki fè demann nan sèvis backend atravè , aplikasyon an ap oblije deside kisa pou l fè si N demann echwe. Ou pral gen tou pou chèche konnen ki kantite trafik sèvis sa yo yo pral kapab trete ak hardcode paramèt sa yo lè l sèvi avèk yon bibliyotèk espesyal. Anplis de sa, aplikasyon an ap gen pou deside ki lè li lè yo bay moute epi kite demann lan fizzle soti (ki baze sou tan). Epi yo nan lòd yo chanje nenpòt nan paramèt ki anwo yo, sèvè entènèt la pral oblije sispann, rkonfigire epi kòmanse ankò.
Dechaje travay sa yo nan yon may sèvis pa sèlman vle di ke devlopè sèvis yo pa pral oblije reflechi sou yo, men tou ke yo ka wè yo nan yon fason pi global. Si yo itilize yon chèn sèvis konplèks, di A -> B -> C -> D -> E, tout sik lavi demann lan dwe pran an konsiderasyon. Si travay la se pwolonje timeouts nan sèvis C, li lojik pou fè sa tout an konnye a, epi pa an pati: pa mete ajou kòd sèvis la epi tann jiskaske demann rale a aksepte epi sistèm CI a deplwaye sèvis ajou.
14. Telemetri
TL;DR: Kolekte tout enfòmasyon ki nesesè (epi yo pa byen) nan sèvis yo.
Telemetry se yon tèm jeneral ki gen ladan mezi, trase distribiye, ak mòso bwa. Sèvis may ofri mekanis pou kolekte ak trete tout twa kalite done yo. Sa a se kote bagay yo jwenn yon ti kras twoub paske kantite opsyon posib yo twò gwo. Pou kolekte mezi gen ak lòt zouti ki ka itilize pou kolekte mòso bwa , , elatriye (pa egzanp ClickHouse ak nou pou K8s - approx. trad.), pou distribiye trase gen ak sou sa. Chak may sèvis ka sipòte kèk zouti epi pa lòt moun. Li pral enteresan yo wè si pwojè a kapab bay kèk dirèksyon.
Nan ka sa a, avantaj ki genyen nan teknoloji may sèvis se ke veso sidecar ka, nan prensip, kolekte tout done ki anwo yo nan sèvis yo. Nan lòt mo, ou gen yon sèl sistèm koleksyon telemetry a jete ou, ak may sèvis la ka trete tout enfòmasyon sa yo nan divès fason. Pa egzanp:
- mòso bwa ke soti nan yon sèten sèvis nan CLI a;
- kontwole volim demann ki soti nan tablodbò sèvis may;
- kolekte tras distribiye epi voye yo nan yon sistèm tankou Jaeger.
Atansyon, jijman subjectif: Anjeneral pale, telemetri se yon zòn kote gwo entèferans nan may sèvis la se endezirab. Kolekte enfòmasyon debaz yo ak swiv sou vole kèk mezi an lò tankou to siksè demann ak latansi se bon, men ann espere ke nou pa wè pil Frankenstein parèt ki eseye ranplase sistèm espesyalize, kèk nan yo ki deja pwouve tèt yo ak byen etidye. .
15. Odit
TL;DR: Moun ki bliye leson listwa yo kondane pou yo repete yo.
Odit se atizay pou obsève evènman enpòtan nan yon sistèm. Nan ka yon may sèvis, sa ka vle di swiv ki moun ki te fè demann nan pwen final espesifik pou sèvis espesifik, oswa konbyen fwa kèk evènman ki gen rapò ak sekirite ki te fèt nan dènye mwa a.
Li klè ke odit se trè pre ki gen rapò ak telemetri. Diferans lan se ke telemetrie anjeneral ki asosye ak bagay tankou pwodiktivite ak entegrite teknik, pandan y ap odit ka gen rapò ak pwoblèm legal ak lòt ki ale pi lwen pase esfè a estrikteman teknik (pa egzanp, konfòmite ak GDPR - Règleman Jeneral Inyon Ewopeyen an sou pwoteksyon done).
16. Preview
TL; DR: Viv React.js - yon sous inĂŠpuizabl nan interfaces anpenpan.
Gen dwa gen yon pi bon tèm, men mwen pa konnen li. Mwen tou senpleman vle di yon reprezantasyon grafik nan yon may sèvis oswa kèk nan eleman li yo. Vizyalizasyon sa yo ka gen ladan endikatè tankou latansi mwayèn, enfòmasyon konfigirasyon sidecar, rezilta chèk sante, ak alèt.
Travay nan yon anviwònman sèvis oryante enplike yon chaj kognitif ki pi wo konpare ak Monwa li a. Se poutèt sa, presyon mantal yo ta dwe redwi nan tout pri. Yon senp koòdone grafik pou yon may sèvis ak kapasite nan klike sou yon bouton epi jwenn rezilta a vle ta ka desizif pou kwasans lan nan popilarite nan teknoloji sa a.
Yo pa te enkli nan lis la
Okòmansman mwen te gen entansyon mete kèk ka itilize plis nan lis la, men Lè sa a, deside pa fè sa. Men yo, ansanm ak rezon ki fè desizyon mwen an:
- Sant milti done. Dapre mwen, sa a se pa tèlman yon ka itilize kòm yon zòn etwat ak espesifik nan aplikasyon may sèvis oswa kèk seri fonksyon tankou dekouvèt sèvis.
- Antre ak sòti. Sa a se yon zòn ki gen rapò, men mwen limite tèt mwen (petèt atifisyèlman) nan ka itilize "trafik lès-wès". Antre ak sòti merite yon atik separe.
Konklizyon
Se tout pou kounye a! Yon fwa ankò, lis sa a trè abitrè ak gen plis chans enkonplè. Si ou panse mwen te rate yon bagay oswa yon bagay ki mal, tanpri kontakte m sou Twitter (). Tanpri respekte règ yo nan desans.
PS soti nan tradiktè
Illustrasyon tit pou atik la baze sou yon imaj ki soti nan atik la â"(pa Gregory MacKinnon). Li montre kouman kèk fonksyonalite ki soti nan aplikasyon yo (nan vèt) te deplase nan yon may sèvis ki bay entèkoneksyon ant yo (an ble).
Li tou sou blog nou an:
- ÂŤ";
- ÂŤ";
- ÂŤ'.
Sous: www.habr.com
