Tôi đã sử dụng Symfony gần 2 năm nay, cho đến nay, mỗi dự án tôi xây dựng được triển khai cụ thể cho từng khách hàng (ví dụ một khách hàng, một cơ sở dữ liệu, một db).SAAS và Đa thuê trong Symfony2?
Cho phép nói rằng tôi có ứng dụng Quản lý dự án mà tôi muốn triển khai cho nhiều khách hàng. Giả sử khách hàng sẽ đi với bất cứ điều gì tính năng mà tôi xây dựng vào hệ thống, nếu tôi triển khai một codebase khác nhau (do đó, một db khác nhau) cho mỗi khách hàng, sau đây là những vấn đề tôi thấy trước:
Đẩy sửa lỗi và nâng cấp sẽ rất đau đớn. Tôi cần phải đẩy nó vào mọi kho lưu trữ mà tôi đã triển khai. Nó sẽ không mở rộng nếu tôi có 50 khách hàng sử dụng cùng một ứng dụng đó.
Quản lý rất đau đớn. Làm thế nào để xây dựng một hệ thống quản trị cho bản thân mình, nơi tôi có thể kéo TẤT CẢ các dự án vào một bảng HTML? Sau khi tất cả, mỗi khách hàng có cơ sở dữ liệu riêng của họ, phải không? Đối với tôi để làm bất cứ điều gì có ý nghĩa với tất cả các hồ sơ của tất cả các khách hàng của tôi, tôi cần một cách để xem xét thông qua tất cả các cơ sở dữ liệu của họ tại một đi, mà .. Tôi không nghĩ rằng Symfony cho phép. (Tôi không chắc chắn)
Sự cố tài khoản người dùng. Nếu người dùng tình cờ làm việc cho nhiều công ty, tất cả họ đều sử dụng ứng dụng Quản lý dự án của tôi, người dùng đó phải đăng ký nhiều lần. (Tôi biết điều này có thể bị phá vỡ nếu tôi sử dụng oauth, nhưng tôi đang cố gắng không đến đó nếu tôi có thể)
Đây là các giải pháp mà tôi đã suy nghĩ và cố gắng ở một mức độ nhất định.
Giải pháp 1
Một cơ sở dữ liệu và một codebase cho TẤT CẢ các khách hàng của tôi. Các dự án sẽ đi theo một bảng, Hóa đơn đi dưới một bảng, tất cả được đánh dấu bởi client_id của riêng họ. Người dùng có thể được chỉ định cho các Dự án nên không cần phải đăng ký nhiều lần.
Điều này không khó để tạo. Nhưng, điều gì xảy ra nếu các khách hàng khác nhau cần các cột khác nhau cho Hóa đơn của họ? Bảng hóa đơn của tôi sẽ tiếp tục mở rộng (với các trường khác nhau mà các máy khách khác nhau muốn) và mỗi hàng có thể chứa nhiều trường rỗng. Chưa kể, thực thể hóa đơn của tôi sẽ phát triển trong kích thước tập tin, và tôi sẽ phải cập nhật database schema mỗi khi một tùy biến mới đến.
Giải pháp 2
Một cơ sở dữ liệu trong đó mỗi khách hàng có tiền tố bảng riêng của họ. Vì vậy, đối với khách hàng A, tôi có thể sử dụng clientA_projects, clientA_invoices, clientA_configuration, vv
Điều này là lý tưởng nếu mỗi khách hàng muốn tùy chỉnh các trường của họ. Nhưng, điều này có nghĩa là tôi cần phải tạo ra các thực thể mới và các lớp biểu mẫu cho mỗi khách hàng mới đi vào hệ thống? Dường như với giải pháp này, tôi cần cập nhật lược đồ cơ sở dữ liệu với mọi ứng dụng khách mới mà tôi nhận được.
Hiện tại, tôi đang thử nghiệm với cơ sở dữ liệu ít lược đồ (mongo và đi văng), mà không cần phải xác định trước lược đồ bảng, tôi có thể triển khai Giải pháp 1 mà không gặp rắc rối. Nhưng tôi vẫn đang thử nghiệm, và có nhiều cách để đi trước khi tôi dám triển khai một ứng dụng sản xuất sẵn sàng, không quen thuộc với các vấn đề của mongo và đi văng với Symfony.
Vì vậy, đây là nơi tôi bị kẹt. Là một lập trình viên tự đào tạo, tôi cảm thấy tôi có rất nhiều lỗ hổng trong kiến thức của tôi rằng yêu cầu điền (trái ngược với một người nào đó từ một nền tảng CS). Không có nhiều nơi trên web nói về Symfony 2 và nhiều người thuê nhà (có thể tôi đang tìm kiếm điều sai). Nếu bất cứ ai có thể chỉ cho tôi một hướng rõ ràng hơn, có lẽ thực hành tốt nhất, dự án ví dụ, tôi sẽ thực sự đánh giá cao nó!
Btw, tôi dự định thực hiện điều này trong phiên bản mới nhất của Symfony (2.3.2 tại thời điểm này).
Cảm ơn bạn trước.
@ Lu0-dezhang là có bất kỳ khả năng nào để bạn có thể chia sẻ kết quả của mình? Tôi đang bắt đầu một ứng dụng SaaS mới bằng cách sử dụng Symfony3 nhưng không có ý tưởng gì về cơ sở dữ liệu và tổ chức dự án Symfony3 cũng như vậy .... khó khăn? – ReynierPM