Từ MongoDB sang Postgres
Bài viết này nói về điều gì?
Khi phỏng vấn cho một vị trí tại một công ty, tôi được yêu cầu trả lời câu hỏi sau: Bạn có thể mô tả vấn đề khó nhất bạn đã giải quyết không? Tóm lại, vấn đề khó nhất mà tôi đã giải quyết xảy ra khi tôi làm việc tại eBay, nơi tôi đã di chuyển một trong những dự án nội bộ lớn của eBay từ việc sử dụng MongoDB sang Postgres trong năm 2023. Tuy nhiên, câu hỏi này thực sự khiến tôi suy ngẫm về cách tôi đã giải quyết vấn đề khó khăn này và cho phép tôi nhìn lại hành trình trở thành lập trình viên của mình. Vì vậy, tôi đã viết một câu trả lời rất chi tiết và kỹ lưỡng cho câu hỏi đó, và tôi muốn chia sẻ câu trả lời đó trên trang web của mình.
Câu hỏi là gì?
Bạn có thể mô tả vấn đề khó nhất bạn đã giải quyết không? Vui lòng trả lời trong dưới 4 đoạn và cho chúng tôi biết:
- Bạn đã làm gì
- Điều gì khiến nó khó khăn
- Bạn đã học được gì từ trải nghiệm này
- Bạn đã phát triển như thế nào từ kết quả đó
Phản hồi của tôi là gì?
1 - Bạn đã làm gì
Trong sự nghiệp của tôi hiện tại, vấn đề khó nhất tôi giải quyết xảy ra khi làm việc ở vị trí hiện tại tại eBay. Hiện tại tại eBay, nơi tôi được thuê thông qua Hitachi Vantara, tôi phát triển và duy trì một công cụ nội bộ có tên Hệ thống Quản lý Lưu trữ hoặc STMS. STMS là một công cụ được nhóm Service & Storage Infrastructure (SSI) của eBay sử dụng để theo dõi và quản lý thiết bị trên các trung tâm dữ liệu của eBay. STMS cho phép một kỹ sư giám sát các chỉ số của nhiều mảng lưu trữ, switch, host, nhóm đĩa, cụm và cơ sở dữ liệu. Cũng như xử lý cảnh báo cho switch và mảng lưu trữ và dễ dàng cho phép một kỹ sư hoàn thành các tác vụ nâng cao như phân bổ host. STMS tiếp nhận hơn 1,5 triệu chỉ số mỗi phút, chiếm lĩnh cho hàng chục/hàng trăm mảng, switch, host, nhóm đĩa và cụm trên các trung tâm dữ liệu của eBay. Nó đóng vai trò là một công cụ quan trọng cho nhóm SSI để giám sát và quản lý hạ tầng lưu trữ của eBay, điều thiết yếu cho dịch vụ cốt lõi và mô hình kinh doanh của eBay. Biết tất cả điều này, vấn đề khó nhất mà tôi phải giải quyết trong thời gian làm việc tại eBay là di chuyển STMS từ việc sử dụng cơ sở dữ liệu MongoDB sang sử dụng cơ sở dữ liệu Postgres.
2 - Điều gì khiến nó khó khăn
Điều làm cho vấn đề này trở nên khó khăn là MongoDB và Postgres về cơ bản là những cơ sở dữ liệu khác nhau. MongoDB là cơ sở dữ liệu dựa trên tài liệu (NoSQL), có nghĩa là dữ liệu được lưu dưới dạng JSON trong một collection (giống như các tài liệu trong một tủ hồ sơ), và Postgres là cơ sở dữ liệu quan hệ (SQL), có nghĩa là dữ liệu được lưu dưới dạng các hàng trong một bảng (giống như trong một bảng tính). Ngoài ra, toàn bộ backend của STMS được xây dựng để xử lý và quản lý dữ liệu dưới dạng JSON, sử dụng các gói chỉ tương thích với MongoDB cho các thao tác cơ sở dữ liệu. Thêm vào đó, trong quá trình di chuyển này, không được phép có gián đoạn và gần như tất cả các tính năng phải tiếp tục hoạt động do tầm quan trọng của STMS như một công cụ nội bộ. Toàn bộ việc di chuyển này phải được hoàn thành trong vài tháng, không có gián đoạn, và không có kế hoạch rõ ràng cho việc thực hiện. Tôi cũng không có nhiều kinh nghiệm với Postgres trước đó và, cùng với tất cả đồng nghiệp của mình, không có kinh nghiệm trong việc di chuyển một codebase kế thừa lớn từ cơ sở dữ liệu NoSQL sang SQL.
3 - Bạn đã học được gì từ trải nghiệm này
Việc di chuyển mã nguồn STMS từ MongoDB sang Postgres đã được hoàn thành thành công mà không có gián đoạn trong khi vẫn duy trì hầu hết các tính năng và chức năng. Điều này đòi hỏi nghiên cứu sâu rộng, học hỏi, kiểm thử và khắc phục sự cố. Tôi đã tái cấu trúc các cấu trúc dữ liệu của chúng tôi để hoạt động hiệu quả hơn với cơ sở dữ liệu quan hệ và phát triển các gói mới để thay thế những gói mà chúng tôi phụ thuộc vào nhưng không tích hợp được với Postgres. Tổng thể, việc di chuyển diễn ra suôn sẻ và không có lỗi thực sự nào vượt quá mong đợi của tôi. Trong suốt quá trình này, tôi học được rất nhiều. Về mặt kỹ thuật, tôi có được hiểu biết tốt hơn về Postgres, SQL, cây phân tích cú pháp (parse trees), ORMs, Sequelize, Prisma, trình xây dựng truy vấn, kiểm tra tương đương, cấu hình cơ sở dữ liệu chính-dự phòng, và kiểm thử đơn vị liên quan đến cơ sở dữ liệu. Về cơ bản, tôi học được cách phân tách một vấn đề phức tạp thành các phần nhỏ hơn một cách hiệu quả hơn và triển khai các giải pháp hiệu quả cho những phần đó. Thêm vào đó, tôi học được cách làm một nhà lãnh đạo và dẫn dắt dự án này đến kết luận mặc dù phải đối mặt với nhiều hạn chế, trở ngại và những điều chưa biết.
4 - Bạn đã phát triển như thế nào từ kết quả đó
Tôi bắt đầu sự nghiệp trong lĩnh vực robot trong thời gian học đại học nhưng đã chuyển sang phát triển web khi tôi nhận được công việc tại eBay, bước vào một lĩnh vực mà tôi không có kinh nghiệm trước đó. Sự chuyển đổi này đã tạo nền tảng cho một sự nghiệp được định hình bởi việc học tập liên tục và khả năng thích nghi. Thách thức di chuyển STMS từ MongoDB sang Postgres là một bước nhảy quan trọng trong sự nghiệp của tôi, đóng góp rất nhiều cho sự phát triển chuyên môn của tôi. Nó không chỉ là việc làm sâu hơn hiểu biết về cơ sở dữ liệu hay nâng cao kỹ năng giải quyết vấn đề. Dự án này đã đẩy tôi vào lãnh thổ mới, đòi hỏi lập kế hoạch tỉ mỉ và cam kết không gián đoạn. Dẫn dắt việc di chuyển mà không có kinh nghiệm trước về các chuyển đổi cơ sở dữ liệu quy mô lớn, tôi học được giá trị của giao tiếp rõ ràng, làm việc nhóm và phân tách các thách thức phức tạp thành các phần có thể quản lý được. Trải nghiệm này mở rộng kỹ năng kỹ thuật của tôi và cũng tăng cường sự tự tin, hướng tới những mục tiêu và dự án tham vọng hơn. Cột mốc này trong sự nghiệp của tôi không chỉ chứng tỏ sự phát triển của tôi như một lập trình viên và người lãnh đạo mà còn như một người giải quyết vấn đề, cho thấy rằng việc đón nhận những điều chưa biết và thành công là chìa khóa cho sự phát triển cá nhân và nghề nghiệp.
Kết luận là gì?
Phản hồi của tôi đã đưa tôi vào vòng hai của quá trình phỏng vấn tại công ty, cho phép tôi có một cuộc trò chuyện dễ chịu với một trong những nhà phát triển của đội, điều đó khá thú vị. Nhưng, chủ yếu, bài tập này cho phép tôi suy ngẫm về vấn đề kỹ thuật thách thức nhất mà tôi đã giải quyết trong sự nghiệp của mình khi làm việc tại eBay. Nó giúp tôi suy nghĩ về sự phát triển của mình như một lập trình viên/kỹ sư, phát triển kỹ năng mới và tăng cường sự tự tin trong việc thích nghi và giải quyết các vấn đề phức tạp.