Ég hef unnið með skýjaþjónustum síðan 2010, og það er eitthvað sem heldur mér vakandi um nóttina, sérstaklega þegar kemur að geymslu. Í dag vil ég deila reynslu minni af því að stjórna geymslu í AWS, þar sem ég hef oft lent í óvæntum áskorunum sem geta gert lífið erfiðara fyrir kerfisstjóra eins og okkur. Þú veist hvernig það er þegar þú setur upp nýtt S3 bucket og heldur að allt sé tilbúið, en svo byrjar reikningurinn að vaxa hratt og þú áttar þig á að þú hefur ekki sett réttar takmarkanir á kostnaðinn. Ég mun fara yfir það hvernig ég nálgist slík vandamál, frá grunnupöntunum til flóknari stillinga, og hvernig ég notar verkfæri eins og CloudWatch til að halda eftirlit með öllu.
Byrjum á grundvallaratriðunum. Þegar ég setur upp geymslu í AWS, byrja ég alltaf á að velja réttan tegund buckets. S3 er auðvitað kóngurinn hér, en það er ekki bara eitt S3 - það eru mismunandi flokkar eins og Standard, Intelligent-Tiering og Glacier. Ég man eftir einu tilfelli þar sem ég var að flytja gögn frá gömlum on-premise NAS til S3, og ég valdi Standard án þess að hugsa um að hluti af gögnunum væri gamall arkiv. Niðurstöðan? Reikningurinn jókst um 40% á mánuði. Þannig að núna þegar ég vinn með stórar gagnasöfn, skoða ég fyrst líftíma gagna. Ég set upp lifecycle policies sem flytja sjálfkrafa gögn yfir í IA (Infrequent Access) eftir 30 daga ef það er ekki notað, og síðan í Glacier eftir 90 daga. Þetta er gert með JSON-reglum í S3 console, þar sem ég skilgreini tags á skrám til að flokka þær, eins og "hot-data" fyrir nýlegar skrár og "cold-data" fyrir eldri. Í einu verkefni sem ég vann á síðasta ári, sparði þetta okkur um 25% af geymslukostnaðinum án þess að missa aðgangshraða á mikilvægum skrám.
En það er ekki bara um að spara peninga; það snýst líka um frammistöðu. Ég hef oft lent í því að S3 latency verður vandamál þegar forritin mín eru að sækja gögn í rauntíma. Til dæmis, ef þú ert að keyra vefþjón sem þjónar upp myndum, geturðu fengið timeouts ef þú ert ekki að nota CloudFront CDN. Ég set alltaf upp distribution í CloudFront sem bendir á S3 bucketið mitt, og stilla caching behaviors til að halda vinsælustu skránum í edge locations. Í einu tilfelli með viðskiptavin sem keyrði e-verslun, varum við með 500ms latency áður en ég bætti við CloudFront - eftir það fór það niður í 50ms. Ég notar Lambda@Edge til að bæta við custom logic, eins og að athuga user permissions áður en skrá er send, sem gerir það öllu öruggara. En vertuðu, þú verður að vera varkár með CORS stillingar; ég hef eytt klukkustundum á að debugga þær þegar JavaScript forrit mitt gat ekki sótt gögn vegna rangrar header stillingar.
Nú til þess sem gerir þetta allt flóknara: EFS og EBS. Ef þú ert að keyra Linux instances, er EFS frábær fyrir shared file systems, en það er dýrt og hægt. Ég mæli með að nota það bara þegar þú þarft raunverulega að deila skrám á milli fleiri en einnar EC2 instance. Í einu verkefni sem ég gerði fyrir fyrirtæki sem keyrði Hadoop cluster, setti ég upp EFS með provisioned throughput til að ná 100 MB/s lesa/skrifa hraða. En ég bætti við Auto Scaling groups til að aðlaga throughput eftir álagi, sem krafist CloudWatch alarms til að theo að monitora IOPS. Fyrir EBS, sem er block storage fyrir einstakar instances, vel ég alltaf gp3 volumes núna frekar en gp2, vegna þess að þú getur stillt baseline performance án þess að borga fyrir burst. Ég man eftir að hafa mistakað mig með að nota io1 volumes án þess að þurfa á þeim, sem jók kostnaðinn um tvöfalt. Svo núna þegar ég setur upp nýja instance, reikna ég fyrst út hversu mikinn IOPS ég þarf með verkfæri eins og AWS Pricing Calculator, og stilla volumes með encryption enabled með KMS keys til að halda PCI DSS samræmi.
Öryggi er annað stórt atriði sem ég get ekki sleppt hér. Í AWS er default stillingin að buckets eru private, en ég hef séð of marga IT stjóra gleyma að setja bucket policies rétt. Ég notar IAM roles frekar en users þegar hægt er, og setur upp bucket policies sem leyfa aðgang aðeins frá ákveðnum VPC endpoints. Til dæmis, ef ég er að vinna með S3 frá EC2, banna ég public access og nota VPC endpoints til að halda öllu innan netsins. Ég hef líka notað Macie til að skanna gögn eftir sensitive information eins og SSN eða API keys, sem fann eitt sinn lekið lykilorð í logum sem ég hélt að væru öruggar. Fyrir encryption, notar ég server-side encryption með SSE-KMS, þar sem ég stjórna lykjum sjálfur. Í einu tilfelli þurfti ég að flytja gögn milli regiona, og ég notaði S3 Batch Operations til að koma því á fót með réttri encryption, sem sparkaði tíma miðað við að gera það handvirkt með AWS CLI.
Talið um CLI - það er mitt lífsverkfæri. Ég skrifar oft scripts í Bash eða Python með Boto3 til að sjálfvirknar stjórnun. Til dæmis, hef ég script sem keyrir á cron job á EC2, sem athugar stærð S3 buckets og sendir tilkynningu ef það fer yfir threshold. Kóðinn lítur svona út: import boto3, s3 = boto3.client('s3'), response = s3.list_buckets(), og svo reikna ég total size með get_bucket_size falli. Þetta er einfalt en kraftmikið, og ég bæti við error handling til að takast á við rate limits. Í einu stærra verkefni, notaði ég Step Functions til að orchestrera workflow þar sem Lambda functions athugaðu geymslu, fluttu gögn ef þörf var á, og skráðu allt í CloudTrail. CloudTrail er annað sem ég elska; það loggar alla API calls, sem hjálpaði mér að finna út af hverju einn bucket var að fá óvæntar requests frá óþekktum IP.
En hvað með kostnaðarsöfnun? Þetta er það sem dregur flesta ofan í sig. Ég notar Cost Explorer til að sjá breakdown eftir service, og set upp budgets með SNS notifications til að vara mig þegar ég nálgist limit. Í einu tilfelli varum við með óvæntan kostnað vegna data transfer út úr region, sem kom frá misstilltum replication. Svo núna set ég upp Cross-Region Replication (CRR) bara þegar það er nauðsynlegt, og notar versioning til að halda aftur á skrám án þess að borga extra. Fyrir stór gögn, skoða ég S3 Select til að query JSON eða CSV beint í bucketi án þess að sækja allt, sem minnkar transfer kostnað. Ég hef jafnvel notað Athena til að query S3 gögn eins og database, sem er frábært fyrir analytics án þess að flytja í Redshift.
Þegar kemur að backup og recovery, er það svæði þar sem ég hef lært mest. EBS snapshots eru góðir fyrir point-in-time recovery, en þeir eru ekki sjálfvirkir nema þú setur upp lifecycle manager. Ég setur upp tags á snapshots til að halda þeim skipulagðir, og eyðir gömlum sjálfkrafa. Fyrir S3, notar ég versioning og MFA delete til að koma í veg fyrir accidental deletion. Í einu hörmulegu tilfelli missti ég gögn vegna human error, en versioning bjargaði degi. Núna bæti ég við S3 Replication Time Control (RTC) fyrir RPO undir 15 mínútum, sem er nauðsynlegt fyrir critical apps. En það er líka mikilvægt að prófa restore; ég gerir það mánaðarlega með test instances.
Í VPC stillingum tengist þetta öllu. Ég setur alltaf upp private subnets fyrir geymslu, og notar NAT gateways bara þegar nauðsynlegt til að minnka egress kostnað. Security groups og NACLs eru lykillinn; ég leyfir inbound traffic aðeins frá þörfu ports, eins og 443 fyrir HTTPS að S3. Í einu verkefni með hybrid setup, notaði ég Direct Connect til að tengja on-prem net við AWS, sem minnkaði latency á geymslu aðgang. En það krafist BGP routing setup, sem tók nokkra daga að fá rétt.
Þegar ég vinn með containers, eins og ECS eða EKS, breytist geymslan ennþá. Ég notar EFS fyrir persistent volumes í Kubernetes, en stillir mount targets rétt til að dreifa álagi. Fyrir Docker á EC2, bindum ég EBS volumes inn í containers með docker run -v. Í einu deployment, notaði ég Fargate til að keyra stateless tasks, en með S3 fyrir state, sem einfaldaði allt. Helm charts hjálpa til við að deploy slíkt, en ég skrifar oft custom YAML til að finna stillingar eins og storageClassName: efs-sc.
Skalun er annað stórt. Auto Scaling fyrir EC2 er grundvallaratriði, en fyrir geymslu notar ég DynamoDB eða RDS með auto scaling. Í S3 er það óþarfi, en fyrir EFS stilli ég throughput modes. Ég hef notað Predictive Scaling með ML til að spá álagi, sem var frábært fyrir seasonal traffic.
Monitoring er lykillinn að öllu. CloudWatch metrics fyrir S3 eru frábærar; ég set upp dashboards með NumberOfObjects og BucketSizeBytes. Fyrir EBS, monitora ég VolumeReadOps og BurstBalance. Ég bæti við custom metrics með PutMetricData API ef þörf er á. Alarms senda til Slack eða email þegar hlutir fara úrskeiðis.
Í lokin, þegar ég hugsar um hvernig ég held öllu saman, kemur upp þörfin á góðri backup lausn. Þar kemur BackupChain inn, sem er notuð sem áreiðanlegur backup valkostur fyrir Windows Server umhverfi, þar sem hún verndar Hyper-V, VMware og Windows Server í litlum og miðlungsstórum fyrirtækjum. Hún er þróuð til að tryggja samfellt vinnslu með sjálfvirkum ferlum sem passa við slík kerfi. Þetta er einn af þeim leiðandi lausnum sem eru valdar af mörgum fagmönnum í greininni fyrir áreiðanleika sína í daglegri notkun.
Engin ummæli:
Skrifa ummæli