Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 44 — Data Migration Strategy

Technical BA Masterclass Bài 44/60

Mở đầu — vì sao bài này quan trọng

Có một câu nói lưu truyền trong giới làm dự án IT: "Phần mềm viết lại được, nhưng dữ liệu thì chỉ có một bản." Bạn có thể code lại module, vẽ lại giao diện, viết lại API — nhưng nếu trong quá trình chuyển đổi hệ thống mà 50.000 dòng giao dịch khách hàng bị sai lệch, hoặc số dư tài khoản của 200.000 người dùng bị lệch một đồng, thì không có "ctrl+Z" nào cứu được bạn. Đó là lý do data migration (di chuyển dữ liệu) thường là phần rủi ro nhất, tốn nhiều đêm trắng nhất, và cũng là phần bị xem nhẹ nhất khi lập kế hoạch dự án.

Là một Technical BA, bạn không phải người viết script migration — đó là việc của data engineer hay DBA. Nhưng bạn chính là người định nghĩa migration phải đạt được điều gì: dữ liệu nào cần chuyển, mapping ra sao, quy tắc làm sạch thế nào, đâu là tiêu chí để khẳng định "chuyển thành công", và kế hoạch quay lui (rollback) khi mọi chuyện đổ vỡ. Một spec migration mơ hồ sẽ khiến đội kỹ thuật chuyển nhầm dữ liệu một cách rất chính xác — đúng quy trình nhưng sai kết quả. Bài này giúp bạn xây dựng tư duy và bộ khung để dẫn dắt một cuộc di trú dữ liệu an toàn.

Khái niệm cốt lõi

Data migration là gì và không phải là gì

Data migration là quá trình chuyển dữ liệu từ một hoặc nhiều hệ thống nguồn (source) sang hệ thống đích (target), thường gắn với việc thay đổi nền tảng, hợp nhất hệ thống hoặc nâng cấp lớn. Cần phân biệt rõ với các khái niệm dễ nhầm: data integration là kết nối dữ liệu giữa các hệ thống đang cùng vận hành (mang tính lâu dài), còn migration mang tính một lần (one-off) — chuyển xong là hệ thống cũ ngừng dùng. Trong thực tế ranh giới này không tuyệt đối, vì nhiều dự án phải chạy song song cũ-mới một thời gian trước khi "cắt".

Các loại migration

Có ba nhóm migration chính mà một Technical BA thường gặp:

  • Storage migration — chuyển dữ liệu giữa hai engine lưu trữ, ví dụ từ Oracle sang PostgreSQL, từ SQL Server sang MySQL, hoặc từ on-premise lên cloud (RDS, Cloud SQL). Bản chất nghiệp vụ ít đổi, nhưng kiểu dữ liệu, charset, cách xử lý NULL, độ chính xác số thập phân... có thể khác nhau và gây sai lệch âm thầm.
  • Application migration — chuyển từ một ứng dụng cũ (thường là legacy tự xây) sang một sản phẩm mới hoặc SaaS, ví dụ từ phần mềm kế toán nội bộ sang SAP, hay từ CRM tự viết sang Salesforce. Đây là loại khó nhất vì mô hình dữ liệu hai bên rất khác nhau — phải làm rất nhiều mapping và biến đổi (transformation).
  • Cloud / infrastructure migration — chuyển toàn bộ hệ thống và dữ liệu từ data center riêng lên cloud, hoặc giữa các cloud (AWS sang Azure). Thường đi kèm yêu cầu về khối lượng cực lớn, băng thông, và downtime tối thiểu.
Ngoài ra còn có database migration trong cùng engine (nâng version, đổi schema) và business process migration (gắn với thay đổi quy trình nghiệp vụ). Việc xác định đúng loại giúp bạn lường trước rủi ro đặc thù.

Big Bang vs Trickle (Phased)

Đây là hai chiến lược thực thi cốt lõi bạn phải tư vấn cho dự án:

  • Big Bang: chuyển toàn bộ dữ liệu trong một cửa sổ thời gian (thường cuối tuần), tắt hệ thống cũ, bật hệ thống mới. Ưu điểm: dứt khoát, không phải đồng bộ hai chiều, chi phí vận hành song song bằng 0. Nhược điểm: rủi ro cao, downtime dài, nếu hỏng thì cả doanh nghiệp đứng hình.
  • Trickle / Phased: chuyển dần theo từng nhóm (theo chi nhánh, theo loại dữ liệu, theo tập khách hàng), hệ thống cũ và mới chạy song song một thời gian. Ưu điểm: rủi ro phân tán, mỗi đợt nhỏ dễ kiểm soát và rollback. Nhược điểm: phức tạp vì phải đồng bộ hai chiều, kéo dài, tốn nguồn lực vận hành.
