如何处理试图成为软件即服务的应用程序的实例?我想制作一个可以处理医生病人的应用程序,并且病人可以轻松进行咨询。如何处理应用程序中的多个用户|数据?
我的问题是关于如何处理不同的医生与他们的客户端,以便在未来可以扩展应用程序,并在医生的客户不会与数据库中其他医生客户混合。
有没有办法单独的应用程序来处理这个实例,由医生单独的数据库?
我能做到这一点与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,谢谢你的答案我会更多地了解它 –