ប្រតិបត្តិការ IT — ភាពអាចទុកចិត្តបាននៃគេហទំព័រ គំរូផ្ទាល់

អ្នកត្រៀមលក្ខណៈសម្រាប់សេវាវេប៖ load balancer នៅមុខចម្រៀក instance, cache នៅមុខមូលដ្ឋានទិន្នន័យ និងគោលដៅភាពអាចរកបាន 99.9 %។ រាល់នាទី ម៉ូដែលគណនាការពន្យាពេលជួរ timeout cache hit និងបន្ទុកមូលដ្ឋានទិន្នន័យពីរូបមន្តសៀវភៅសិក្សា — និងអ្វីដែលការសម្រេចចិត្តរបស់អ្នកចំណាយ។

អ្វីដែលអ្នកនឹងរៀន

កម្មវិធីក្លែងធ្វើ

ពេលវេលា 0 នាទី
សំណើ 1125 · អត្រាកំហុស 0.00% · ភាពយឺត p99 342 ms · instance កំពុងបម្រើ 10 (+0) · អត្រា cache hit 77% · ការប្រើប្រាស់មូលដ្ឋានទិន្នន័យ 19% · ថវិកាកំហុសដែលនៅសល់ (30 ថ្ងៃ) 50.0%⇉1125 សំណើ/វិ▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msការប្រើប្រាស់ចម្រៀក 52%អត្រា cache hit 77%ការប្រើប្រាស់មូលដ្ឋានទិន្នន័យ 19%⚠ 0.00% · 🔥 0.0×50%$ 4.00/h · Σ $0.00
  • instance កំពុងបម្រើ
  • instance កំពុងចាប់ផ្ដើម
  • instance លើ build អាក្រក់
  • កន្លែងទំនេរ
  • សំណើចូល

ការគ្រប់គ្រង

ជាន់ក្រោមសម្រាប់ចម្រៀក។ ការលើកវាចាប់ផ្ដើម instance ភ្លាមៗ — ពួកគេនៅតែត្រូវការការពន្យាពេលចាប់ផ្ដើមមុនបម្រើ។

ការតាមដានគោលដៅលើការប្រើប្រាស់។ គ្មានការពង្រីកថ្មីពេល instance នៅកំពុងចាប់ផ្ដើម។ បិទ = អប្បបរមាពិតប្រាកដ។

ទាបជាង = ទំហំបម្រុងច្រើនជាង និងថ្លៃជាង។ ការប្រើប្រាស់ដែលវាស់មិនអាចលើស 100 % ដូច្នេះចម្រៀកឆ្អែតលូតលាស់តែម្ដងមួយជំហាន។

TTL វែងជាង = hit ច្រើនជាង ប៉ុន្តែចម្លើយអាចចាស់ជាង (អាយុមធ្យម ≈ TTL/2)។

ផ្ទុកគ្រាប់ចុចក្ដៅ 6 នាទី (+12 % នៃ cache ក្នុងមួយនាទី) ក្នុងតម្លៃសំណួរមូលដ្ឋានទិន្នន័យបន្ថែម 600/s។

ចំណែកនៃ 30 % អាទិភាពទាប (prefetch batch crawler) ដែលបដិសេធនៅ load balancer ជាមួយ «សាកល្បងម្ដងទៀតពេលក្រោយ»។

លក្ខណៈពិសេសធ្ងន់បន្ថែម CPU 20 ms និងសំណួរមូលដ្ឋានទិន្នន័យមួយក្នុងមួយសំណើ។ បិទ = ការថយចុះដោយទន់ភ្លន់។

ដាក់ពង្រាយឡើងវិញនូវ build ល្អចុងក្រោយនៅលើក្រុមម៉ាស៊ីនថ្មី (5 នាទី គិតថ្លៃពីរដង) បន្ទាប់មកប្ដូរចរាចរណ៍។ ការចុចម្ដងទៀតចាប់ផ្ដើមការរៀបចំឡើងវិញ។ បើគ្មាន build អាក្រក់កំពុងដំណើរការ វាខាតតែលុយប៉ុណ្ណោះ។