Lựa chọn không phải vấn đề kỹ thuật thuần túy mà là đánh đổi rủi ro kinh doanh. Một sàn thương mại điện tử không thể "Big Bang" vào mùa sale; một ngân hàng thường chọn cửa sổ đêm cuối tuần dài có kế hoạch rollback chi tiết.

ETL — xương sống của migration

Mọi migration đều đi qua ba bước: Extract (trích xuất từ nguồn), Transform (làm sạch và biến đổi), Load (nạp vào đích). Là BA, bạn đặc biệt cần quan tâm bước Transform, vì đây là nơi nghiệp vụ thể hiện: chuẩn hóa số điện thoại, gộp khách hàng trùng, ánh xạ mã trạng thái cũ sang mới, xử lý dữ liệu thiếu. (Lưu ý: ETL/ELT và data pipeline được dạy sâu ở Bài 24 — ở đây ta chỉ dùng nó như công cụ phục vụ migration.)

Bộ khái niệm bắt buộc phải nắm

  • Mapping document (source-to-target mapping): bảng ánh xạ từng trường nguồn sang trường đích, kèm quy tắc biến đổi. Đây là sản phẩm quan trọng nhất do BA chủ trì.
  • Data profiling: khảo sát chất lượng dữ liệu nguồn trước khi chuyển (bao nhiêu NULL, bao nhiêu trùng, định dạng có nhất quán không).
  • Reconciliation: đối chiếu sau khi chuyển — số bản ghi, tổng tiền, tổng số lượng giữa nguồn và đích phải khớp.
  • Cutover: thời điểm chính thức "cắt" sang hệ thống mới.
  • Rollback plan: kế hoạch quay lui nếu migration thất bại.
  • Dry run / mock migration: chạy thử toàn bộ quy trình trên dữ liệu thật (bản sao) để đo thời gian và phát hiện lỗi.

Tình huống thực tế

Ví dụ 1 — Ngân hàng số chuyển từ Oracle sang PostgreSQL (Storage migration)

Một ngân hàng số tại TP.HCM (giả định, gọi là VBank) quyết định chuyển core hệ thống thẻ từ Oracle sang PostgreSQL để cắt giảm chi phí license khoảng 4 tỷ đồng/năm. Khối lượng: 1,8 triệu thẻ, 240 triệu giao dịch lịch sử trong 5 năm.

Vấn đề phát sinh ở bước Transform mà ban đầu không ai để ý: Oracle dùng kiểu NUMBER không giới hạn độ chính xác, còn PostgreSQL khi map sang numeric nếu không khai báo precision đúng sẽ làm tròn. Trong đợt dry run đầu tiên, tổng số dư reconciliation lệch 1.247.000 đồng trên toàn hệ thống — tưởng nhỏ nhưng với ngân hàng là không chấp nhận được. Nguyên nhân: vài giao dịch lãi suất có phần thập phân bị cắt. BA của dự án đã bổ sung vào mapping document quy tắc "giữ nguyên 4 chữ số thập phân cho mọi trường tiền tệ" và thêm bước reconciliation tự động so tổng SUM theo từng ngày.

Bài học: với storage migration, rủi ro lớn nhất không phải dữ liệu mất mà là dữ liệu lệch âm thầm do khác biệt kiểu dữ liệu. Reconciliation theo tổng (control totals) phải là tiêu chí nghiệm thu bắt buộc, không phải tùy chọn.

Ví dụ 2 — Chuỗi bán lẻ chuyển CRM tự viết sang Salesforce (Application migration)

Một chuỗi mỹ phẩm có 80 cửa hàng (giả định) quyết định bỏ CRM tự viết bằng PHP để dùng Salesforce. Dữ liệu nguồn: 1,2 triệu khách hàng tích lũy 8 năm — và đây là một "bãi rác dữ liệu" điển hình: số điện thoại lưu đủ kiểu (0901234567, +84901234567, 84 901 234 567), nhiều khách trùng vì mỗi cửa hàng tạo hồ sơ riêng, trường ngày sinh có chỗ ghi 01/01/1900 làm giá trị mặc định.

Đội BA chạy data profiling và phát hiện: 23% bản ghi có số điện thoại không chuẩn, ước tính 180.000 khách hàng trùng. Họ đưa ra quyết định nghiệp vụ quan trọng — không chuyển nguyên trạng, mà thiết kế quy tắc: chuẩn hóa SĐT về dạng +84, gộp khách trùng theo SĐT đã chuẩn hóa và cộng dồn điểm tích lũy, loại bỏ ngày sinh 1900 thành NULL. Họ cũng quyết định không chuyển 400.000 khách "ngủ đông" (không mua hàng quá 3 năm) sang Salesforce để tiết kiệm chi phí license per-record, mà lưu vào kho lưu trữ riêng.

