I nā mea maikaʻi ʻoi loa!
ʻO Nikita koʻu inoa, ʻo wau ke alakaʻi o ka hui ʻenehana Cian. ʻO kekahi o kaʻu mau kuleana ma ka hui ʻo ia ka hoʻemi ʻana i ka nui o nā hanana e pili ana i ka ʻoihana i ka hana ʻana i ka zero.
ʻO ka mea e kūkākūkā ʻia ma lalo nei i lawe mai iā mākou i ka ʻeha nui, a ʻo ke kumu o kēia ʻatikala e pale aku i nā poʻe ʻē aʻe mai ka hana hou ʻana i kā mākou mau hewa a i ʻole e hōʻemi i kā lākou hopena.
Hoʻomākaukau
I ka manawa i hala aku nei, i ka wā i loaʻa ai iā Cian nā monoliths, a ʻaʻohe ʻike o nā microservice i kēia manawa, ua ana mākou i ka loaʻa ʻana o kahi kumuwaiwai ma ka nānā ʻana i nā ʻaoʻao 3-5.
Pane lākou - maikaʻi nā mea a pau, inā ʻaʻole lākou e pane no ka manawa lōʻihi - makaʻala. ʻO ka lōʻihi o ko lākou haʻalele ʻana i ka hana no ka manaʻo ʻia he hanana i hoʻoholo ʻia e nā poʻe ma nā hālāwai. Ua komo mau kekahi pūʻulu ʻenekinia i ka hoʻokolokolo ʻana i ka hanana. I ka pau ʻana o ka hoʻokolokolo ʻana, ua kākau lākou i kahi postmortem - he ʻano hōʻike ma ka leka uila ma ke ʻano: he aha ka mea i hana ʻia, pehea ka lōʻihi o ka lōʻihi, ka mea a mākou i hana ai i kēia manawa, nā mea a mākou e hana ai i ka wā e hiki mai ana.
ʻO nā ʻaoʻao nui o ka pūnaewele a pehea mākou e hoʻomaopopo ai ua paʻi mākou i lalo
I mea e hoʻomaopopo ai i ka mea nui o ka hewa, ua ʻike mākou i nā ʻaoʻao pūnaewele koʻikoʻi no ka hana ʻoihana. Me ka hoʻohana ʻana iā lākou, helu mākou i ka helu o nā noi kūleʻa / kūleʻa ʻole a me nā manawa. Penei mākou e ana i ka uptime.
E ʻōlelo mākou ua ʻike mākou aia kekahi mau ʻāpana koʻikoʻi o ka pūnaewele i kuleana no ka lawelawe nui - ʻimi a hoʻouna i nā hoʻolaha. Inā ʻoi aku ka nui o nā noi i hāʻule ma mua o 1%, he hanana koʻikoʻi kēia. Inā i loko o 15 mau minuke i ka manawa mua, ʻoi aku ka nui o ka hewa ma mua o 0,1%, a laila manaʻo ʻia kēia he hanana koʻikoʻi. Hoʻopili kēia mau pae hoʻohālikelike i ka hapa nui o nā hanana; ʻo ke koena ma waho o ke kiko o kēia ʻatikala.
ʻO nā hanana maikaʻi loa ʻo Cyan
No laila, ua aʻo maoli mākou e hoʻoholo i ka ʻoiaʻiʻo i loaʻa kahi hanana.
I kēia manawa ua wehewehe ʻia nā hanana āpau a hōʻike ʻia i ka epic Jira. Ma ke ala: no kēia ua hoʻomaka mākou i kahi papahana kaʻawale, i kapa ʻia ʻo FAIL - hiki ke hana ʻia nā epics i loko.
Inā hōʻiliʻili ʻoe i nā hemahema āpau i nā makahiki i hala iho nei, ʻo nā alakaʻi:
- nā hanana pili mssql;
- nā hanana i hanaʻia e nā kumu o waho;
- nā kuhi hewa.
E nānā pono kākou i nā hewa o nā luna hoʻoponopono, a me kekahi mau hemahema hoihoi.
Wahi ʻelima - "E hoʻonohonoho i nā mea i ka DNS"
He Poalua ino ia. Ua hoʻoholo mākou e hoʻihoʻi i ke kauoha i ka pūʻulu DNS.
Makemake au e hoʻololi i nā kikowaena DNS kūloko mai ka hoʻopaʻa ʻana i ka powerdns, e hoʻokaʻawale i nā kikowaena kaʻawale loa no kēia, kahi ʻaʻohe mea ʻē aʻe DNS.
Ua hoʻonoho mākou i hoʻokahi kikowaena DNS ma kēlā me kēia wahi o kā mākou DC, a ua hiki mai ka manawa e hoʻoneʻe i nā ʻāpana mai ka hoʻopaʻa ʻana i ka powerdns a hoʻololi i ka ʻōnaehana i nā kikowaena hou.
Ma waena o ka neʻe ʻana, o nā kikowaena āpau i hōʻike ʻia i nā paʻa caching kūloko ma nā kikowaena āpau, hoʻokahi wale nō i koe, aia ma ka kikowaena data ma St. Ua haʻi mua ʻia kēia DC he mea koʻikoʻi ʻole no mākou, akā ua lilo koke i wahi hoʻokahi o ka hāʻule.
Iloko o keia manawa o ka nee ana i haule iho ai ke kahawai mawaena o Moscow a me St. Petersburg. Ua haʻalele maoli mākou me ka DNS ʻole no ʻelima mau minuke a ala hou i ka wā i hoʻoponopono ai ka mea hoʻokele i ka pilikia.
Nā hopena:
Inā ma mua ua haʻalele mākou i nā kumu o waho i ka wā hoʻomākaukau no ka hana, i kēia manawa ua hoʻokomo pū ʻia lākou i ka papa inoa o nā mea a mākou e hoʻomākaukau nei. A i kēia manawa ke hoʻoikaika nei mākou e hōʻoia i ka mālama ʻia ʻana o nā mea āpau i n-2, a i ka wā o ka hana hiki iā mākou ke hoʻohaʻahaʻa i kēia pae i n-1.
- I ka wā e hoʻolālā ai i kahi hoʻolālā hana, e kaha i nā wahi i hiki ʻole ai i ka lawelawe ke hāʻule, a noʻonoʻo i kahi hiʻohiʻona kahi i hele ai nā mea āpau "mai ka ʻino a i ka ʻino" ma mua.
- E hoʻokaʻawale i nā kikowaena DNS kūloko ma waena o nā geolocations / kikowaena data / racks / switch / inputs.
- Ma kēlā me kēia kikowaena, e hoʻokomo i kahi kikowaena DNS caching kūloko, e hoʻihoʻi hou i nā noi i nā kikowaena DNS nui, a inā ʻaʻole i loaʻa, e pane mai ia mai ka cache.
Wahi ʻehā - "E hoʻonohonoho i nā mea ma Nginx"
I kekahi lā maikaʻi, ua hoʻoholo kā mākou hui "ua lawa mākou i kēia," a hoʻomaka ke kaʻina hana o ka refactoring nginx configs. ʻO ka pahuhopu nui ka lawe ʻana i nā configs i kahi hoʻolālā intuitive. Ma mua, ua "hoʻokumuʻia nā mea a pau" aʻaʻole i lawe i kekahi loiloi. I kēia manawa ua hoʻoneʻe ʻia kēlā me kēia server_name i kahi faila o ka inoa hoʻokahi a ua māhele ʻia nā config a pau i loko o nā waihona. Ma ke ala, aia ka config i nā laina 253949 a i ʻole 7836520 mau huaʻōlelo a lawe i kahi kokoke i 7 megabytes. ʻO ka pae kiʻekiʻe o ka hale:
Hoʻolālā Nginx
├── access
│ ├── allow.list
...
│ └── whitelist.conf
├── geobase
│ ├── exclude.conf
...
│ └── geo_ip_to_region_id.conf
├── geodb
│ ├── GeoIP.dat
│ ├── GeoIP2-Country.mmdb
│ └── GeoLiteCity.dat
├── inc
│ ├── error.inc
...
│ └── proxy.inc
├── lists.d
│ ├── bot.conf
...
│ ├── dynamic
│ └── geo.conf
├── lua
│ ├── cookie.lua
│ ├── log
│ │ └── log.lua
│ ├── logics
│ │ ├── include.lua
│ │ ├── ...
│ │ └── utils.lua
│ └── prom
│ ├── stats.lua
│ └── stats_prometheus.lua
├── map.d
│ ├── access.conf
│ ├── ..
│ └── zones.conf
├── nginx.conf
├── robots.txt
├── server.d
│ ├── cian.ru
│ │ ├── cian.ru.conf
│ │ ├── ...
│ │ └── my.cian.ru.conf
├── service.d
│ ├── ...
│ └── status.conf
└── upstream.d
├── cian-mcs.conf
├── ...
└── wafserver.conf
Ua ʻoi aku ka maikaʻi, akā i ke kaʻina o ka hoʻololi ʻana a me ka hāʻawi ʻana i nā config, ua hewa kekahi o lākou a ʻaʻole i hoʻokomo ʻia i loko o ke kuhikuhi *.conf. ʻO ka hopena, ua loaʻa ʻole kekahi mau mea hoʻokipa a hoʻihoʻi iā 301 i ka ʻaoʻao nui. Ma muli o ka helu o ka pane pane ʻaʻole 5xx / 4xx, ʻaʻole i ʻike koke ʻia kēia, akā i ke kakahiaka wale nō. Ma hope o kēlā, hoʻomaka mākou e kākau i nā hoʻokolohua e nānā i nā ʻāpana hana.
Nā hopena:
- E hoʻonohonoho pono i kāu configs (ʻaʻole wale nginx) a noʻonoʻo i ka hoʻolālā i ka wā mua o ka papahana. Ma kēia ala e hiki ai iā ʻoe ke hoʻomaopopo iā lākou i ka hui, ʻo ia ka mea e hōʻemi ai i ka TTM.
- E kākau i nā ho'āʻo no kekahi mau ʻāpana hana. No ka laʻana: ka nānā ʻana e hāʻawi nā server_names kī i ke kūlana kūpono + kino pane. E lawa ka loaʻa ʻana o nā palapala liʻiliʻi ma ka lima e nānā i nā hana maʻamau o ka ʻāpana, i ʻole e hoʻomanaʻo nui i ka 3 a.m. i nā mea ʻē aʻe e pono ke nānā ʻia.
ʻO ke kolu o ka wahi - "Holo koke i waho o kahi ākea ma Cassandra"
Ua ulu mau ka ʻikepili, a ua maikaʻi nā mea a pau a hiki i ka manawa i hoʻomaka ai ka hoʻoponopono ʻana i nā casespaces nui i loko o ka hui Cassandra, no ka mea ʻaʻole hiki i ka compaction ke hana ma luna o lākou.
I kekahi lā ʻino, ua aneane lilo ka puʻupuʻu i ʻukena, ʻo ia hoʻi:
- aia ma kahi o 20% o ka huina ākea i koe i loko o ka hui;
- ʻAʻole hiki ke hoʻohui piha i nā nodes, no ka mea, ʻaʻole hele ka hoʻomaʻemaʻe ma hope o ka hoʻohui ʻana i kahi node ma muli o ka nele o nā wahi ma nā ʻāpana;
- e hāʻule mālie ana ka huahana no ka mea ʻaʻole hana ka compaction;
- Aia ka pūʻulu ma ke ʻano pilikia.
Haʻalele - ua hoʻohui mākou i 5 mau node me ka hoʻomaʻemaʻe ʻole, a laila hoʻomaka mākou e hoʻokaʻawale iā lākou mai ka pūpū a hoʻokomo hou iā lākou, e like me nā nodes ʻole i pau i waho. ʻOi aku ka nui o ka manawa ma mua o kā mākou makemake. Loaʻa ka pilikia o ka loaʻa ʻole ʻana o ka hui.
Nā hopena:
- Ma nā kikowaena cassandra a pau, ʻaʻole pono e ʻoi aku ma mua o 60% o ka hakahaka ma kēlā me kēia pā.
- Pono lākou e hoʻouka ʻia ma mua o 50% cpu.
- ʻAʻole pono ʻoe e poina e pili ana i ka hoʻolālā ʻana a pono e noʻonoʻo pono i kēlā me kēia ʻāpana, e pili ana i kāna kikoʻī.
- ʻOi aku ka nui o nā nodes i ka pūʻulu, ʻoi aku ka maikaʻi. ʻO nā kikowaena i loaʻa i kahi helu liʻiliʻi o ka ʻikepili ua hoʻonui wikiwiki ʻia, a ʻoi aku ka maʻalahi o ka hoʻōla hou ʻana o ia pūʻulu.
Wahi ʻelua - "Ua nalowale ka ʻikepili mai ka waihona waiwai kī consul"
No ka ʻike lawelawe, mākou, e like me nā mea he nui, hoʻohana i ka consul. Akā hoʻohana pū mākou i kāna kī-waiwai no ka hoʻolālā uliuli-'ōmaʻomaʻo o ka monolith. Mālama ʻo ia i ka ʻike e pili ana i nā kahawai ikaika a me ka hana ʻole, e hoʻololi i nā wahi i ka wā o ka hoʻolaha ʻana. No kēia kumu, ua kākau ʻia kahi lawelawe hoʻolaha e pili ana me KV. I kekahi manawa, nalowale ka ʻikepili mai KV. Hoʻihoʻi ʻia mai ka hoʻomanaʻo ʻana, akā me ka nui o nā hewa. ʻO ka hopena, i ka wā o ka hoʻouka ʻana, ua māhele like ʻole ʻia ka ukana ma luna o nā kahawai, a ua loaʻa iā mākou nā hewa he 502 ma muli o ka hoʻonui ʻia ʻana o nā backends ma ka CPU. ʻO ka hopena, ua neʻe mākou mai ka consul KV a i nā postgres, mai kahi i maʻalahi ʻole e wehe iā lākou.
Nā hopena:
- ʻAʻole pono nā lawelawe me ka ʻae ʻole i ka ʻikepili koʻikoʻi i ka hana o ka pūnaewele. No ka laʻana, inā ʻaʻole ʻae ʻia ʻoe ma ES, ʻoi aku ka maikaʻi o ka hōʻole ʻana i ke komo ʻana ma ka pae pūnaewele mai nā wahi āpau ʻaʻole pono, waiho wale i nā mea pono, a hoʻonohonoho pū i ka action.destructive_requires_name: ʻoiaʻiʻo.
- E hoʻomaʻamaʻa i kāu ʻōnaehana hoʻihoʻi a me ka hoʻihoʻi ma mua. No ka laʻana, e hana i kahi palapala ma mua (no ka laʻana, i ka python) hiki ke hoʻihoʻi a hoʻihoʻi.
Kahi mua - "Kapena Unobvious"
I kekahi manawa, ua ʻike mākou i ka hāʻawi ʻole ʻana o ka ukana ma luna o ka nginx i nā hihia i loaʻa nā kikowaena 10+ ma ke kua. Ma muli o ka hoʻouna ʻana o round-robin i nā noi mai ka 1st a i ka hope i luna ma ke ʻano, a ua hoʻomaka kēlā me kēia nginx reload, ua loaʻa mau nā noi mua i luna ma mua o nā mea ʻē aʻe. Ua ʻike nui ʻia kēia i ka piʻi ʻana o ke kaʻa. ʻAʻole i hana ka hōʻano hou ʻana i ka nginx e hiki ai i ka random - pono mākou e hana hou i kahi pūʻulu lua code ʻaʻole i lawe ʻia ma ka mana 1.15 (i kēlā manawa). Pono mākou e hoʻopili i kā mākou nginx 1.14.2, e hoʻokomo i ke kākoʻo maʻamau i loko. Ua hoʻoponopono kēia i ka pilikia. Loaʻa kēia pahu i ka māhele "Kapena Non-Obviousness".
Nā hopena:
He mea hoihoi a hoihoi loa i ka ʻimi ʻana i kēia bug).
- E hoʻonohonoho i kāu nānā ʻana i kōkua iā ʻoe e ʻike koke i kēlā mau loli. No ka laʻana, hiki iā ʻoe ke hoʻohana i ka ELK e nānā i nā rps ma kēlā me kēia backend o kēlā me kēia upstream, e nānā i kā lākou manawa pane mai ka ʻike o ka nginx. I kēia hihia, ua kōkua kēia iā mākou e ʻike i ka pilikia.
ʻO ka hopena, ua hiki ke pale ʻia ka hapa nui o nā hemahema me kahi ʻoi aku ka nānā ʻana i kāu mea e hana nei. Pono kākou e hoʻomanaʻo mau i ke kānāwai a Murphy: ʻO kēlā me kēia mea hiki ke hele hewa e hele hewa, a kūkulu i nā ʻāpana ma muli o ia.
Source: www.habr.com