Skip to content
nkh.do
Go back

Linh Khí Rò Rỉ Chapter 9

Post-Mortem

June 28, 2026

Đèn xanh đỏ quét qua cửa kính data center rồi tắt. Xe cứu thương rẽ ngã tư, khuất.

Minh theo xe. Anh quay lại đúng một lần ở cửa — nhìn Vinh ngồi trên sàn, nhìn Hoàng đứng cạnh rack, nhìn Grafana đỏ rực trên laptop — rồi bước đi. Không có gì anh có thể làm ở đây. Điện thoại trong tay vẫn hiển thị Holistics P1 dashboard. Anh sẽ xử lý trên đường. Đó là thứ anh hiểu.

Sáu giờ rưỡi sáng. Data center D9 còn hai người, một rack, và một laptop.

Vinh ngồi trên sàn gạch. Mồ hôi khô trên áo, muối cứng ở gáy. Ba kinh vẫn đau — cơ bụng co cứng, hai lòng bàn chân rát. Nhưng đau đã lui về nền. Quen rồi. Như cơ bắp sau session quá tải: degraded, không injured.

Grafana vẫn chạy. Holistics dashboard đỏ — P1, CPU 94%. VPBank SLA breach trong vài phút. Nhưng Vinh không nhìn tab đó. Hải sẽ gọi. VPBank sẽ breach hoặc sẽ không. Anh chọn cuộc khủng hoảng duy nhất anh có thể tác động.

Anh kéo anomalous data.

Bảy endpoint. Sáu phẳng đáy — Duy đang siphon. Nhưng D9-B7, endpoint gần nhất, cái anh đang ngồi cạnh, không phẳng.

Nó dao động.

Không phải spike của surge. Không phải wall of noise vô cấu trúc. Có nhịp — nhưng không phải nhịp bốn mươi giây anh đã quen. Khác hẳn. Nhanh hơn, bất đều hơn, biên độ thấp. Và trong ba mươi phút vừa rồi, biên độ giảm dần. Giảm, giảm, rồi ổn định ở baseline mới — thấp hơn baseline cũ, nhưng có micro-variation.

Sống.

Vinh kéo thêm một thứ: directional signature. Anh đã ghi nhận từ đầu — linh khí phóng yếu hơn phía sau rack D9-B7 do khe hở thông gió. Directional propagation. Point-source emission theo gradient. Lúc đó anh nghĩ nó chỉ là vật lý.

Nhưng direction signature bây giờ khác. Linh khí không phóng đều mọi hướng. Nó chảy theo hướng cụ thể — từ D9-B7 ra, rồi cong về phía đông bắc, về phía các endpoint khác. Không random. Có hướng. Và hướng đó thay đổi theo thời gian — lúc mạnh về phía FPT, lúc lệch về Viettel. Như đang dò. Như đang tìm đường ngắn nhất.

Vinh ngồi bất động. Ba mươi giây. Rồi đứng dậy, đi tới rack. Hai mét. Áp trên da — nhẹ hơn nhiều so với ba mươi phút trước. Không hét. Không đẩy. Chảy. Chậm, có hướng, trượt qua da rồi đi tiếp.

Anh lùi lại một bước. Áp giảm. Tiến lên. Áp tăng. Nhưng không tăng đều — phía trước rack mạnh hơn phía sau, bên trái mạnh hơn bên phải. Directional.

“Nó đang tìm balance,” Vinh nói, không quay đầu.

Hoàng đứng cách đó ba mét. Không đáp.

“Anh nói nó tìm balance riêng trong hai ngày nếu không ai can thiệp.” Vinh quay sang ông. “Nhưng Duy đang can thiệp. Siphon hút một phía, tạo gradient cục bộ. Linh khí phải chảy theo gradient thay vì tự phân phối đều.”

Anh chỉ Grafana. Direction signature: linh khí chảy từ D9-B7 ra, bị kéo về phía siphon point. Không chảy tự do — bị hút. Như sông bị đập chuyển dòng. Mỗi giọt nước tìm biển, nhưng đập ép nó chảy về một hướng duy nhất.