សូចនាករ

អត្រាកំហុស
0.00%
ធម្មតា
ភាពយឺត p99
342ms
ធម្មតា
ថវិកាកំហុសដែលនៅសល់ (30 ថ្ងៃ)
50.0%
ធម្មតា
ការប្រើប្រាស់ចម្រៀក
52%
ធម្មតា
អត្រាដុត (1 ម៉ោង)0.0 ×
សំណើ1125 req/s
instance កំពុងបម្រើ10
instance កំពុងចាប់ផ្ដើម0
អត្រា cache hit77 %
ការប្រើប្រាស់មូលដ្ឋានទិន្នន័យ19 %
ចរាចរណ៍ដែលបានកាត់បន្ថយ0 %
ថ្លៃចម្រៀក4.00 $/h
ថ្លៃរហូតមកដល់ពេលនេះ0.00 $
អាយុមធ្យមនៃចម្លើយក្នុង cache30 s
ចរាចរណ៍លើ build អាក្រក់0 %
ការណែនាំអាចរកបាន100 %

និន្នាការ

អត្រាកំហុស: — %20.000.00

សេណារីយ៉ូវិបត្តិ

កម្រិត 1 · ការចេញផ្សាយអាក្រក់

build ថ្មីចេញនៅ 09:10។ ខែនេះលំបាករួចហើយ៖ នៅសល់តែ 20 % នៃថវិកាកំហុស។ ប៉ុន្មាននាទីក្រោយការ deploy ការជូនដំណឹងអត្រាដុតបន្លឺ។ ការពារថវិកា។

  • ថវិកាកំហុសនៅសល់នៅចុង ≥ 18.5 %
  • អត្រាកំហុសជាមធ្យមក្រោយ deploy ≤ 0.65 %
  • ថ្លៃចម្រៀក ≤ $9.50

កម្រិត 2 · ហ្វូងមនុស្សភ្លាមៗ

តំណភ្ជាប់ទៅសេវាកំពុងរីករាលដាលលឿន ហើយការកើនឡើងនៃចរាចរណ៍ត្រូវបានរំពឹងទុកនៅពេលណាមួយព្រឹកនេះ — គ្មានអ្នកណាដឹងថាពេលណា ឬធំប៉ុនណាទេ។ ថ្ងៃនេះ instance ថ្មីត្រូវការ 8 នាទីដើម្បីចាប់ផ្តើម។ នៅពេលវាមកដល់ រក្សាកំហុស និងភាពយឺតឱ្យទាប ដោយមិនដុតលុយលើសមត្ថភាពទំនេរ។

  • អត្រាកំហុសជាមធ្យម ≤ 0.2 %
  • ភាពយឺត p99 ជាមធ្យម ≤ 400 ms
  • ចរាចរណ៍កាត់បន្ថយជាមធ្យម ≤ 5 %
  • ថ្លៃសរុប ≤ $21
  • ការណែនាំអាចរកបាន ≥ 85 % នៃពេល

កម្រិត 3 · cache ត្រជាក់

នៅកំពូលថ្ងៃត្រង់ ស្គ្រីបថែទាំលុប cache ទាំងមូល។ ឥឡូវសំណើទាំងអស់ទៅមូលដ្ឋានទិន្នន័យ ដែលត្រូវបានកំណត់ទំហំសម្រាប់អត្រា hit 85 % ធម្មតា។ ស្ដារសេវាមកវិញដោយមិនផ្ទុកលើសមូលដ្ឋានទិន្នន័យ។

  • អត្រាកំហុសជាមធ្យម ≤ 1.5 %
  • ការប្រើប្រាស់មូលដ្ឋានទិន្នន័យមិនដែលលើ 90 % ក្រោយនាទីដំបូង
  • អាយុមធ្យមនៃចម្លើយក្នុង cache ≤ 90 s ជាមធ្យម
  • ថ្លៃសរុប ≤ $9
  • ការណែនាំអាចរកបាន ≥ 80 % នៃពេល
  • ចរាចរណ៍កាត់បន្ថយជាមធ្យម ≤ 5 %

