付费课程, 订阅后即可观看

多租户架构 - 分库分表

14 集视频
1小时27分钟

本期Laravel 多租户系统分库分表视频教程咱们看一看如何将数据库辅助工作封装得更为优雅便利,至于文件系统的分离,我早期的视频中已经介绍过,因此不再重复介绍,缓存系统的分离也比咱们想象的简单得多,只需要使用tag完成即可,都非常容易搞定,剩下的工作,你自己上战场吧。

stoa 2019.12.22 06:56

老哥厉害啊 下个课程是什么

国营 2019.12.22 07:09

休息两天,这个系列差点搞死我,接下来写书去了

haohexin 2020.02.22 08:53

分库分表之前的了解只停留于负载均衡如果数据库的读写压力很大时,项目中也没有接触过这样的需求,一套课程看下来感觉眼界进一步拓宽了,感谢老哥的课程,同时也越发觉得laravel在解决问题的时候实在是太方便了,不过也好奇 老哥的经历 这个系列的起源 是在项目中遇到过这样的实战经历 还是觉得这是一般人容易忽略的地方 ?

国营 2020.02.22 09:12

这个跟是不是laravel没多大关系,这是一种思路和策略,很多人不会想到这种方式,使用这种方式也可以为以后不同租户启用二级域名或专属域名预留扩展空间!这个系列产生是因为有用户想知道分库分表怎么做,我就借着多租户系统实现了一下,对于多租户系统来说,这是非常普遍的一种策略和架构方式,大部分用户只是停留在设计模式上,对架构模式领域比较欠缺,不知道也很正常!

itgou 2020.06.16 10:45

厉害了!! 我还想问个问题,对于数据量大的表,按时间进行水平分表,比如每个月一个表,这种业务场景,如何处理更加优雅呢? 还想说一句,很庆幸我买了终身版的,哈哈,最近正在做一个api项目,你视频里面的很多内容,我都用上了

国营 2020.06.16 11:32

哈哈,那钱就花的值了,按月分表应该没多少公司会用到了,这个系列录过啥我都忘了,我下来看这个专题我要不要录第二个系列吧,把其他的分表策略也讲一讲,只是有机会用到的人真的太少了。

itgou 2020.06.16 14:02

对对,就是分表策略。公司做设备管理后台,设备需要频繁上报数据,每条数据都需要存记录,设备量大了,就不能往一个表放了,不然查询效率低啊

国营 2020.06.16 14:44

不是吧,公司都做到这种程度了,这方面的技术积累应该有吧? 技术负责人难辞其咎啊,你也可以把不同的设备映射成“租户”这种方式,如果按月分表的话,策略其实也不难,向 ID (或者添加另一个唯一标示字段)开刀,ID 根据时间规则进行生成, 这样插入的时候就插入到指定的表格,查询整个月份的时候也比较简单,查询单条信息的时候,先解析ID,解析后就可以获取到是哪张表,再获取就行了

itgou 2020.06.17 00:03

有道理,不过还是希望推出一套讲分表策略的课程,解决问题是第一步,优雅的解决才符合laravel的思想,哈哈

fengdie 2020.07.12 08:28

请教一下,我用户使用JWT进行认证,然后公用.evn文件里面的JWT_SECRET配置,我发现把租户1的token,拿到租户2那边使用,居然登录成功了!!!! 目前只能想办法对进行办法的token管理,加上租户id进行隔离

国营 2020.07.14 00:32

抱歉现在才回复,回了农村老家,一个本家长辈过世了,一直在忙白事。有token当然能登录啊,这就是用户或者说租户的凭证。隔离的工作确实是需要进行的,但是核心并不是隔离用户,而是将不同租户的管理者可以访问的部分隔离开,如果租户的管理者可以访问别的租户的后台修改数据那就麻烦了。

徐博 2021.03.24 09:02

如何通过不同的域名确认不同的租户呢?并且让不同的租户使用不同的路由?

国营 2021.03.24 09:27

子域名可以做,核心的原理就比较简单了,

Route::domain('{account}.example.com')-&gtgroup(function () {

Route::get('user/{id}', function ($account, $id) {

//

});

});

借助这种方式就可以把account映射成不同的租户,他们的路由系统还是统一的,只不过访问的时候访问专属自己的数据就行了。

徐博 2021.03.26 08:05

但是这不是要提前知道这些域名么?如果我要把域名信息保存到数据库中。查询好数据库之后在注册相应的路由呢 ?

国营 2021.03.26 08:28

是的,域名是要提前知道的,这就是为什么商家入驻前都有一个申请的过程,通过审核的才可以拥有自己的子域名,这个映射信息需要保存到公共数据库中,并非保存到他专属的独立数据库中。

ByHenry 2021.04.07 12:53

1

stoa 2022.03.13 05:35

如果产品放租户各自的表,那首页要展示不得到各库找

1、把各租户的产品表冗余份到底库

2、各租户的产品表全存底库,产品表加个租户id

老哥你觉得哪种方案好?

国营 2022.03.14 02:30

你理解错了,多租户系统有不同的运行模式:

一个是完全独立的模式,租户们自己去上传自己的商品,我什么业务都不做,我只是把系统租用给租户使用,非常纯洁的租赁关系。

二是我自己也有业务,利用商户的产品做推广和竞价排名,就像淘宝,我自己什么产品都没有,我就是把租户的产品做展示,卖排名做引流然后卖,还可以收取额外的佣金。这种模式核心是最竞价服务,把竞价逻辑处理好,不需要像租户的子系统那样保存产品信息,是完全不一样的处理逻辑。

这部分可以找一些电商类的书籍好好研究一下,离开代码,多熟悉熟悉核心业务,看看他们的事业群都是如何划分的,企业的业务架构决定了产品的最终架构,不是由技术决定的。

微信扫码登录