当前位置: 首页 > 软件库 > 大数据 > 数据存储 >

tmaic saas

多租户解决方案
授权协议 未知
开发语言 Google Go
所属分类 大数据、 数据存储
软件类型 开源软件
地区 国产
投 递 者 萧丁雨
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

tmaic saas 多租户(Multi-Tenant ),即一个Tenant,一个Database“的数据存储方式。隔离级别最高、最安全,说到底是要解决数据存储的问题,golang语言saas框架唯数不多的框架之一。

软件架构

数据模型

以下是例子

package models

import (
	"github.com/pangxianfei/framework/helpers/m"
	"github.com/pangxianfei/framework/helpers/ptr"
	"github.com/pangxianfei/framework/helpers/zone"
	"github.com/pangxianfei/framework/model"
)
type User struct {
    model.BaseModel
    ID        *uint      `gorm:"column:user_id;primary_key;auto_increment"`
    Name      *string    `gorm:"column:user_name;type:varchar(100)"`
    Email     *string    `gorm:"column:user_email;type:varchar(100);unique_index;not null"`
    Password  *string    `gorm:"column:user_password;type:varchar(100);not null"`
    CreatedAt *zone.Time `gorm:"column:user_created_at"`
    UpdatedAt zone.Time  `gorm:"column:user_updated_at"`
    DeletedAt *zone.Time `gorm:"column:user_deleted_at"`
}

func (user *User) TableName() string {
    return user.SetTableName("user")
}

func (user *User) SetNameAttribute(value interface{}) {
    user.Name = user.Email
}

func (user *User) GetUpdatedAtAttribute(value interface{}) interface{} {
    return user.UpdatedAt //查询后这里可以其他处理,如格式化处理,如果是时间time 可以格式成 2020-10-01 18:00:20
}

生成公钥文件

tmaic.CreateRsaKey()

系统函数

加密解密函数

公钥加密

s,_:= tmaic.Encryption("Golang使用RSA进行公钥加密私钥解密,私钥加密公钥解密的实现")

私钥解密

dd,_ := tmaic.Decrypt(s)

私钥加密

s,_:= tmaic.PrivateEncryption("Golang使用RSA进行公钥加密私钥解密,私钥加密公钥解密的实现")

公钥解密

dd,_ := tmaic.PublicDecrypt(s)

校验密码是否正确

user.Password:用户密码(已加密)

requestData.Password:要校验的密码(明文)

if !crypt.BcryptCheck(user.Password, requestData.Password) error{
    
    return "返回提示信息"
}

注意事项:如果要使用 NSQ 队列的,不用将包注释

导入包:

"github.com/pangxianfei/framework/queue"

"tmaic/app/events"

"tmaic/app/jobs"

"tmaic/app/listeners"

以下去掉注释即可:

//queue.Initialize()

//jobs.Initialize()

//events.Initialize()

//listeners.Initialize()

NSQ安装请参考:https://nsq.io/overview/quick_start.html

nsq启动

1.nsqlookupd

2.nsqd --lookupd-tcp-address=127.0.0.1:4160

3.nsqadmin --lookupd-http-address=127.0.0.1:4161

执行以上命令后:http://127.0.0.1:4171 可查看监控台

队列demo (test)

*** 详情见工程项目下

入列(我们常说的写入 topic,生产者),以下写入topic例子

	test := events.Test{}

	testparam := &pbs.Test{
		Id: uint32(userId),
	}
	test.SetParam(testparam)

	if errs := hub.Emit(&test); errs != nil {
		log.Info("user test", tmaic.Output{"event": test, "errors": errs})
	}

出列(启动一个观察者)

 
 
func init() {
	hub.Register(&Test{})
}

type Test struct {
	user models.User
	hub.Listen
}

func (user *Test) Name() hub.ListenerName {
	return "add-test" //监听器名称 后面我们会用到
}

func (user *Test) Subscribe() (eventPtrList []hub.Eventer) {
	log.Debug("Subscribe-test")
	return []hub.Eventer{
		&events.Test{},
	}

}

func (user *Test) Construct(paramPtr proto.Message) error {
	/** 第一执行这里
	  业务代码
	*/
	log.Debug("Construct-test")
	return nil
}
func (user *Test) Handle() error {
	/**第二执行这里
	 最终实现业务逻辑 :比如发邮件、消息推送、短信通知等 这些业务通常封装在 service 层,这里只是建议
	*/
	
	// 更新
	t := users.UserService.Get(cast.ToInt64(user.ID))
	t.Email = user.Email //test 其实没有这个字段 根据需要自行组织
	t.Name = user.Name   //test 其实没有这个字段 根据需要自行组织
	_ = users.UserService.Update(t)
	
	log.Debug("Handle-test")
	return nil
}