“Nó không tràn vì nó mạnh. Tràn vì nó bị kẹt. Không có đường khác. Mai Linh —” anh nhìn về phía cửa, nơi xe cứu thương vừa rời đi, ”— cô ấy là lỗ hở duy nhất. Mọi endpoint bị siphon. Mọi kinh tôi đóng. Cooling chạy full. Tất cả cửa đóng hết. Chỉ còn cô.”

Hoàng nhìn anh. Lâu. Rồi gật — rất nhẹ, như xác nhận thứ đã biết từ lâu.

“Tôi đã làm sai.” Vinh ngồi xuống, lưng dựa tường. “Constraint, isolate, redirect, đóng channel, đóng kinh. Mỗi lần tôi đóng cửa, tôi ép nó chảy qua cửa còn lại. Cửa cuối cùng là Mai Linh. Tôi không bảo vệ cô — tôi biến cô thành bottleneck duy nhất.”

Anh mở terminal. Trắng. Con trỏ nhấp.

Post-mortem. Bước cuối trong incident response: sau khi sự cố qua, ngồi xuống, đọc lại toàn bộ timeline, tìm root cause, viết báo cáo. Blameless — không đổ lỗi người, tìm hiểu hệ thống. Ba mươi bảy bản post-mortem trong bốn năm. Mỗi bản kết thúc bằng “root cause: X, fix: Y.” Rõ ràng. Sạch sẽ. Đóng ticket.

Bản thứ ba mươi tám sẽ khác.

Root cause: mô hình tư duy. Không phải linh khí quá mạnh. Không phải framework thiếu feature. Không phải sensor chưa đủ nhạy. Root cause là anh nhìn linh khí như resource — thụ động, vô tri, nằm yên chờ allocate. CPU không biết mình đang bị schedule. RAM không biết mình đang bị page. Nhưng linh khí biết. Nó phản ứng khi bị monitor. Nó đổi hướng khi bị constraint. Nó tìm đường khi bị kẹt.

Nó sống.

Anh đã biết điều này. Mai Linh nói anh — “Nó đang phản ứng lại anh. Nó muốn anh biết nó ở đây.” Hoàng nói anh — “Đừng đóng cửa.” Cả hai người nói cùng một điều, bằng hai ngôn ngữ anh từng coi không tương thích: trực giác và kinh nghiệm. Anh gộp cả hai vào “unverified” vì data chưa confirm.

Bây giờ data confirm. Direction signature. Micro-variation. Flow theo hướng.

Anh nghe rồi.


Vinh gõ. graphviz. Mỗi post-mortem đều có diagram.

Bảy node — bảy endpoint. Mũi tên direction.

Trạng thái hiện tại: sáu node bị siphon về một điểm. Tất cả lưu lượng dồn vào bottleneck. Bottleneck overload. Cascading failure. Chính xác thứ đã xảy ra ba mươi phút trước.

Giải pháp cũ: constraint tại bottleneck. Đóng cửa. Đẩy áp lực chỗ khác. Whack-a-mole — gõ con chuột này xuống, con khác nhô lên.

Giải pháp mới. Vinh vẽ mũi tên khác. Không siphon — nhiều vào một. Không redirect — một vào một. Distribute. Một vào nhiều.

Load balancing.

Bảy endpoint thành bảy edge node. Mở path tại mỗi node. Mỗi node nhận một phần lưu lượng. Redundancy: một node overload, các node khác gánh. Failover tự nhiên. Không single point of failure.

“Nó giống CDN,” Vinh nói. “Thay vì tất cả traffic đánh vào origin server, cache ở edge node. Mỗi node nhận ít hơn. Tổng throughput cao hơn.”

Hoàng bước tới. Nhìn màn hình. Đọc diagram nhanh — ông từng là sysadmin, đọc topology là bản năng.

“Nhưng mày cần biết nó muốn chảy về đâu,” ông nói.

Vinh dừng gõ.

Đúng. Sensor thấy volume — bao nhiêu linh khí. Không thấy direction — đi đâu. Anh đo cường độ, nhịp, áp lực, nhiệt. Nhưng “muốn” — cái đó sensor không đo được. Anh có thể mở bảy path, nhưng không biết path nào linh khí sẽ chọn, path nào sẽ nghẽn, path nào sẽ favored. Đoán = waste time = Mai Linh chịu lâu hơn.

