如何處理試圖成爲軟件即服務的應用程序的實例?我想製作一個可以處理醫生病人的應用程序,並且病人可以輕鬆進行諮詢。如何處理應用程序中的多個用戶|數據?
我的問題是關於如何處理不同的醫生與他們的客戶端,以便在未來可以擴展應用程序,並在醫生的客戶不會與數據庫中其他醫生客戶混合。
有沒有辦法單獨的應用程序來處理這個實例,由醫生單獨的數據庫?
我能做到這一點與Ruby on Rails的?
什麼是做到這一點的最好辦法?我不知道,我覺得有點失去了在這個問題上。
乾杯
如何處理試圖成爲軟件即服務的應用程序的實例?我想製作一個可以處理醫生病人的應用程序,並且病人可以輕鬆進行諮詢。如何處理應用程序中的多個用戶|數據?
我的問題是關於如何處理不同的醫生與他們的客戶端,以便在未來可以擴展應用程序,並在醫生的客戶不會與數據庫中其他醫生客戶混合。
有沒有辦法單獨的應用程序來處理這個實例,由醫生單獨的數據庫?
我能做到這一點與Ruby on Rails的?
什麼是做到這一點的最好辦法?我不知道,我覺得有點失去了在這個問題上。
乾杯
由於您的問題相當廣泛,我必須相應地回答。
-
什麼你問的是一些所謂的"multi tenancy":
軟件多租戶是指一個軟件的單個實例的服務器上運行,並提供多個租戶的軟件架構。租戶是以軟件實例的特定權限共享訪問權限的一組用戶。
這絕對是開發團隊的境界;你需要幾個組件才能使它工作,哪個Rails不是真的是裝備的。
話雖如此,有一種流行的方式來實現它Apartment
& PGSQL schemas。
-
真實多租戶應該有獨立的計算配置,用自己的資源和數據池; Rails只能在一臺服務器上運行,並且無需大規模黑客攻擊 - 一個數據庫。
如果您想創建一個單獨處理醫生的系統,您需要查看範圍您的數據。這是PGSQL模式做到:
#config/routes.rb
scope constraints: SubDomain do
resources :patients
end
#lib/sub_domain.rb
module SubDomain
def initializer(router)
@router = router
end
def self.matches?(request)
Doctor.exists? request.subdomain
end
end
上面給你subdomains(作用域的最基礎級別),這將允許您使用以下命令:
#app/models/doctor.rb
class Doctor < ActiveRecord::Base
has_many :patients
end
#app/models/patient.rb
class Patient < ActiveRecord::Base
belongs_to :doctor
end
#app/controllers/patients_controller.rb
class PatientsController < ApplicationController
before_action :set_doctor
def index
@patients = @doctor.patients
end
def show
@patient = @doctor.patients.find params[:id]
end
private
def set_doctor
@doctor = Doctor.find request.subdomain
end
end
以上將允許您訪問http://1.doctor.com/patients
看到所有的患者對於醫生:
#app/views/patients/index.html.erb
<% @patients.each do |patient| %>
<%= patient.name %>
<% end %>
-
當然,以上是一個基本的例子,既沒有數據庫應用程序級別的安全性來維護data integrity。
多租戶(使用Rails)的主要挑戰是儘可能地創建一個防水系統。
第一步是不要擔心它。一個合理的數據庫配置將允許您使用包含數百萬行的表,然後您甚至需要考慮分割數據或應用程序。在你達到這一點之前,你會遇到很多其他限制你的規模的瓶頸。花費你的時間和精力(先用實際用戶創建一個產品),避免過早優化來解決你沒有的性能問題。
一旦你需要考慮分片你絕對有選擇的Rails應用程序(https://blog.engineyard.com/2009/a-quick-primer-on-sharding-for-ruby-on-rails是一個很好的介紹)。設計應用程序和數據模式時記住分片也會有所幫助。尋找可能阻止你將用戶羣和他們的數據彼此隔離的依賴關係。當你有共享依賴關係尋找機會提取可以獨立於系統其餘部分進行擴展的服務時。
在數據庫級別,我認爲https://github.com/thiagopradi/octopus是對Active Record模型進行分片的最流行的方法之一,但當然不是Rails應用程序的唯一選項。
手頭的問題不是分享,而是多租戶。 –
@MichalSzyndel multitenency也可能是一個問題,但這個問題在我看來似乎是在問數據隔離和水平縮放。考慮到這個問題的內容,在這種情況下哪個更具相關性並不清楚。如果您對多種解決方案有想法,請添加答案。 – Jonah
這被稱爲多租戶。這對於沒有經驗的開發人員來說並不是什麼嘗試。我會推薦https://leanpub.com/multi-tenancy-rails。 – fylooi
[在Rails 3中處理多租戶的最佳方法]的可能的副本(http://stackoverflow.com/questions/3776593/best-way-to-handle-multitenancy-in-rails-3) –
fylooi,Michal Szyndel,謝謝你的答案我會更多地瞭解它 –