- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我目前正在用 Go 编写一项服务,我需要处理多个租户。我已经决定使用单一数据库、共享表方法,使用“tenant_id”鉴别器来分离租户。
服务的结构如下:
gRPC server -> gRPC Handlers -
\_ Managers (SQL)
/
HTTP/JSON server -> Handlers -
两台服务器,一台 gRPC(管理)和一台 HTTP/JSON(公共(public) API),每台服务器都在自己的 go-routine 中运行,并有各自的处理程序,可以利用不同管理器的功能。经理们(我们称其为“库存经理”)都在不同的根级包中。据我所知,这些是我的领域实体。
对此我有一些疑问:
我找不到任何支持 Multi-Tenancy 的 Go ORM。在 sqlx 包之上编写我自己的可能是一个有效的选择吗?
future 的其他服务也将需要 Multi-Tenancy 支持,所以我想无论如何我都必须创建一些库/包。
今天,我通过为公共(public) API 服务器使用 ResolveTenantBySubdomain 中间件来解析租户。然后,我将已解析的租户 ID 放在上下文值中,该值随调用管理器一起发送。在管理器的不同方法中,我从上下文值中获取租户 ID。然后将其用于每个 SQL 查询/执行调用,或者如果租户 ID 丢失或无效则返回错误。我什至应该为此目的使用上下文吗?
在gRPC服务器上解析租户,我相信我必须使用UnaryInterceptor函数来进行中间件处理。由于 gRPCAPI接口(interface)只会被其他后端服务访问,我想这里不需要通过子域解析。但是我应该如何嵌入租户 ID?在标题中?
真的希望我问的是正确的问题。问候,卡尔。
最佳答案
I cannot find any ORM for Go that supports multiple tenants out there. Is writing my own on top of perhaps the sqlx package a valid option?
Go 中的 ORM 是一个有争议的话题!有些 Go 用户喜欢它们,有些则讨厌它们并且更喜欢手动编写 SQL。这是个人喜好问题。在这里询问特定的库建议是题外话,无论如何,我不知道任何 Multi-Tenancy ORM 库——但是没有什么可以阻止你使用 sqlx
的包装器(我工作每天在执行此操作的系统上)。
Other services in the future will require multi-tenant support too, so I guess I would have to create some library/package anyway.
以适合您的编程和接口(interface)模式的方式从这些内部服务中抽象出这种行为是有意义的,但这里没有进一步的细节来更具体地回答。
Today, I resolve the tenants by using a ResolveTenantBySubdomain middleware for the public API server. I then place the resolved tenant id in a context value that is sent with the call to the manager. Inside the different methods in the manager, I get the tenant id from the context value. This is then used with every SQL query/exec calls or returns a error if missing or invalid tenant id. Should I even use context for this purpose?
context.Context
主要是关于取消,而不是请求传播。根据documentation,您的使用是可以接受的对于 WithValue
函数,它是 widely considered使用当前实现的 context
包来传递值的代码味道不好。与其使用缺乏类型安全和许多其他属性的隐式行为,不如通过将租户 ID 传递给相关函数调用,在下游数据层的函数签名中显式显示?
Resolving the tenant on the gRPC server, I believe I have to use the UnaryInterceptor function for middleware handling. Since the gRPC API interface will only be accessed by other backend services, i guess resolving by subdomain is unneccessary here. But how should I embed the tenant id? In the header? [sic]
gRPC 库不会对您的设计选择固执己见。您可以使用 header 值(将租户 ID 作为“环境”参数传递给请求)或将租户 ID 参数显式添加到需要它的每个远程方法调用。
请注意,以这种方式在您的服务之间传递租户 ID 会在它们之间创建外部信任 - 如果服务 A 发出服务 B 的请求并使用租户 ID 对其进行注释,则您假设服务 A 具有执行必要的访问控制检查以验证该租户的用户确实在发出请求。在这个简单的模型中没有任何东西可以防止流氓服务 C 向服务 B 询问有关某个任意租户 ID 的信息。另一种实现方式将实现更复杂的无人信任政策,由此为每个服务提供足够的访问控制信息,以就是否应满足特定租户范围内的特定请求做出自己的政策决定。
关于sql - Golang 中的 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559850/
对于我积极维护的客户基于 Web 的 CRM 的分支机构数量不断增加的 Multi-Tenancy ,我需要做出一个艰难的数据库设计决策。 我很早就决定为每个分支使用具有单独数据库的单独应用程序,因为
在 Spring 3 应用程序中,我试图通过 Hibernate 4 的原生 MultiTenantConnectionProvider 实现 Multi-Tenancy 。和 CurrentTena
在neo4j中实现 Multi-Tenancy 的最佳方法是什么? 我看过 Tinkerpop 和 Spring Data。 我有多个客户端,我想将客户端信息存储在自己的数据库中以确保安全。 我不想使
我正在一个小团队工作,设计一个流程管理系统,供同一行业内的几个不同客户使用。系统的目标和客户的高水平要求非常相似。然而,正如预期的那样——一旦我们开始深入挖掘他们的个人需求,我们最终会为每个客户进行一
我们正在开发一个“中间层”来替换现有的业务逻辑/数据访问层。我们面临的设计问题之一是,我们需要以一种允许多个客户的数据库和/或中间层部件作为我们托管产品的一部分存在于同一服务器上的方式进行设计。托管环
我有一个非常简单的项目,其中包含一个具有以下 models.py 的应用程序: class UserAccount: user = models.OneToOneField(User)
在我的应用程序中,我想为不同的客户实现 Multi-Tenancy 支持。 我有一个节点树,希望为不同的客户实现私有(private)树的支持。 Neo4j 是否支持 Multi-Tenancy ,或
我似乎找不到任何关于具有多个数据库的 Grails Multitenancy(每个租户一个)的更新资源/指南、插件或示例。我目前被困在 https://grails.org/plugin/multi-
在我的 Laravel 项目中,我使用了 Multi-Tenancy 。对于项目相关的工作,我正在创建一个 laravel 自定义 artisan 命令。我正在尝试在我正在创建的那个 artisan
我想实现 OKTA API 来管理 Multi-Tenancy 环境中的身份验证和 SSO。 每个用户都应该链接到一个租户,并且每个租户都应该配置身份验证策略。有没有办法实现这一目标? 最佳答案 Ok
我在网上阅读了几篇关于 Multi-Tenancy (针对 SaaS 应用程序中的不同客户)的文章(即 this 和 that 和 that)。一旦您决定采用基于鉴别器的方法,hibernate do
我有几个客户端使用的数据库。我真的不希望代理增量键值在客户端之间流血。我希望编号从1开始,并且要针对客户。 我将使用tenant_id的两部分组合键以及增量ID。 为每个租户创建增量 key 的最佳方
我正在开发一个定制的CRM解决方案,该解决方案将通过Web/SaaS模型出售。我预计会有数十或数百个客户使用此解决方案。我将使用MS SQL作为数据库引擎。 选项1是拥有一个数据库,并在表上包括一个T
我开始设计 Multi-Tenancy 系统并且已经阅读了这篇文章: http://msdn.microsoft.com/en-us/library/aa479086.aspx 无论如何,我有几个与身
我正在考虑在 Multi-Tenancy 应用程序中使用 Solr,我想知道是否有任何最佳实践或需要注意的事项? 一个特别的问题是每个租户拥有一个 Solr Core 是否有意义。有大量的 Solr
由于我对 redis 还很陌生,因此我正在尝试探索各种选项,看看如何使用 redis 实现 Multi-Tenancy 。 我在 redisLabs 官方页面上阅读了一些文档,看起来 redis 集群
我们有一个应用程序,可以在 Multi-Tenancy 工作区的服务器上执行大量数据繁重的工作。 以下是它所做的事情: 它从不同文件格式的文件加载数据。 根据定义的逻辑执行幂等规则。 执行处理逻辑,例
我们有一个 Multi-Tenancy Azure 广告应用程序,该应用程序在某些其他租户中不可见。是否有允许第三方应用程序的租户级别设置? 我们从 azure cli 运行以下命令来查看 hte 应
我尝试登录 Azure AD Web 应用程序,当我使用租户内的用户登录时,就可以了,但是当登录其他用户时我得到 AADSTS50020:来自身份提供商“live.com”的用户帐户“********
我正在将 Firebase 视为 MVP Multi-Tenancy 应用的后端。该应用程序将为每个租户提供完全白标,每个租户都注册自己的用户群。肯定会有交叉,用户可以注册多个租户,但是我似乎看不到
我是一名优秀的程序员,十分优秀!