Anh cần DNS. Cái gì biết linh khí muốn resolve về đâu.

Điện thoại rung. Tin nhắn Minh: “Cô ấy tỉnh. Bệnh viện Tân Mai. Nhịp tim 62. CT sạch. Bác sĩ không hiểu.”

Vinh bấm gọi.


Hai tiếng bíp.

“Anh Vinh?” Giọng Mai Linh — khàn, nhẹ, nhưng tỉnh. Hoàn toàn tỉnh.

“Cô Linh. Cô—”

“Em ổn.” Ngắt lời. Không bất lịch sự — không có thời gian cho xã giao. “Anh. Nó khác rồi.”

“Cô cảm nhận được? Từ bệnh viện?”

“Yếu. Nhưng có.” Cô dừng. Bóng tiếng TV hành lang vọng qua điện thoại. “Nó không hét nữa. Nó đang tìm.”

“Tìm gì?”

“Đường. Nó tìm đường. Nhưng bị kéo — kéo về một bên.” Cô dừng thêm. “Ai đang hút nó.”

“Duy. Anh ta siphon.”

“Anh đang làm gì?”

“Thiết kế kiến trúc mới. Load balancing — mở path tại bảy endpoint, phân tán thay vì constraint. Nhưng tôi không thấy direction. Sensor thấy volume, không thấy ‘muốn đi đâu.’”

“Em thấy.” Cô đáp ngay. Không do dự. “Anh mở — em nói cho.”

DNS. Sensor hữu cơ. Cô biết linh khí muốn đi đâu. Anh là load balancer — mở path theo chỉ dẫn.

“Cô Linh.”

“Hmm?”

“Lúc trước cô nói nó phản ứng lại tôi, nó muốn tôi biết nó ở đây. Tôi không nghe.” Vinh nắm điện thoại chặt hơn. “Tôi xin lỗi.”

Cô không đáp ngay. Tầm năm giây. Rồi, rất nhẹ: “Anh cuối cùng cũng nghe nó.”


Vinh cúp máy. Quay lại terminal.

“Anh Hoàng. Tôi cần mở path tại sáu endpoint còn lại. Anh biết hạ tầng — cái nào chịu thêm load, cái nào không?”

Hoàng bước tới, xem danh sách bảy node trên màn hình. “Rack FPT Tân Bình — hạ tầng cũ, cooling yếu. Không chịu nổi. Trạm BTS Viettel — thoáng, trống, mở được. CDN Quận 7 — server room riêng, cooling riêng, tốt nhất.”

“Chịu thêm bao nhiêu nhiệt?”

“Hai độ. Bốn nếu mở cửa phòng server.”

“Ba node còn lại?”

Hoàng lắc đầu. “CDN node Bình Thạnh — gần khu dân cư, nhiễu nếu nhiệt tăng. Trạm phát sóng Tân Bình — cũ. Server farm Thủ Đức — xa, nhưng cooling mạnh. Thủ Đức mở được.”

Vinh gõ. FPT đỏ. Viettel xanh. CDN Q7 xanh. Thủ Đức xanh. Ba node kia vàng.

“Bốn node,” Vinh nói. “Bốn path mở. Còn đủ không?”

“Bốn path chia tải cho bảy endpoint — đủ nếu bốn cái kia gánh đều.” Hoàng nhìn diagram. “Tao đi Thủ Đức. Bốn mươi phút.” Ông quay đi, rồi dừng. “Mày mở D9-B7 và CDN. Viettel — tao gọi điện cho thằng quản lý trạm, bảo nó mở cửa phòng thiết bị. Nó nợ tao.”

Hoàng đi. Cửa data center mở, đóng. Kể từ ngày Vinh gặp ông, đây là lần đầu tiên Hoàng chủ động hành động thay vì đứng im cảnh báo.

Vinh ở lại một mình.

Anh ngồi cạnh rack D9-B7. Mở kinh tâm bào. Nhưng lần này không redirect. Không route. Không set discharge. Chỉ mở. Cho phép. Như mở port trên firewall — không push traffic, chỉ permit flow.