Bài học: application migration là cơ hội vàng để làm sạch và quyết định cái gì đáng chuyển. BA phải phối hợp business để định nghĩa quy tắc gộp/loại, vì đây là quyết định nghiệp vụ chứ không phải kỹ thuật. "Migrate everything" gần như luôn là quyết định lười và tốn kém.

Ví dụ 3 — Sàn TMĐT phân đợt theo vùng (Phased migration tránh thảm họa)

Một sàn TMĐT tại Đông Nam Á (giả định, gọi là ShopGo) cần chuyển nền tảng đặt hàng lên kiến trúc mới. Ban đầu CTO muốn Big Bang trong một đêm. BA trưởng phản biện bằng con số: nếu Big Bang mà lỗi, toàn bộ 12 triệu đơn hàng đang xử lý của 6 quốc gia sẽ kẹt — thiệt hại doanh thu ước tính 18 tỷ đồng/ngày.

Phương án cuối cùng là phased theo quốc gia: bắt đầu với thị trường nhỏ nhất (Lào, ~2% giao dịch) làm "chuột bạch", rồi Campuchia, rồi mới đến Việt Nam và Indonesia. Trong giai đoạn quá độ, hai hệ thống chạy song song với cơ chế đồng bộ một chiều cho dữ liệu sản phẩm. Đợt đầu phát hiện lỗi tính phí ship sai cho đơn hàng liên tỉnh — nếu Big Bang thì lỗi này đã bùng ra toàn khu vực. Vì chỉ ở Lào, đội fix trong 2 ngày rồi mới triển khai tiếp.

Bài học: phased migration đắt và phức tạp hơn, nhưng với hệ thống không được phép sập, nó là khoản "bảo hiểm rủi ro" xứng đáng. Vai trò BA là lượng hóa rủi ro bằng tiền để giúp lãnh đạo ra quyết định đúng thay vì cảm tính.

Hướng dẫn từng bước

Đây là quy trình 8 bước để dẫn dắt một dự án migration với vai trò Technical BA:

Bước 1 — Xác định phạm vi và loại migration. Liệt kê hệ thống nguồn, hệ thống đích, loại migration (storage / application / cloud). Trả lời câu hỏi: dữ liệu nào trong phạm vi (in-scope) và dữ liệu nào ngoài phạm vi? Bao nhiêu năm lịch sử cần chuyển?

Bước 2 — Data profiling. Phối hợp với DBA chạy khảo sát chất lượng dữ liệu nguồn: số bản ghi, tỷ lệ NULL theo trường, dữ liệu trùng, định dạng bất nhất, giá trị bất thường (outlier). Đây là dữ liệu để bạn ước lượng công sức làm sạch.

Bước 3 — Xây dựng mapping document. Lập bảng source-to-target: trường nguồn → trường đích → kiểu dữ liệu → quy tắc biến đổi → giá trị mặc định khi thiếu. Mỗi dòng phải rõ ràng đến mức data engineer đọc là code được ngay.

Bước 4 — Định nghĩa quy tắc làm sạch và quyết định loại trừ. Cùng business chốt: chuẩn hóa thế nào, gộp trùng theo khóa nào, dữ liệu nào không chuyển. Ghi rõ vào spec để có cơ sở nghiệm thu.

Bước 5 — Chọn chiến lược (Big Bang vs Phased) và lập kế hoạch cutover. Lượng hóa rủi ro, đề xuất cửa sổ thời gian, thứ tự các đợt, và quan trọng nhất: rollback plan. Luôn có câu trả lời cho "nếu hỏng thì sao".

Bước 6 — Dry run. Chạy thử toàn bộ quy trình trên bản sao dữ liệu thật. Đo thời gian thực tế (để biết cửa sổ cuối tuần có đủ không), ghi nhận mọi lỗi. Một dự án nghiêm túc chạy dry run ít nhất 2–3 lần.

Bước 7 — Thực thi migration thật. Theo kế hoạch cutover. Trong khi chạy, có người trực giám sát từng mốc (checkpoint).

Bước 8 — Reconciliation và nghiệm thu. Đối chiếu số bản ghi, control totals (tổng tiền, tổng số lượng), kiểm tra mẫu (sampling) các bản ghi quan trọng. Chỉ tuyên bố thành công khi mọi tiêu chí khớp. Sau đó mới ra quyết định "go live" hay rollback.

Lỗi thường gặp & mẹo

Lỗi 1 — Bỏ qua data profiling, đi thẳng vào viết script. Đội kỹ thuật giả định dữ liệu "sạch", đến khi load mới phát hiện hàng loạt lỗi định dạng. Mẹo: luôn profiling trước, và đưa kết quả profiling thành phụ lục bắt buộc của spec.

