Një herë unë shkatërrova DB-në time të prodhimit me një UPDATE të fjetur dhe nuk kisha backups të freskëta. Humbur ~30% të të ardhurave, një grumbull nervash dhe shumë orë. Table of content Në lidhje me projektin Open-Source PostgreSQL Backup Historia se si kam thyer DB-në dhe nuk mund të shërohem plotësisht Si fillova të ndërtoja projektin Rruga dhe planet e ardhshme Rregullat e sigurisë DB që tani i zbatoj në çdo projekt Përmbytje Në lidhje me projektin Open Source PostgreSQL Backup Unë kam hapur burim mjetin tim për monitorimin dhe mbështetjen e PostgreSQL. Unë kam qenë duke ndërtuar dhe duke përdorur atë për pak më shumë se dy vjet. fillimisht, unë kam zhvilluar atë për punën time të ditës dhe disa projekte për kafshët shtëpiake. Vetëm kohët e fundit më goditi se projekti në fakt duket mjaft i mirë për të treguar publikisht, tashmë ndihmon miqtë e mi dhe mund të jetë i dobishëm për komunitetin. Go, gin, gorm, React, TypeScript, PostgreSQL – gjithçka u mbështjell në Docker. Versioni i parë ishte në Java, por unë e rishkrova atë në Go me kalimin e kohës. Stack: Në thelb, është një UI wrapper rreth standardit në formatin e përshtatur, me një grumbull shtesa që e bëjnë UX më pak të dhimbshme dhe shtojnë integrime me shërbimet e jashtme të ruajtjes dhe njoftimit. pg_dump What it can do: Planifikoni rezervimet (p.sh., çdo ditë në orën 4 të mëngjesit ose çdo të dielë në mesnatë) për PostgreSQL 13–17. Ruani rezervimet e ngjeshura në vend në server, në S3 ose në Google Drive (serverët NS dhe FTP janë në hartën e rrugës). Dërgoni një mesazh pas çdo backup që gjithçka është në rregull ... ose jo. Ping ju në Discord, email, Telegram dhe Slack në qoftë se DB ndalon përgjigjen. Ajo paralajmëron vetëm pas n kontrolleve të dështuara (për të shmangur pozitivet e rreme për shkak të problemeve të rrjetit) dhe tregon një grafik disponueshmërie. Natyrisht, projekti është i lirë, me burim të hapur (MIT), vetë-hosted dhe vjen me një UI humane web. Faqja e projektit: https://postgresus.com/ https://postgresus.com/ Në Github: https://github.com/RostislavDugin/postgresus https://github.com/RostislavDugin/postgresus P.S. Nëse projekti duket i dobishëm dhe ju keni një llogari GitHub, Yjet e parë janë me të vërtetë më të vështira për t'u marrë. I’d really appreciate a Historia se si kam thyer DB-në dhe nuk mund të shërohem plotësisht Në vitin 2023 kam pasur një projekt kafshësh që ishte një mbështjellës i ChatGPT (3.5). Në thelb, ajo ishte vetëm rishitja e qasjes API me një UI të bukur dhe shkurtime. Projekti u rrit, pastaj filloi të bjerë poshtë dhe më në fund e shita atë. në një server tjetër. PgBackRest Në momentin kur projekti ishte duke sjellë rreth $ 1,500 pasivisht dhe duke goditur kulmin e të ardhurave, diçka e keqe ndodhi: . I broke the data in the DB Ishte një natë e premte. isha i lodhur, isha menjëherë duke kaluar nga kodimi në mesazhet duke iu përgjigjur, krejtësisht i papërqendruar. një klient më kërkoi të ndryshoja emailin për llogarinë e tij. Përmes SSH dhe Unë hyra në VPS të prodhimit dhe shkruaja diçka si: psql UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'; Pastaj u shqetësova për të kopjuar emailin e saktë nga biseda dhe... shtypni Enter në “autopilot”. . AFFECTED ROWS: 10 000 Kjo ishte e vetmja herë në shumë, shumë vite që ndjeva një djersë të ftohtë në shpinë. Natyrisht, unë e dija se duhet të kisha bërë një Së pari, mund të vendosni një Por si në çdo histori horror, rregullat themelore të sigurisë u injoruan, dhe gjithçka u shndërrua në katastrofë. Disclaimers SELECT SAVEPOINT Të gjitha emailet e përdoruesve u mbivlerësuan.Dhe këtu është detaji kryesor: sistemet e pagesave kanë rregulla të rrepta – nëse një përdorues nuk mund të hyjë në një shërbim të paguar, kjo është një shkelje e madhe. Unë vrapova për backups - dhe djersitja e ftohtë u bë edhe më e keqe. backup më i fundit ishte rreth një muaj i vjetër 😐. Asnjë mënyrë për të rivendosur nga kjo. Që nga ajo kohë pagesa të reja erdhën, abonimet u anulluan (që do të thotë se unë nuk mund të rivendosni të gjithë - disa njerëz tashmë kishin ikur), etj. Në një farë mënyre, gjatë pjesës tjetër të natës dhe mëngjesit, arrita të rindërtoj rreth 65% të DB nëpërmjet skripteve duke përdorur ID-të e përdoruesit. Mësimi është mësuar. Si fillova të ndërtoja projektin Koha e vendimit: Unë jam duke shkuar për të ndërtuar veten një mjet backup që do të ping mua çdo ditë se çdo gjë është në rregull! Dhe të rivendosur në disa klikime! Dhe blackjack dhe microservices! Kam bërë versionin e parë të Postgresus në rreth një muaj në Java. Fillova ta përdor atë. Le disa miq ta provojnë atë. Doli: është e dobishme. disa herë ato backups më shpëtuan (dhe jo vetëm mua). Emri "Postgresus" u shfaq vetëm dy muaj më parë, para se repo të quhej thjesht . “pg-web-backup” në dispozicion Për momentin, Postgresus zgjidh këto probleme për mua: Është mjeti kryesor i backup nëse projekti është i vogël ose jeton në një VPS në vend të një shërbimi cloud DB. Është mjeti i backup fallback në qoftë se projekti është i madh dhe jeton në një DBaaS me backups e tij të re.Ajo mbështet "vetëm në rast" (nëse re vdes, bllokohet, DB është fshirë aksidentalisht së bashku me backups cloud për shkak të mos-pagimit, etj.).Është gjithmonë më mirë të kesh një backup të dyfishtë sesa të përfundosh në atë fatkeqësi 0.01% kur edhe re zhduket dhe nuk ka Plan B. Roadmap & planet e ardhshme unë jam duke planifikuar për të shtyrë projektin në këto drejtime: Add more PostgreSQL-specific load monitoring (pg_stat_activity, pg_stat_system, pg_locks) with a friendly UI. Think of it as an alternative to postgres_exporter + Grafana, but bundled out of the box with backups. Observe and alert on slowdown of key queries. In my work project, there are tables and specific functions that are too early to optimize (if the hypothesis fails, we might drop them), but they could grow and slow down. For example, if INSERT INTO users (...) VALUES (...) starts taking more than 100 ms while the flow of new users is growing - we'll get a notification and go optimize. Collect query stats by CPU time and execution frequency to see where resources are actually going and what’s worth improving. Add more channels for notifications and more storage providers. Rregullat e sigurisë DB që tani i zbatoj në çdo projekt Më lejoni t’ju kujtoj dy pjesë të mençurisë popullore: Administratorët e sistemit bien në dy kategori: ata që nuk bëjnë backups akoma dhe ata që tashmë e bëjnë. Administratorët e sistemit bien në dy kategori: ata që nuk bëjnë backups akoma dhe ata që tashmë e bëjnë. Mos bëni vetëm backups – rregullisht të testuar se ju mund të vërtetë të rivendosur nga ata. Mos bëni vetëm backups – rregullisht të testuar se ju mund të vërtetë të rivendosur nga ata. Që nga rrënimi i DB-së së projektit tim, kam miratuar këto rregulla pa përjashtim: Para çdo UPDATE, gjithmonë ekzekutoni një SELECT dhe sigurohuni që po prekni saktësisht 1-2 rreshta. Nëse ndryshimi është i madh, vendosni një SAVEPOINT manualisht. Kryeni “alarme zjarri” me rivendosje të paktën një herë në 3 muaj: rivendosni nga një kopje cloud dhe nga një lokal. Në dy vitet e fundit ka pasur disa raste ku kemi nevojë për të rivendosur nga backups – çdo herë që funksionoi, si në re dhe përmes Postgresus. Përmbytje Unë shpresoj se ky projekt do të jetë i dobishëm për një grup të gjerë të zhvilluesve, DBA-ve dhe njerëzve të DevOps. Unë planifikoj të vazhdoj ta zhvilloj atë për ta bërë atë edhe më të dobishme në skenarët e botës reale.