实现消费,在根目录与main.go同级,

go run artisan.go queue:listen test-add //test-add 是Name() 返回的 配合supervisor进程守护

类型转化助手

ToInt64

cast.ToInt64()

ToInt32

cast.ToInt32()

ToFloat32

cast.ToFloat32()

更多方法 查看cast包

打印

tmaic.Dump(mugs)

    mugs := map[string]interface{} {
        "password2" : map[string]string {
        "password3" : "The name cannot be empty",
        },
    }
    
    //效果
    {
        "password2": {
            "password3": "The name cannot be empty"
        }
    }
    
 

性能测试

虚拟机环境下:

压力测试

ab -c 1000 -n 5000 -k http://127.0.0.1/all

安装教程

  1. git clone git@gitee.com:pangxianfei/tmaic.git
  2. go mod init // 初始化go mod 包管理
  3. go mod tidy // 加载依赖包
  4. go mod vendor // 将依赖包拷贝到项目目录中去
  5. go run main.go
  • SaaS简介 SaaS是Software-as-a-Service(软件即服务)的简称,“软件即服务”?是不是有点拗口?其实你就理解成为“按需租用别人提供的软件服务”就可以了,它是一种软件交付模式。SaaS这个说法是区别于以往软件购买和交付方式而提出来的。在以前,你公司要使用一款软件来管理财务记账的时候,那你要向软件提供公司说明需求、支付购买软件的钱并提供安装软件的硬件环境,然后软件公司就会上门安

  • 超管: 菜单管理(应用)(只有超管有权限), app管理(tab页),新建app,eg:维护: code,名称,icon,等(app分:共用和私用,共有:所有租户都会有,eg:设备管理,配置管理等。) 同步app到uop(产品中心-产品维护&产品列表),然后在统一运营上购买该app(订单中心-订单列表,购买)。 购买步骤:选择租户,选择产品,价格,支付。 saas中就可以看到自己的应用了。 新建菜

  • 想想身边的认识的朋友只要用计算机,就至少有一个IM,有甚者有N个,我自己常用的就有5个,不是帐号,是种类:平常上班和同事们沟通用msn,和一些发烧友用gtalk,与以前的同学用QQ聊天,上淘宝买东西用旺旺,在公司内用任意通互相传文件或谈工作啥的....  当IM成为网民必备的工具,IM 也就成了SaaS的最佳入口,IM Application 就可以大行其道,现在大家都把这种东西叫机器人,但是我更

  • IaaS(Infrastructure as a Service):基础设施即服务。   拥有了IaaS,就可以将引荐外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,也可以选择租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。(服务器及硬件设备)   PaaS(Platform as a Service):平台即服务。   有时候也被叫作中间件。所有的开发

  • 1、举例说明Saas模式:      1.1买断模式(ERP)         以前一款软件,可以买断,即买了后就可以终身使用了,比如当涂网,一个卖PPT模板的网站,买了后可以终身使用。      1.2按次、月、日、年收费(SaaS)       现在很多软件都推出了按月收费,按年收费,比如喜马拉雅一年收多少钱,共享单车可以按骑车次数收费,也可以按月、季度收费。这种就是SaaS模式。      

  •     SaaS是Software as a Service,软件即服务的缩写。总体来说,SaaS是一种通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。近年来,SaaS的兴

  • SaaS是Software-as-a-service(软件即服务)的简称,是随着互联网技术的发展和应用软件的成熟,而在21世纪开始兴起的一种完全 创新的软件应用模式。它与“on-demand software”(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。它是一种通过Intern

  •   SaaS 2.0   现在都在讲转型。外贸出口加工的转型为内销渠道、品牌、设计;造手机的转型做互联网地图位置服务;软件行业早就呼喊向服务转型多年,IT规划、设计、项目管理、测试、培训、运维等等这些服务也都被客户渐渐接受形成了规模性的收入来源。   而我们今天要思考的是,现在的IT服务形式付费客户依然接受,只要夯实做出专业做出规模,持续复制运营就OK。那么,下一步,我们继续向服务转型,转到哪里去

  • SaaS是Software-as-a-service(软件即服务) SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,向SaaS提供商租赁软件服务。 SaaS 是一种软件布局模型,其应用专为网络交付而设计,

  • 基本概念 SAAS (Software as a service)软件即服务 PAAS (Platform as a service)平台即服务 异同点 SAAS 和 PAAS 都是一种服务 SAAS是一套资源,所有人共享实例和数据,通过权限区分 PAAS是多套资源,由企业独享实例和数据

  • 我们首先来看CRM的定义,它的英文全称是Customer Relationship Management,就是客户关系管理。大多数人认为它是一种管理软件,或者是后台系统,又或者是客户,线索,商机的CRUD,但实际上它是一种管理公司客户以及潜在客户关系,并且保与客户持互动的策略,它可以帮助企业提高盈利的能力。 那什么是SAAS呢?我相信很多老铁是B站或者网易云音乐的会员。 当我们进行会员订阅的时候,

  • IaaS、PaaS 和 SaaS:云服务模型概述 为您的组织选择合适的云服务模型,可以帮助您充分利用预算和 IT 资源。 基础设施即服务 (IaaS)、平台即服务 (PaaS) 以及软件即服务 (SaaS) 均可提供不同级别的控制和管理。了解哪种模型最适合您的需求。 · 基础设施即服务 (IaaS) 为云服务提供硬件,其中包括服务器、网络和存储。 · 平台即服务 (PaaS) 除了提供 IaaS

 相关资料
  • 目前为止,我们已经让用户页面在多租户风格下工作。为使它工作,我们看起来并没有做太多的变化。但请记住,我们正在对一个原来不是多租户的系统作修改。 让我们在 Roles 表应用类似的原则。 再一次,一个租户的用户在不能查看或修改其他租户的角色,每个租户的用户是相互独立工作的。 我们先在 RoleRow.cs 添加 TenantId 属性: namespace MultiTenancy.Administ

  • 本文向大家介绍解释多租户是什么?相关面试题,主要包含被问及解释多租户是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:我们可以轻松地将Kafka部署为多租户解决方案。但是,通过配置主题可以生成或使用数据,可以启用多租户。此外,它还为配额提供操作支持。

  • 问题内容: Tl; dr:有没有方法可以覆盖默认行为? 在我的django项目中,我有很多网址,例如 允许使用以下网址 这样,我便可以使用自定义中间件来修改请求,以包括基于使用我的网站的公司的一些特定详细信息 这一切工作正常,除了当Django试图破译与完整路径和… 它似乎作为正则表达式的默认匹配返回。由于该方法具有用于映射到的转义映射 该标签我已经能够覆盖更换正确的公司名称,我想知道是否有类似的

  • 我使用和配置了hibernate的多租户。我还编写了一个过滤器,截取url并确定谁是租户。 我有几个问题/困惑。 > 这种方法合适吗?我也想过在用户会话中存储租户标识,但我认为这不是一个好主意。(在过去,我在会话中存储东西时遇到过问题,在某些情况下有其局限性)。 我对这两种方法感到困惑,请问还有第三种方法吗。对于多租户,我选择了hibernate的策略。

  • 我正在AWS上开发一个多租户应用程序。我正在努力在Cognito上实现多租户。我的第一个方法是为整个应用程序使用一个认知用户池和一个标识池。 这个想法是为每个用户角色创建一个认知组,并将它们与各自的IAM角色相关联。工作正常。当使用组进行角色分配时,我将身份池经过身份验证的角色选择配置为“从令牌中选择角色”。 但是,对于20个租户,将需要40个组,每个用户池的认知组限制为25个。 每个租户使用一个

  • 由于我们现在有一个行为处理仓储的详细信息,我们只需在行(rows)实现 IMultiTenantRow 接口并添加 TenantId 属性。 从 SupplierRow.cs 开始: namespace MultiTenancy.Northwind.Entities { //... public sealed class SupplierRow : Row, IId

  • 我们正面临着解决这个问题的艰难时刻!我们正在尝试在不使用默认租户的情况下为Spring Boot服务使用MTA。这意味着当当前上下文中没有租户时,我们希望从我们的CurrentTenantIdentifierResolver实现返回null。这在我们用JavaEE+Hibernate+Deltaspike数据构建的其他服务中运行良好,但在Spring服务启动时失败。 异常消息如下:“由:org.h

  • 全新的,查看wso2 API管理器1.8.0。我为一家拥有多个组织/团队的公司工作,所以建立多租户似乎是合乎逻辑的选择。 按照《快速入门指南》,我首先创建了一个新租户,给它一个“dev.api.myorg.company.net”域,添加了一些用户,我可以登录。我添加了一个API。 我能够使用商店中列出的URL命中endpoint: http://wso2server。公司net:8280/t/d