Bạn có cho mình một dự án khá thú vị. Tôi chưa bao giờ thấy trực tiếp bất cứ ai cố gắng thực hiện một cái gì đó lớn như vậy, ít nhất là trên SQL Server. Càng đọc bài viết của bạn, tôi càng có nhiều câu hỏi ...
Trường hợp xấu nhất là cơ sở hạ tầng khôn ngoan (thực sự là kịch bản trường hợp tốt nhất, khôn ngoan về kinh doanh), bạn cần 10 nghìn cơ sở dữ liệu gấp 2 lần người dùng. Đó là 20.000.000 người dùng. Bạn sẽ không thành công khi cố gắng quản lý thông tin đăng nhập SQL M 20 M. IMO. Chỉ là số lượng lớn trong số họ, xử lý việc chuyển chúng từ máy chủ này sang máy chủ khác, xem ra các xung đột ID và ID không khớp, cộng với tôi không chắc chắn SQL Server sẽ hành xử như thế nào với 20 M hàng trong sys.server_principals. Ngoài ra, ứng dụng web của bạn có thể sẽ muốn kết nối dưới dạng một hoặc rất ít người dùng. IIS không thể gộp các kết nối trừ khi các chuỗi DSN của chúng giống hệt nhau. Một trong những thuộc tính của chuỗi DSN là tên người dùng. Người dùng khác nhau có nghĩa là không gộp.
Bạn sẽ cần phải cuộn sơ đồ thông tin người dùng của riêng bạn. Nó sẽ phải có khả năng tìm ra người thuê thuộc về ai và sau đó mã web của bạn sẽ cần phải chọn cơ sở dữ liệu phù hợp. Siêu dữ liệu người dùng đó rất quan trọng, nó sẽ cần được lưu trữ ở đâu đó, nó sẽ cần được phân cụm hoặc nhân đôi, nó sẽ cần phải nhanh và nó sẽ cần được bảo vệ tốt (từ góc độ bảo mật. IOW, mã hóa nó.). Giả sử rằng SQL thậm chí là một ý tưởng tốt ở đây, tôi sẽ để cơ sở dữ liệu này tránh xa các trường hợp mà người thuê máy chủ. Điều này giúp từ quan điểm bảo mật và từ quan điểm tải, mặc dù tôi đoán rằng một khi người dùng được xác thực và ứng dụng web được dẫn đến cơ sở dữ liệu chính xác trong một trường hợp khác, sẽ không có thêm truy vấn nào về siêu dữ liệu người dùng này liên quan đến điều đó người sử dụng.
Câu hỏi nhanh: hai người dùng khác nhau, thuộc hai người thuê khác nhau, có được phép có cùng tên người dùng không?
Một câu hỏi nhanh khác: Nếu tôi nói với bạn rằng tôi làm việc cho FuBar, Inc., làm sao bạn biết điều đó? FuBar sẽ cung cấp cho bạn một danh sách người dùng và bạn cung cấp cho họ một danh sách tên người dùng, hoặc họ sẽ tự cung cấp?
Bạn sẽ cần phải đi nhiều trường hợp. Nếu thậm chí một phần trong số những người dùng đó quyết định truy cập ứng dụng cùng một lúc, một trường hợp duy nhất sẽ tan chảy. Nó sẽ không có đủ luồng công nhân để chạy tất cả các yêu cầu đó cùng một lúc. Nếu chỉ có 1000 người dùng truy cập vào cá thể của bạn cùng một lúc, nó có thể sẽ hết các luồng công nhân và yêu cầu sẽ bắt đầu xếp chồng lên nhau và chờ đợi. Tôi đã thấy điều này xảy ra; triệu chứng gần đúng là các kết nối mới sẽ không thể đăng nhập vào thể hiện vì không có các luồng công nhân có sẵn để phục vụ chúng. Nếu đây là hành vi rất ngắn, ứng dụng của bạn có thể tồn tại. Nếu không, hoặc ứng dụng của bạn cầu kỳ, người dùng sẽ gặp lỗi.
Ngay cả khi bạn sẽ không có nhiều người thuê để bắt đầu, bạn nên bắt đầu nghĩ về tương lai và tự động hóa bởi vì khi bạn thấy rằng máy chủ của bạn bị sa lầy và có 10 người thuê mới để đưa trực tuyến, thì đã quá muộn và dịch vụ của bạn (và khách hàng của bạn và khách hàng sắp trở thành khách hàng cũ của bạn) sẽ phải chịu đựng cho đến khi bạn viết ra khỏi vấn đề.
Bạn sẽ cần một cách để di chuyển cơ sở dữ liệu xung quanh, từ các máy chủ quá tải đến các máy chủ được tải nhẹ (hoặc mới). Việc bạn có thể có được một cửa sổ thời gian chết hay không sẽ phụ thuộc vào SLA của bạn.
Bạn đang cung cấp một ứng dụng cụ thể, như SalesForce, hay những cơ sở dữ liệu này chỉ là nơi chứa bất cứ thứ gì mà người thuê của bạn muốn đưa vào?
Cơ sở dữ liệu lớn như thế nào? Nếu chúng không lớn, bạn có thể khôi phục từ tệp sao lưu cung cấp mẫu. (Điều này không khác nhiều so với những gì cơ sở dữ liệu mô hình làm, nhưng tôi chưa thấy ai thực sự sử dụng mô hình theo cách tốt kể từ thời của tôi với SQL 6.5.) Một khi mẫu đã được khôi phục thành tên cơ sở dữ liệu mới, bạn có thể sau đó tùy chỉnh cơ sở dữ liệu mới khi cần thiết cho một người thuê cụ thể. Bạn không thể thực hiện các tùy chỉnh trước khi bạn có người thuê, rõ ràng. Nếu cơ sở dữ liệu lớn, bạn có thể thực hiện theo quy trình cơ bản tương tự ngoại trừ bạn thực hiện khôi phục trước thời hạn, trước khi bất kỳ người thuê mới nào cần không gian. Bạn có thể giữ một vài trong số các cơ sở dữ liệu này, có thể là một ví dụ. Nếu bạn giữ quá nhiều, điều này sẽ buộc bạn có thể mua nhiều phần cứng và / hoặc lưu trữ hơn mức bạn cần,
Nếu đây là ứng dụng của riêng bạn, bạn sẽ xử lý các bản cập nhật cho các lược đồ như thế nào? Làm thế nào bạn sẽ giữ các phiên bản của cơ sở dữ liệu thẳng với các phiên bản của mã, nếu bạn đang sử dụng một URL duy nhất vào ứng dụng web của bạn?
Làm thế nào để bạn phát hiện và phá hủy cơ sở dữ liệu không còn sử dụng nữa? Bạn có đợi cho đến khi nhóm A / R của bạn nói rằng ai đó đã không thanh toán hóa đơn của họ trong ba tháng không?
Nếu người thuê đang quản lý quyền, điều đó có nghĩa là họ có một số hiểu biết về hoạt động bên trong của ứng dụng hoặc ứng dụng của bạn có cấu trúc vai trò rất đơn giản. Sử dụng một cái gì đó như Blogger làm ví dụ sơ bộ, người dùng có thể (đọc bài đăng), (đọc bài đăng và đưa ra nhận xét), (... và tạo bài đăng), (... và chỉnh sửa bài đăng của người khác), (... và có thể đặt lại mật khẩu người dùng khác), hoặc (... và bất cứ điều gì). Có một vai trò cho mỗi nhóm quyền khác nhau và gán người dùng cho vai trò này hoặc vai trò khác không quá khó, nhưng bạn không muốn ứng dụng của mình chạy các câu lệnh 'GRANT'. Coi chừng các vai trò có thứ bậc và phụ thuộc vào sự kế thừa, nó có thể gây nhầm lẫn. Nếu bạn đang quảng cáo hoặc hạ cấp người dùng, tôi muốn nói rằng hãy kéo họ ra khỏi tất cả các vai trò liên quan và sau đó thêm họ trở lại với một vai trò mà họ cần. Oh,
Tôi nghĩ rằng tôi chỉ bị trầy xước bề mặt ở đây, và bài đăng này đã quá dài. Những gì bạn thực sự cần là một cuốn sách, hoặc ít nhất là một whitepaper từ một người đã làm điều này. Hầu hết những kẻ đó sẽ không nói chuyện, nếu họ coi đó là một lợi thế cạnh tranh.