Hệ thống mới hiếm khi được dựng trên nền đất trống. Phần lớn thời gian của một dự án nằm ở chỗ nối nó với những thứ doanh nghiệp đã chạy từ nhiều năm trước.
Ba cách nối và cái giá của từng cách
Chỉ có ba cách để hai hệ thống trao đổi dữ liệu, và chọn cách nào thường do hệ thống cũ quyết định chứ không do đội kỹ thuật.
Qua API là cách sạch nhất. Hệ thống cũ công bố một tập giao diện, hệ thống mới gọi vào đó, và bên trong phần mềm cũ muốn thay đổi thế nào cũng được miễn là giao diện giữ nguyên. Ranh giới trách nhiệm rõ ràng, lỗi dễ truy, quyền truy cập kiểm soát tới từng chức năng. Cái giá là hệ thống cũ phải có sẵn API, hoặc có người đủ thẩm quyền để bổ sung.
Qua file là cách cũ nhất và vẫn rất phổ biến: một bên xuất ra tệp theo định dạng thống nhất, bên kia đọc vào. Cách này đơn giản, hầu như hệ thống nào cũng làm được, và dễ chẩn đoán khi hỏng. Đổi lại, dữ liệu luôn trễ một nhịp, và phải xử lý thêm những tình huống đời thường: tệp gửi hai lần, gửi thiếu, gửi sai thứ tự, hay bị đọc khi mới ghi một nửa.
Chạm thẳng vào database là cách nhanh nhất để có kết quả và đắt nhất về lâu dài: không cần bên kia hợp tác, lấy được dữ liệu ngay.
Vì sao đọc thẳng database của phần mềm khác là nợ kỹ thuật
Cấu trúc bảng bên trong một phần mềm là chuyện riêng của phần mềm đó. Nhà cung cấp không cam kết giữ nguyên tên bảng, tên cột hay ý nghĩa từng giá trị, vì họ giả định chỉ mã nguồn của chính họ đọc vào đó. Cho một hệ thống khác đọc thẳng vào là tự tạo ra một ràng buộc mà bên kia không biết mình đang có. Hệ quả xuất hiện muộn nhưng chắc chắn:
- Một bản cập nhật thường lệ đổi tên cột, và phần tích hợp hỏng mà không báo trước.
- Các quy tắc nghiệp vụ nằm trong mã nguồn phần mềm cũ bị bỏ qua, nên dữ liệu đọc ra đúng kỹ thuật nhưng sai nghiệp vụ.
- Nếu ghi trực tiếp vào bảng, dữ liệu không qua các bước kiểm tra và có thể làm hỏng tính nhất quán của chính phần mềm cũ.
- Truy vấn nặng có thể làm chậm hệ thống đang phục vụ nghiệp vụ, và việc đọc thẳng thường vi phạm điều khoản hỗ trợ.
Khi không còn lựa chọn nào khác, nên giới hạn thiệt hại: chỉ đọc chứ không ghi, đọc từ bản sao chỉ-đọc thay vì cơ sở dữ liệu đang chạy, gói toàn bộ truy vấn vào một lớp riêng để khi cấu trúc bảng đổi thì chỉ sửa một chỗ, và ghi vào tài liệu rằng đây là giải pháp tạm. Một khoản nợ được ghi sổ thì còn trả được; khoản nợ không ai nhớ mới gây vỡ trận.
Đồng bộ theo lô hay theo sự kiện
Đồng bộ theo lô nghĩa là cứ đến giờ thì lấy tất cả thay đổi kể từ lần trước. Cách này đơn giản, dễ chạy lại khi lỗi, và phù hợp với dữ liệu không cần tức thời như danh mục sản phẩm hay bảng giá. Điểm yếu là độ trễ bằng đúng chu kỳ chạy, và khi một lô lỗi giữa chừng thì phải xác định rõ đã xử lý tới đâu.
Đồng bộ theo sự kiện nghĩa là mỗi khi có thay đổi, hệ thống nguồn phát đi một thông báo và bên nhận xử lý ngay. Dữ liệu gần như tức thời, phù hợp với những việc mà độ trễ gây khó chịu trực tiếp cho khách hàng như trạng thái đơn hàng hay tồn kho. Đổi lại, cách này đòi hỏi kỷ luật cao hơn: thông báo có thể đến trùng nên bên nhận phải xử lý sao cho chạy hai lần vẫn ra một kết quả, và có thể đến sai thứ tự nên cần mốc thời gian để so sánh.
Trên thực tế, nhiều hệ thống dùng cả hai: theo sự kiện cho luồng chính, và một lượt đối soát theo lô hàng đêm để phát hiện những gì đã lệch. Dù chọn cách nào, cũng cần một màn hình cho biết lần đồng bộ gần nhất, bao nhiêu bản ghi thành công và thất bại. Tích hợp không có chỗ quan sát là tích hợp chỉ được phát hiện hỏng khi người dùng gọi điện phàn nàn.
Nên làm gì tiếp theo
Trước khi bắt đầu, hãy lập danh sách các hệ thống cần nối và với mỗi hệ thống ghi rõ bốn điều: nó có API không, ai có thẩm quyền quyết định về nó, dữ liệu nào cần chảy theo chiều nào, và độ trễ bao nhiêu là chấp nhận được. Bảng đó thường cho thấy phần lớn nhu cầu chỉ cần đồng bộ theo lô. Ưu tiên giải pháp sạch cho luồng sẽ sống lâu, chấp nhận giải pháp tạm cho luồng sắp bị thay thế, và viết ra giấy vì sao chọn như vậy.