មូលដ្ឋាន — គំរូនៅពីក្រោយលេខ

គ្រប់ទំនាក់ទំនងដែលកម្មវិធីក្លែងធ្វើប្រើ ជាមួយប្រភពរបស់វា។ ថេរដែលសម្គាល់ជាការសន្មត់គឺជាការក្រិតតាមខ្នាតបង្ហាញ។

សំណើធ្វើតាមខ្សែកោងប្រចាំថ្ងៃបូកការរំខាន។ ចំនួនក្នុងមួយនាទីចៃដន្យ (Poisson ការប៉ាន់ស្មានធម្មតា) ជាមួយការផ្ទុះបន្តិច។
λ(t) = base × (1 + 0.25·sin(2π(t + clock − 6 h)/24 h)) × surge(t), clock = time of day at the start (peak at 12:00); count/min ≈ N(60λ, √(60λ)) × (1 + N(0, 0.02))[6]ការសន្មត៖ ចំនួន worker ពេលសេវា សមត្ថភាពមូលដ្ឋានទិន្នន័យ ទំហំ cache ល្បឿនបំពេញ តម្លៃ និងអត្រាកំហុសនៃ build អាក្រក់ គឺជាតម្លៃបង្ហាញសម្រាប់សេវាវេបទំហំមធ្យម។
Erlang C៖ ប្រូបាប៊ីលីតេដែលសំណើត្រូវរង់ចាំ worker ទំនេរក្នុងប្រព័ន្ធ M/M/N។
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
កន្ទុយពេលរង់ចាំ៖ ឱកាសរង់ចាំយូរជាង t ធ្លាក់ចុះតាមអិចស្ប៉ូណង់ស្យែល។ សំណើដែលនៅតែរង់ចាំនៅ timeout 2 វិនាទីបរាជ័យ។ លើសសមត្ថភាព ចំណែកលើសបរាជ័យ។
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
ភាពយឺត p99 ពីកង់ទីលពេលសេវា និងពេលរង់ចាំ។
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]ការប៉ាន់ស្មាន៖ ការបូកquantile នៃសេវា និងការរង់ចាំមិនមែនជា p99 ពិតប្រាកដនៃផលបូករបស់ពួកវាទេ (វាអាចខ្ពស់ ឬទាបបន្តិច)។ ជួរត្រូវបានចាត់ទុកថាស្ថិរភាពក្នុងមួយនាទីនីមួយៗ ព្រោះសំណើចំណាយពេលតែមីលីវិនាទី។
ច្បាប់ Little៖ worker រវល់ = អត្រាមកដល់ × ពេលក្នុងសេវា។
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL cache៖ ជាមួយសំណើចៃដន្យ miss នីមួយៗចាប់ផ្ដើមរយៈពេល TTL ដែលសំណើ hit។
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
cache miss ផ្ទុកមូលដ្ឋានទិន្នន័យ។ ការពន្យាពេលជួររបស់វាធ្វើឱ្យយឺតរាល់សំណើដែលប៉ះវា ដែលក៏ធ្វើឱ្យ app worker ពេញដែរ។
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]ការសន្មត៖ ចំនួន worker ពេលសេវា សមត្ថភាពមូលដ្ឋានទិន្នន័យ ទំហំ cache ល្បឿនបំពេញ តម្លៃ និងអត្រាកំហុសនៃ build អាក្រក់ គឺជាតម្លៃបង្ហាញសម្រាប់សេវាវេបទំហំមធ្យម។
SLO និងថវិកាកំហុស៖ អត្រាដុតប្រាប់ថាថវិកាកំពុងចំណាយលឿនជាងអនុញ្ញាតប៉ុន្មានដង។
budget = 1 − SLO = 0.1 %; burn = error rate / 0.1 %; Δbudget per min = burn / 43,200; burn (1 h) = mean error rate over the last 60 min / 0.1 % (window pre-filled with the opening minute)[1][2]
ឧបករណ៍ធ្វើមាត្រដ្ឋានស្វ័យប្រវត្តិតាមដានគោលដៅជាមួយការពន្យាពេលចាប់ផ្ដើម និង cooldown។
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]ការសន្មត៖ ចំនួន worker ពេលសេវា សមត្ថភាពមូលដ្ឋានទិន្នន័យ ទំហំ cache ល្បឿនបំពេញ តម្លៃ និងអត្រាកំហុសនៃ build អាក្រក់ គឺជាតម្លៃបង្ហាញសម្រាប់សេវាវេបទំហំមធ្យម។
ថេរប្រតិបត្តិការផ្សេងទៀតដែលម៉ូដែលប្រើ។
16 workers/instance · app time 50 ms (+20 ms and +1 query with the feature on) · 2 queries/request · DB 4,000 queries/s · 20,000 hot objects · cache refill τ = 30 min (slower while the DB is saturated) · warm-up job +12 %/min for 6 min, +600 queries/s · timeout 2 s · 30 % low-priority traffic · bad build +5 % errors, ×1.25 CPU · rollback 5 min · $0.40 per instance-hour · scale-in by ≤ 20 % of the fleet after 10 quiet minutes · up to 40 instancesការសន្មត៖ ចំនួន worker ពេលសេវា សមត្ថភាពមូលដ្ឋានទិន្នន័យ ទំហំ cache ល្បឿនបំពេញ តម្លៃ និងអត្រាកំហុសនៃ build អាក្រក់ គឺជាតម្លៃបង្ហាញសម្រាប់សេវាវេបទំហំមធ្យម។