Khác ngay. Ba mươi phút trước, mỗi lần anh mở kinh, linh khí ùa vào — xô, tràn, overload. Bây giờ nó chảy. Từ từ. Theo direction signature anh đã thấy — về phía đông, phía Viettel.

Điện thoại rung. Mai Linh: “Viettel. Nó chảy về Viettel. Mở thêm đường đó.”

Vinh mở kinh đở — path phụ, song song. Linh khí chia dòng. Phần lớn về Viettel, phần nhỏ cong về CDN Q7.

“Hai đường,” Mai Linh nói. “Đúng rồi. Nó muốn hai đường. Đừng đóng — mở thêm.”

Linh khí chảy qua anh. Lần đầu tiên anh cảm nhận sự khác biệt — không phải khác về cường độ. Khác về chất. Trước đó, mỗi lần linh khí chảy qua kinh, nó xô, đẩy, như nước ép qua ống hẹp. Bây giờ nó trôi. Anh là channel, không phải bottleneck. Không resistance. Không feedback loop. Linh khí đi qua anh rồi đi tiếp, về endpoint nó chọn, theo path anh mở. Anh không manage nó. Nó đang chạy, và anh chỉ mở đường cho nó chạy.

Điện thoại rung. Hoàng, giọng ngắn qua tiếng gió xe máy: “Thủ Đức. Tao mở rồi.”

“Sensor D9-B7 intensity giảm bốn mươi phần trăm.” Vinh đọc số. “Bốn path đang chia tải.”

“Ổn.” Hoàng cúp.

Cửa data center mở lần nữa.

Không phải Hoàng.

Phan Phương Duy bước vào.

Áo sơ mi trắng, slacks — chỉn chu như mọi lần, nhưng cổ áo nhăn, tay phải nắm chặt, đốt ngón trắng. Anh ta siphon bằng tay. Bằng tu vi. Bằng cơ thể. Và siphon đang yếu dần — Vinh thấy trong data, direction signature thay đổi mỗi giây.

Duy dừng cách Vinh ba mét. Nhìn Vinh ngồi trên sàn, laptop mở, diagram bảy node. Nhìn Grafana.

“Load balancing.” Đọc chữ trên màn hình. Giọng phẳng.

“Đúng.”

“Anh mở path thay vì đóng.” Duy bước tới thêm một bước. Không hung hăng — phân tích. Bản năng kỹ thuật chạy trước cảm xúc. “Phân tán lưu lượng qua nhiều endpoint. Redundancy.”

“Và anh đang siphon. Hút tất cả về một điểm. Bottleneck. Overload. Cascading failure.” Vinh không đứng dậy. Không cần. “Anh tạo ra chính thứ anh nói cần kiểm soát.”

Duy im. Nhìn Grafana. Direction signature đang phân tán — bốn đường chính, mỗi đường biên độ thấp, đều đặn. Linh khí không còn bị kéo về siphon point.

“Siphon tạo order,” Duy nói. Giọng có cấu trúc — luôn có cấu trúc, ngay cả lúc đứng trước data bác bỏ mình. “Linh khí tự do là chaos. Phân tán là mất kiểm soát. Lâu dài — khi linh khí phục hồi mạnh hơn — ai đảm bảo bảy endpoint không cầu toàn thành bảy điểm đứt gãy?”

“Câu hỏi đúng,” Vinh nói. “Nhưng câu trả lời không phải hút về một node. Câu trả lời là monitoring thích nghi. Anh nhìn endpoint — khi một path quá tải, sensor báo, mở thêm path. Đóng path thừa. Load balancing động, không tĩnh. Giống auto-scaling: thêm instance khi traffic tăng, gỡ khi giảm.”

“Anh đang build infrastructure cho thứ anh không kiểm soát được.”

“Tôi đang build hạ tầng cho thứ tôi không cần kiểm soát.” Vinh kéo màn hình về phía Duy. “Nhìn data. Direction signature. Khi tôi mở path, linh khí chọn đường tối ưu. Có xu hướng. Không random — emergent order. Nó tự organize khi có hạ tầng chịu tải. Tôi không quyết định nó đi đâu. Tôi chỉ đảm bảo có đường cho nó đi.”

