国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于SpringBoot實現多租戶架構:支持應用多租戶部署和管理

jf_ro2CN3Fa ? 來源:CSDN ? 2023-06-05 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、概述

1 什么是多租戶架構?

多租戶架構是指在一個應用中支持多個租戶(Tenant)同時訪問,每個租戶擁有獨立的資源和數據,并且彼此之間完全隔離。通俗來說,多租戶就是把一個應用按照客戶的需求“分割”成多個獨立的實例,每個實例互不干擾。

2 多租戶架構的優勢

更好地滿足不同租戶的個性化需求。

可以降低運維成本,減少硬件、網絡等基礎設施的投入。

節約開發成本,通過復用代碼,快速上線新的租戶實例。

增強了系統的可擴展性和可伸縮性,支持水平擴展,每個租戶的數據和資源均可管理和控制。

3 實現多租戶架構的技術選擇

對于實現多租戶架構技術不是最重要的最重要的是正確的架構思路。但是選擇正確的技術可以更快地實現多租戶架構。

二、設計思路

1 架構選型

基于Java開發多租戶應用推薦使用Spring Boot和Spring Cloud。Spring Boot能快速搭建應用并提供許多成熟的插件。Spring Cloud則提供了許多實現微服務架構的工具和組件。

1.1 Spring Boot

使用Spring Boot可以簡化項目的搭建過程自動配置許多常見的第三方庫和組件,減少了開發人員的工作量。

@RestController
publicclassTenantController{

@GetMapping("/hello")
publicStringhello(@RequestHeader("tenant-id")StringtenantId){
return"Hello,"+tenantId;
}
}

1.2 Spring Cloud

在架構多租戶的系統時Spring Cloud會更加有用。Spring Cloud提供了一些成熟的解決方案,如Eureka、Zookeeper、Consul等,以實現服務發現、負載均衡等微服務功能。

2 數據庫設計

在多租戶環境中數據庫必須為每個租戶分別存儲數據并確保數據隔離。我們通常使用以下兩種方式實現:

多個租戶共享相同的數據庫,每個表中都包含tenant_id這一列,用于區分不同租戶的數據。

為每個租戶創建單獨的數據庫,每個數據庫內的表結構相同,但數據相互隔離。

3 應用多租戶部署

為了實現多租戶在應用部署時我們需要考慮以下兩個問題。

3.1 應用隔離

在多租戶環境中不同租戶需要訪問不同的資源,因此需要進行應用隔離。可以通過構建獨立的容器或虛擬機、使用命名空間等方式實現。Docker就是一種非常流行的隔離容器技術。

3.2 應用配置

由于每個租戶都有自己的配置需求因此需要為每個租戶分別設置應用配置信息,例如端口號、SSL證書等等。這些配置可以存儲在數據庫中,也可以存儲在云配置中心中。

4 租戶管理

在多租戶系統中需要能夠管理不同租戶的數據和資源,同時需要為每個租戶分配相應的權限。解決方案通常包括以下兩部分。

4.1 租戶信息維護

租戶信息的維護包括添加、修改、刪除、查詢等操作,要求能夠根據租戶名稱或租戶ID快速查找對應的租戶信息。

CREATETABLEtenant(
idBIGINTAUTO_INCREMENTPRIMARYKEY,
nameVARCHAR(50)NOTNULLUNIQUE,
descriptionVARCHAR(255),
created_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,
updated_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP
);

4.2 租戶權限控制

在多租戶應用中必須為每個租戶分別設置對系統資源的訪問權限。例如,A租戶和B租戶不能訪問彼此的數據。