Lỗi 2 — Không có tiêu chí reconciliation rõ ràng. "Chuyển xong rồi đó" không phải là nghiệm thu. Mẹo: định nghĩa trước các control totals — số bản ghi phải khớp tuyệt đối, tổng tiền khớp đến từng đồng, và sampling tối thiểu X bản ghi quan trọng được kiểm tay.

Lỗi 3 — Quên rollback plan. Nhiều dự án chỉ lập kế hoạch cho kịch bản thành công. Mẹo: viết rollback plan chi tiết như viết kế hoạch chính, kèm "điểm không thể quay lui" (point of no return) — sau mốc nào thì bắt buộc đi tiếp.

Lỗi 4 — Ước lượng thời gian sai vì không dry run. Migration 240 triệu bản ghi có thể mất 14 tiếng chứ không phải 4 tiếng như tưởng. Mẹo: dry run trên dữ liệu thật quy mô đầy đủ để đo thời gian thực, đừng ngoại suy từ tập nhỏ.

Lỗi 5 — "Migrate everything". Chuyển hết cả rác. Mẹo: coi migration là dịp dọn dẹp; chủ động đề xuất loại trừ dữ liệu chết để tiết kiệm chi phí và rủi ro.

Lỗi 6 — Bỏ quên dữ liệu phát sinh trong cửa sổ migration (delta). Trong lúc đang chuyển, hệ thống cũ vẫn có giao dịch mới. Mẹo: làm rõ chiến lược xử lý delta — đóng băng (freeze) hệ thống cũ, hoặc dùng cơ chế capture thay đổi và đồng bộ sau.

Bài tập thực hành

Tình huống: Công ty bảo hiểm AnTâm (giả định) chuyển hệ thống quản lý hợp đồng từ phần mềm Foxpro cũ 15 năm sang một SaaS hiện đại. Nguồn có 850.000 hợp đồng, trong đó 30% đã hết hiệu lực, trường "ngày sinh khách hàng" có nhiều giá trị 00/00/0000, và số CMND/CCCD lưu lẫn lộn (9 số, 12 số, có dấu cách).

Yêu cầu — hãy soạn các sản phẩm sau:

  • Quyết định phạm vi: Bạn sẽ chuyển toàn bộ 850.000 hợp đồng hay loại trừ nhóm nào? Lập luận bằng lợi ích nghiệp vụ.
  • Mapping cho 3 trường khó: Viết quy tắc biến đổi cho ngày sinh (xử lý 00/00/0000), số định danh (chuẩn hóa 9 số/12 số), và trạng thái hợp đồng.
  • Chọn chiến lược Big Bang hay Phased, kèm lý do và một rủi ro chính bạn lo nhất.
  • Ba tiêu chí reconciliation mà bạn sẽ dùng để nghiệm thu.
Gợi ý chấm điểm cho chính bạn: lời giải tốt sẽ (a) loại trừ hoặc lưu trữ riêng hợp đồng hết hiệu lực thay vì chuyển hết; (b) quy đổi 00/00/0000 thành NULL kèm cờ đánh dấu để bộ phận nghiệp vụ rà soát sau; (c) có control total về tổng số tiền bảo hiểm (sum insured) — vì đây là con số nhạy cảm nhất với khách hàng và cơ quan quản lý.

Tóm tắt

Data migration là phần rủi ro cao nhất của hầu hết các dự án chuyển đổi, vì dữ liệu — khác với code — chỉ có một bản và sai là rất khó cứu. Là Technical BA, bạn không viết script nhưng bạn định nghĩa "thế nào là thành công": phạm vi, mapping, quy tắc làm sạch, chiến lược cutover và tiêu chí nghiệm thu.

Ba điều cốt lõi cần nhớ: Thứ nhất, hiểu đúng loại migration (storage / application / cloud) để lường trước rủi ro đặc thù — storage hay lệch âm thầm do kiểu dữ liệu, application đòi hỏi mapping và làm sạch nặng. Thứ hai, chọn chiến lược Big Bang hay Phased là một bài toán đánh đổi rủi ro kinh doanh, và việc của bạn là lượng hóa rủi ro bằng tiền để lãnh đạo quyết định đúng. Thứ ba, không bao giờ tuyên bố thành công khi chưa có reconciliation chặt chẽ (control totals khớp đến từng đồng) và một rollback plan đã viết sẵn. Hãy luôn nhớ ba "vũ khí" của BA trong migration: data profiling trước khi làm, dry run để đo thực tế, và reconciliation để nghiệm thu — thiếu một trong ba là bạn đang đánh cược với dữ liệu của khách hàng.