“Anh đang nói nó có ý thức.”

“Tôi đang nói nó có behavior. Đo được.” Vinh chỉ Grafana. “Khi D9-B7 overload, nó redirect — tự động, không cần tôi can thiệp. Khi tôi mở path phụ, nó chọn path favored. Direction signature thay đổi theo endpoint state. Đó không phải consciousness. Đó là distributed system behavior. Và anh không thể siphon một distributed system về một node.”

Duy nhìn data. Holistics dashboard: CPU 72%. Giảm. VPBank latency 0.3 giây. Giảm. Hạ tầng phục hồi khi linh khí không còn bị kẹt — hai hệ thống, cùng hạ tầng, cùng endpoint, cùng root cause.

Endpoint Dashboard: bốn đường dao động đều, không phẳng, không spike. Sống. Thở qua bốn path mở, mỗi path một phần lưu lượng.

Anh ta mở tay phải. Ngón tay duỗi. Siphon dừng.

Không phải vì thua. Vì data.

“Anh không thắng bằng tu vi,” Duy nói. Giọng không cay — quan sát khách quan, cái giọng anh dùng khi review pull request tốt.

“Tôi thắng bằng architecture.” Vinh đáp. “Tu vi của anh hút về một điểm. Hạ tầng của tôi phân tán. Anh không đủ bandwidth để siphon khi flow đã distribute.”

“Paradigm khác.” Duy nói. Không phải câu hỏi.

“Paradigm khác.”

Duy nhìn diagram lần cuối. Bảy node, bảy mũi tên tỏa ra, mỗi mũi tên một hướng. Rồi quay đi. Bước chân đều trên sàn gạch. Cửa mở, đóng.

Paradigm bị đánh bại. Người còn.


Nhiệt rack D9-B7: 26°C. Sensor báo 24. Chênh hai độ. Giảm từ chín.

Đèn LED hành lang hết nhấp nháy. Sáng đều. Quạt cooling ngừng gầm — chạy lại ở mức bình thường. Data center nghe như data center: tiếng quạt vo đều, tiếng máy ồn thấp, không gì khác.

Vinh đóng laptop. Anh muốn check Holistics dashboard thêm — số sẽ ổn. CPU giảm, latency giảm. Hạ tầng phục hồi khi linh khí không còn bị kẹt. Hai thế giới, một hạ tầng, một root cause.

Điện thoại rung. Mai Linh: “Em cảm nhận nó chảy. Đều. Đường Thủ Đức mạnh nhất. Nó thích đường đó.”

Vinh thả điện thoại xuống đùi. Bảy giờ sáng. Anh ngồi trên sàn data center, lưng dựa tường, hai tay buông bên sườn. Mệt — kiệt — nhưng khác kiểu. Ba mươi phút trước là mệt của bất lực, của người đứng trước system không có root cause. Bây giờ là mệt của người đã xong post-mortem, viết xong fix, deploy xong, ngồi lại xem hệ thống chạy.

Hoàng về. Ông bước vào, mồ hôi trên trán — bốn mươi phút đi xe máy sáng sớm. Nhìn Grafana. Bốn đường đều. CPU xanh. Nhiệt ổn định.

Ông nhìn diagram cuối cùng trên màn hình. Bảy node. Bảy đường. Không đóng cửa.

Rồi — lần đầu, trong tất cả những lần Vinh gặp — Hoàng cười. Chậm. Khóe miệng nhếch, mắt nhíu, nếp nhăn quanh hốc mắt kéo theo. Nụ cười của người nhìn thấy thứ mình từng không dám làm, được làm bởi người khác — người trẻ hơn, ngu dại hơn, và may mắn hơn.

“Mày giỏi hơn tao hồi đó.” Giọng khàn, giọng người ít cười nên cơ mặt chưa quen. “Tao cố đóng cửa. Mày mở thêm cửa để nó thở.”


Share this chapter on:

Previous Chapter
Cascading Failure
Next Chapter
Dashboard Xanh