ភាពចៃដន្យ៖ ម៉ាស៊ីនបង្កើត mulberry32 ដែលមានគ្រាប់ពូជ ការចែកចាយដែលប្រើ — ឯកសណ្ឋាន អិចស្ប៉ូណង់ស្យែល (CDF បញ្ច្រាស) ធម្មតា (Box–Muller) Poisson (Knuth)។ គ្រាប់ពូជត្រូវបានបង្ហាញ និងអាចចែករំលែកបាន។

ប្រភព

  1. Site Reliability Engineering — Ch. 3 Embracing Risk (error budgets), Ch. 4 Service Level Objectives — Beyer, Jones, Petoff, Murphy (eds.), O'Reilly, 2016
  2. The Site Reliability Workbook — Ch. 5 Alerting on SLOs (burn rate; 14.4× over 1 h = 2 % of a 30-day budget) — Beyer, Murphy, Rensin, Kawahara, Thorne (eds.), O'Reilly, 2018
  3. Teletraffic Engineering Handbook — Erlang C formula; waiting-time distribution for M/M/n, FCFS — ITU-D Study Group 2 Question 16/2 (V. B. Iversen), 2005
  4. J. D. C. Little — A Proof for the Queuing Formula: L = λW — Operations Research 9(3):383–387, 1961
  5. J. Jung, A. W. Berger, H. Balakrishnan — Modeling TTL-based Internet Caches — IEEE INFOCOM 2003, 2003
  6. M. Harchol-Balter — Performance Modeling and Design of Computer Systems: Queueing Theory in Action (M/M/k, server farms, capacity provisioning) — Cambridge University Press, 2013

អ្នកណាធ្វើការងារនេះជាអាជីព

គំរូអប់រំ — មិនសម្រាប់ការសម្រេចចិត្តប្រតិបត្តិការទេ។ ទីតាំងពិតកែតម្រូវរាល់ថេរទៅតាមឧបករណ៍ និងទិន្នន័យផ្ទាល់ខ្លួន។