@EnableGlobalMethodSecurity(prePostEnabled=true)
@Configuration
publicclassSecurityConfigextendsWebSecurityConfigurerAdapter{

@Override
protectedvoidconfigure(HttpSecurityhttp)throwsException{
http.authorizeRequests()
.antMatchers("/api/tenant/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin();
}

@Autowired
publicvoidconfigureGlobal(AuthenticationManagerBuilderauth)throwsException{
auth.userDetailsService(userDetailsService())
.passwordEncoder(newBCryptPasswordEncoder())
.and()
.inMemoryAuthentication()
.withUser("admin")
.password(newBCryptPasswordEncoder().encode("123456"))
.roles("ADMIN");
}
}

三、技術實現

1 Spring Boot中的多租戶實現

在Spring Boot中可以通過多數據源和動態路由來實現多租戶機制。

1.1 多數據源實現

多數據源是指為不同的租戶配置不同的數據源,使得每個租戶都可以訪問自己的獨立數據。具體實現方法如下:

@Configuration
publicclassDataSourceConfig{
@Bean(name="dataSourceA")
@ConfigurationProperties(prefix="spring.datasource.a")
publicDataSourcedataSourceA(){
returnDataSourceBuilder.create().build();
}

@Bean(name="dataSourceB")
@ConfigurationProperties(prefix="spring.datasource.b")
publicDataSourcedataSourceB(){
returnDataSourceBuilder.create().build();
}

@Bean(name="dataSourceC")
@ConfigurationProperties(prefix="spring.datasource.c")
publicDataSourcedataSourceC(){
returnDataSourceBuilder.create().build();
}
}

以上代碼是配置了三個數據源分別對應三個租戶。然后在使用時,可以使用注解標記需要連接的數據源。

@Service
publicclassProductService{
@Autowired
@Qualifier("dataSourceA")
privateDataSourcedataSource;

//...
}

1.2 動態路由實現

動態路由是指根據請求的URL或參數動態地切換到對應租戶的數據源。具體實現如下:

publicclassDynamicDataSourceextendsAbstractRoutingDataSource{
@Override
protectedObjectdetermineCurrentLookupKey(){
returnTenantContextHolder.getTenantId();
}
}

@Configuration
publicclassDataSourceConfig{
@Bean(name="dataSource")
@ConfigurationProperties(prefix="spring.datasource")
publicDataSourcedataSource(){
returnDataSourceBuilder.create().type(DynamicDataSource.class).build();
}
}

以上是動態路由的核心代碼DynamicDataSource繼承自AbstractRoutingDataSource,通過determineCurrentLookupKey()方法動態獲得租戶ID,然后切換到對應的數據源。

2 Spring Cloud中的多租戶實現

在Spring Cloud中可以通過服務注冊與發現、配置中心、負載均衡等方式實現多租戶機制。

2.1 服務注冊與發現

使用Spring Cloud中的Eureka實現服務注冊與發現。每個租戶的服務都在注冊中心以不同的應用名稱進行注冊,客戶端可以通過服務名稱來訪問對應租戶的服務。

2.2 配置中心

使用Spring Cloud Config作為配置中心。配置文件以租戶ID進行區分,客戶端通過讀取對應租戶的配置文件來獲取配置信息。

2.3 負載均衡

使用Spring Cloud Ribbon作為負載均衡器。根據請求的URL或參數選擇對應租戶的服務實例進行請求轉發。

2.4 API

在API網關層面實現多租戶機制根據請求的URL或參數判斷所屬租戶,并轉發到對應租戶的服務實例。

四、 應用場景

1 私有云環境

私有云環境指的是由企業自行搭建的云環境,不對外提供服務,主要應用于企業內部的數據存儲、管理、共享和安全控制。相較于公有云,私有云的優點在于可以更好地保護企業核心數據,同時也能夠滿足企業對于數據安全性和可控性的要求。

2 公有云環境

公有云環境指的是由云服務商搭建并對外提供服務的云環境,用戶可以根據需要購買相應的云服務,如云存儲、云計算、云數據庫等。相較于私有云,公有云的優點在于具有成本低廉、彈性伸縮、全球化部署等特點,能夠更好地滿足企業快速發展的需求。

3 企業級應用

企業級應用是指面向企業客戶的應用程序,主要包括ERP、CRM、OA等一系列應用系統。這類應用的特點在于功能強大、流程復雜、數據量大,需要滿足企業的高效率、高可靠性、高安全性和易維護性等要求。在云計算環境下,企業可以將這些應用部署在私有云或公有云上,減少了硬件設備的投入和維護成本,提高了管理效率。

五、實現步驟

1 搭建Spring Boot和Spring Cloud環境

首先需要在Maven項目中引入以下依賴:

 

org.springframework.boot
spring-boot-starter-web


 

org.springframework.cloud
spring-cloud-dependencies
2020.0.3
pom
import

然后需要在application.yml中配置相應的參數,如下所示:

spring:
datasource:
url:jdbc//localhost:3306/appdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username:root
password:123456

mybatis:
type-aliases-package:com.example.demo.model
mapper-locations:classpath:mapper/*.xml

server:
port:8080

eureka:
client:
serviceUrl:
defaultZone:http://localhost:8761/eureka/

management:
endpoints:
web:
exposure:
include:"*"

其中datasource.url為數據庫連接的URL,username和password為數據庫連接的賬號和密碼;server.port為Spring Boot應用啟動的端口;eureka.client.serviceUrl.defaultZone為Eureka服務注冊中心的URL。

2 修改數據庫設計

接下來需要對數據庫進行相應的修改,以支持多租戶部署。具體來說,我們需要在數據庫中添加一個與租戶相關的字段,以便在應用中區分不同的租戶。

3 實現應用多租戶部署

接著需要在代碼中實現應用的多租戶部署功能。具體來說,我們需要為每個租戶實例化對應的Spring Bean,并根據租戶ID將請求路由到相應的Bean中去處理。

以下是一個簡單的實現示例:

@Configuration
publicclassMultiTenantConfig{

//提供對應租戶的數據源
@Bean
publicDataSourcedataSource(TenantRegistrytenantRegistry){
returnnewTenantAwareDataSource(tenantRegistry);
}

//多租戶Session工廠
@Bean(name="sqlSessionFactory")
publicSqlSessionFactorysqlSessionFactory(DataSourcedataSource)
throwsException{
SqlSessionFactoryBeansessionFactory=newSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
returnsessionFactory.getObject();
}

//動態切換租戶
@Bean
publicMultiTenantInterceptormultiTenantInterceptor(TenantResolvertenantResolver){
MultiTenantInterceptorinterceptor=newMultiTenantInterceptor();
interceptor.setTenantResolver(tenantResolver);
returninterceptor;
}

//注冊攔截器
@Override
publicvoidaddInterceptors(InterceptorRegistryregistry){
registry.addInterceptor(multiTenantInterceptor());
}

//注冊租戶信息
@Bean
publicTenantRegistrytenantRegistry(){
returnnewTenantRegistryImpl();
}

//解析租戶ID
@Bean
publicTenantResolvertenantResolver(){
returnnewHeaderTenantResolver();
}

}

其中MultiTenantConfig是多租戶部署的核心配置類,它提供了對應租戶數據源、多租戶Session工廠、動態切換租戶等功能。

4 實現租戶管理

最后需要實現一個租戶管理的功能,以便在系統中管理不同的租戶。具體來說,我們可以使用Spring Cloud的服務注冊與發現組件Eureka來注冊每個租戶的實例,并在管理界面中進行相應的操作。另外,我們還需要為每個租戶提供一個獨立的數據庫,以保證數據隔離性。

六、小結回顧

本文詳細介紹了如何使用Spring Boot和Spring Cloud實現一個支持多租戶部署的應用。主要包括搭建Spring Boot和Spring Cloud環境、修改數據庫設計、實現應用多租戶部署、實現租戶管理等方面。

應用場景主要包括SaaS應用、多租戶云服務等。優劣勢主要體現在提升了應用的可擴展性和可維護性,但也增加了部署和管理的復雜度。未來的改進方向可以考慮進一步提升多租戶管理的自動化程度,減少人工干預和錯誤率。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116430
  • CRM
    CRM
    +關注

    關注

    1

    文章

    152

    瀏覽量

    22137
  • URL
    URL
    +關注

    關注

    0

    文章

    142

    瀏覽量

    16222
  • SSL
    SSL
    +關注

    關注

    0

    文章

    132

    瀏覽量

    26747
  • 虛擬機
    +關注

    關注

    1

    文章

    972

    瀏覽量

    30469
  • SpringBoot
    +關注

    關注

    0

    文章

    177

    瀏覽量

    688

原文標題:基于 SpringBoot 實現多租戶架構:支持應用多租戶部署和管理

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    安科瑞破解移動租戶臨時用電管理困境:從安全風險到高效透明

    安科瑞 蔡禹 咨詢問 18安702科1096瑞81 一、移動租戶臨時用電管理的現狀與痛點 隨著共享辦公、靈活租賃等商業模式的快速發展,移動租戶(如短期駐場企業、項目施工團隊、臨時辦事機構等)數量
    的頭像 發表于 01-16 16:02 ?145次閱讀
    安科瑞破解移動<b class='flag-5'>租戶</b>臨時用電<b class='flag-5'>管理</b>困境:從安全風險到高效透明

    安科瑞水電預付費管理系統:人才公寓用電安全的 “守護者”,租戶體驗的 “提升器”

    管控,潛藏安全隱患。這些長期存在的運營痛點,不僅推高了公寓運營成本、拉低管理效率,也間接影響了租戶的居住體驗。而預付費水電管理解決方案,正成為人才公寓重塑管理模式、
    的頭像 發表于 01-14 15:23 ?131次閱讀
    安科瑞水電預付費<b class='flag-5'>管理</b>系統:人才公寓用電安全的 “守護者”,<b class='flag-5'>租戶</b>體驗的 “提升器”

    如何實現電源無縫切換?支持PD/QC/DC/電池自動切換的RGBWY電源管理

    RGBWY方案的電源管理實現多種供電模式電源混用不閃燈支持PD/QC/DC電池自動切換RGBWY方案電源管理
    的頭像 發表于 01-09 11:45 ?312次閱讀
    如何<b class='flag-5'>實現</b><b class='flag-5'>多</b>電源無縫切換?<b class='flag-5'>支持</b>PD/QC/DC/電池自動切換的RGBWY電源<b class='flag-5'>管理</b>

    【節能學院】安科瑞水電預付費管理系統:人才公寓用電安全的 “守護者”,租戶體驗的 “提升器”

    ;空調、熱水器等大功率電器缺乏有效管控,潛藏安全隱患。這些長期存在的運營痛點,不僅推高了公寓運營成本、拉低管理效率,也間接影響了租戶的居住體驗。而預付費水電管理解決方
    的頭像 發表于 12-24 08:02 ?335次閱讀
    【節能學院】安科瑞水電預付費<b class='flag-5'>管理</b>系統:人才公寓用電安全的 “守護者”,<b class='flag-5'>租戶</b>體驗的 “提升器”

    高性能網絡存儲設計:NVMe-oF IP的實現探討

    中間映射,該機制實現了NVMeoF與NVMe之間的軟硬件解耦、隊列虛擬化、并行事務動態調度,顯著提升系統可擴展性與調度靈活度。 ③ RAID0 橫向擴展的通道NVMe聚合架構 系統提供 面向高吞吐場景
    發表于 12-19 18:45

    電能質量在線監測裝置支持賬號權限管理嗎?

    是的,電能質量在線監測裝置普遍支持賬號權限管理 ,且符合 DL/T 1297-2013《電能質量監測系統技術規范》的明確要求。 一、核心權限管理模式與
    的頭像 發表于 12-10 17:01 ?1231次閱讀
    電能質量在線監測裝置<b class='flag-5'>支持</b><b class='flag-5'>多</b>賬號權限<b class='flag-5'>管理</b>嗎?

    大型商場租戶預付費管理難題破解:AcrelCloud-3200系統部署與實施方案

    在零售市場競爭白熱化的當下,商超運營既要控成本、提效率,又要抓體驗、促增長,每一步都考驗著管理智慧。而安科瑞推出的AcrelCloud-3200預付費軟件系統的出現,正成為破解這些難題的關鍵技術工具
    的頭像 發表于 12-01 16:41 ?424次閱讀
    大型商場<b class='flag-5'>多</b><b class='flag-5'>租戶</b>預付費<b class='flag-5'>管理</b>難題破解:AcrelCloud-3200系統<b class='flag-5'>部署</b>與實施方案

    淘寶規格SKU管理接口

    對應獨立的庫存、價格和銷售數據。淘寶開放平臺(TOP)提供了一套完善的API接口,幫助開發者實現程序化SKU管理。本技術帖將逐步解析淘寶規格SKU管理接口的功能、使用方法和最佳實踐,
    的頭像 發表于 10-10 15:32 ?496次閱讀
    淘寶<b class='flag-5'>多</b>規格SKU<b class='flag-5'>管理</b>接口

    收費難、管理煩?安科瑞預付費系統讓能源管理更高效!

    - 管 - 邊 - 端” 一體化架構,為各類場景提供智能、透明、高效的能源管理解決方案! 一、靈活計費,繳費充值更便捷 模式適配,緊跟政策不走樣 兼容預付費、后付費雙模式,支持分時
    的頭像 發表于 09-11 10:34 ?537次閱讀

    米爾RK3576部署端側模態輪對話,6TOPS算力驅動30億參數LLM

    通過硬件算力優化與軟件棧協同,將視覺編碼、語言推理、對話管理三大核心能力封裝為可落地的工程方案,而本文將聚焦其輪對話的部署全流程,拆解從模型加載到交互推理的每一個關鍵環節。 RK3576
    發表于 09-05 17:25

    租戶網絡運維破局:自動化配置實戰

    租戶網絡(Multi-Tenant Network)是一種在云計算環境中實現網絡資源虛擬化的關鍵技術,其核心目標是通過共享底層物理網絡基礎設施,為多個獨立租戶(用戶、企業或部門)提供
    的頭像 發表于 08-22 11:07 ?1293次閱讀
    <b class='flag-5'>多</b><b class='flag-5'>租戶</b>網絡運維破局:自動化配置實戰

    開放生態+極簡運維:租戶園區網絡的云原生管理實踐

    新一代云化園區網解決方案,創新性地將數據中心級的Spine/Leaf架構以及“全三層”、“云架構”、“超堆疊”、“云漫游”等設計理念應用于園區場景,顯著提升網絡服務質量和運維水平。面對租戶
    的頭像 發表于 06-16 16:28 ?938次閱讀
    開放生態+極簡運維:<b class='flag-5'>多</b><b class='flag-5'>租戶</b>園區網絡的云原生<b class='flag-5'>管理</b>實踐

    如何利用RAKsmart服務器實現高效站點部署方案

    利用RAKsmart服務器實現高效站點部署方案,需結合其網絡優勢、彈性資源管理和合理的架構設計。以下是分步實施方案,涵蓋網絡優化、資源分配
    的頭像 發表于 05-19 10:38 ?531次閱讀

    云MES系統源碼,支持 SaaS 租戶支持二次開發

    萬界星空科技MES生產制造執行系統源碼,有演示,多個項目應用案例,成熟穩定。支持二次開發,商業授權后可商用。
    的頭像 發表于 05-07 11:14 ?791次閱讀
    云MES系統源碼,<b class='flag-5'>支持</b> SaaS <b class='flag-5'>多</b><b class='flag-5'>租戶</b>,<b class='flag-5'>支持</b>二次開發

    在線監測管理系統的智能化功能詳解 多角色權限與多項目管理 終端適配

    在線監測管理系統的智能化功能詳解 多角色權限與多項目管理 終端適配 在線監測管理系統采用基于BS架構設計,用戶可通過瀏覽器
    的頭像 發表于 03-19 17:18 ?809次閱讀