欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0

SOFAArk Project

  • 源碼大?。?span>42.5MB
  • 源碼語(yǔ)言:簡(jiǎn)體中文
  • 源碼類型:國(guó)產(chǎn)軟件
  • 源碼授權(quán):免費(fèi)軟件
  • 源碼類別:java源碼
  • 應(yīng)用平臺(tái):Java
  • 更新時(shí)間:2025-01-19
  • 網(wǎng)友評(píng)分:
360通過(guò) 騰訊通過(guò) 金山通過(guò)

情介紹

SOFAArk 是一款基于 Java 實(shí)現(xiàn)的動(dòng)態(tài)熱部署和輕量級(jí)類隔離框架,由螞蟻集團(tuán)開源貢獻(xiàn),主要提供應(yīng)用模塊的動(dòng)態(tài)熱部署和類隔離能力?;?Fat Jar 技術(shù),可以將多個(gè)應(yīng)用模塊打包成一個(gè)自包含可運(yùn)行的 Fat Jar,應(yīng)用既可以是簡(jiǎn)單的單模塊 Java 應(yīng)用也可以是 SpringBoot/SOFABoot 應(yīng)用。

背景

SOFAArk 最初的場(chǎng)景是解決 Java 開發(fā)常常會(huì)遇到的包依賴沖突的問(wèn)題,尤其當(dāng)工程應(yīng)用變得臃腫龐大,包沖突的問(wèn)題也會(huì)變得更加棘手,導(dǎo)致各種各樣的報(bào)錯(cuò),例如LinkageError, NoSuchMethodError等。實(shí)際開發(fā)中,可以采用多種方法來(lái)解決包沖突問(wèn)題,比較常見的是類似 SpringBoot 的做法,統(tǒng)一管理應(yīng)用所有依賴包的版本,保證這些三方包不存在依賴沖突。這種做法只能有效避免包沖突的問(wèn)題,不能根本上解決包沖突的問(wèn)題。如果某個(gè)應(yīng)用的確需要在運(yùn)行時(shí)使用兩個(gè)相互沖突的包,例如 protobuf2 和 protobuf3,那么類似 SpringBoot 的做法依然解決不了問(wèn)題。

為了徹底解決包沖突的問(wèn)題,我們需要借助類隔離機(jī)制,使用不同的 ClassLoader 加載不同版本的三方依賴,進(jìn)而隔離包沖突問(wèn)題。OSGI 作為業(yè)內(nèi)最出名的類隔離框架,自然是可以被用于解決上述包沖突問(wèn)題,但是 OSGI 框架太過(guò)臃腫,功能繁雜。為了解決包沖突問(wèn)題,引入 OSGI 框架,有牛刀殺雞之嫌,反而使工程變得更加復(fù)雜,不利于開發(fā)。

SOFAArk 則采用較為輕量級(jí)的類隔離方案來(lái)解決日常經(jīng)常遇到的包沖突問(wèn)題,在螞蟻金服內(nèi)部服務(wù)于整個(gè) SOFABoot 技術(shù)體系,彌補(bǔ) SpringBoot 沒(méi)有的類隔離能力。實(shí)際上,SOFAArk 是一個(gè)通用的輕量級(jí)類隔離框架,并不限于 SpringBoot 應(yīng)用,也可以和其他的 Java 開發(fā)框架集成。

基于類隔離能力 SOFAArk 還提供了動(dòng)態(tài)熱部署能力。SOFAArk 不但支持將多個(gè)應(yīng)用合并打成一個(gè)可執(zhí)行的 Fat Jar 包,也支持運(yùn)行時(shí)通過(guò) API 或者 Zookeeper 動(dòng)態(tài)推送配置達(dá)到動(dòng)態(tài)部署應(yīng)用模塊的能力。在多團(tuán)隊(duì)協(xié)作開發(fā)時(shí),各個(gè)功能模塊由不同的團(tuán)隊(duì)負(fù)責(zé)開發(fā),通常情況下,這些功能模塊獨(dú)立開發(fā),但是運(yùn)行時(shí)部署在一起。借助 SOFAArk 提供的合并部署能力,各團(tuán)隊(duì)開發(fā)時(shí)擁有相當(dāng)大自由度,只需要定義各模塊之間的交互接口即可,尤其對(duì)于中臺(tái)應(yīng)用開發(fā),提高團(tuán)隊(duì)合作效率。除了合并部署,SOFAArk 還對(duì)接了 Zookeeper 接受動(dòng)態(tài)配置,控制應(yīng)用模塊的動(dòng)態(tài)安裝和卸載。

原理

SOFAArk 框架包含有三個(gè)概念,Ark Container, Ark Plugin 和 Ark Biz; 運(yùn)行時(shí)邏輯結(jié)構(gòu)圖如下:

在介紹這三個(gè)概念之前,為了統(tǒng)一術(shù)語(yǔ),有必要先說(shuō)一下所謂的 Ark 包;Ark 包是滿足特定目錄格式要求的 Executed Fat Jar,使用官方提供的 Maven 插件 sofa-ark-maven-plugin可以將工程應(yīng)用打包成一個(gè)標(biāo)準(zhǔn)格式的 Ark 包;使用命令 java -jar application.jar即可在 Ark 容器之上啟動(dòng)應(yīng)用;Ark 包 通常包含 Ark Container、Ark Plugin、 Ark Biz;以下我們針對(duì)這三個(gè)概念簡(jiǎn)單做下名詞解釋:

1、Ark Container: Ark 容器,負(fù)責(zé)整個(gè)運(yùn)行時(shí)的管理;Ark Plugin 和 Ark Biz 運(yùn)行在 Ark 容器之上;容器具備管理多插件、多應(yīng)用的功能;容器啟動(dòng)成功后,會(huì)自動(dòng)解析 classpath 包含的 Ark Plugin 和 Ark Biz 依賴,完成隔離加載并按優(yōu)先級(jí)依次啟動(dòng)之;

2、Ark Plugin: Ark 插件,滿足特定目錄格式要求的 Fat Jar,使用官方提供的 Maven 插件 sofa-ark-plugin-maven-plugin 可以將一個(gè)或多個(gè)普通的 Java Jar 包打包成一個(gè)標(biāo)準(zhǔn)格式的 Ark Plugin; Ark Plugin 會(huì)包含一份配置文件,通常包括插件類導(dǎo)入導(dǎo)出配置、插件啟動(dòng)優(yōu)先級(jí)等;運(yùn)行時(shí),Ark 容器會(huì)使用獨(dú)立的 PluginClassLoader 加載插件,并根據(jù)插件配置構(gòu)建類加載索引表,從而使插件與插件、插件與應(yīng)用之間相互隔離;

3、Ark Biz: Ark 業(yè)務(wù)模塊,滿足特定目錄格式要求的 Fat Jar ,使用官方提供的 Maven 插件 sofa-ark-maven-plugin 可以將工程應(yīng)用打包成一個(gè)標(biāo)準(zhǔn)格式的 Ark-Biz 包;是工程應(yīng)用模塊及其依賴包的組織單元,包含應(yīng)用啟動(dòng)所需的所有依賴和配置;

在運(yùn)行時(shí),Ark Container 優(yōu)先啟動(dòng),自動(dòng)解析 classpath 包含的 Ark Plugin 和 Ark Biz,并讀取他們的配置,構(gòu)建類加載索引關(guān)系;然后使用獨(dú)立的 ClassLoader 加載他們并按優(yōu)先級(jí)配置依次啟動(dòng);需要指出的是,Ark Plugin 優(yōu)先 Ark Biz 被加載啟動(dòng);Ark Plugin 之間是雙向類索引關(guān)系,即可以相互委托對(duì)方加載所需的類;Ark Plugin 和 Ark Biz 是單向類索引關(guān)系,即只允許 Ark Biz 索引 Ark Plugin 加載的類,反之則不允許。

場(chǎng)景

包沖突

SOFAArk初衷是為了解決包沖突問(wèn)題,那什么情況下可以使用 SOFAArk 以及如何使用呢? 假設(shè)如下場(chǎng)景,如果工程需要引入兩個(gè)三方包:A 和 B,但是 A 需要依賴版本號(hào)為 0.1 的 C 包,而恰好 B 需要依賴版本號(hào)為 0.2 的 C 包,且 C 包的這兩個(gè)版本無(wú)法兼容:

此時(shí),即可使用 SOFAArk 解決該依賴沖突問(wèn)題;只需要把 A 和版本為 0.1 的 C 包一起打包成一個(gè) Ark Plugin,然后讓應(yīng)用工程引入該插件依賴即可;

合并部署

SOFAArk 基于類隔離能力,實(shí)現(xiàn)了應(yīng)用的合并部署,可以簡(jiǎn)單分為靜態(tài)合并部署和動(dòng)態(tài)合并部署,介紹如下。

靜態(tài)合并部署

在實(shí)際開發(fā)過(guò)程中,經(jīng)常會(huì)出現(xiàn)多個(gè)團(tuán)隊(duì)合作開發(fā)同一款產(chǎn)品,他們各自負(fù)責(zé)不同的功能模塊,這些功能模塊通??梢元?dú)立開發(fā),但是運(yùn)行時(shí)需要作為一個(gè)整體的應(yīng)用運(yùn)行。在這種情況下,所有團(tuán)隊(duì)需要協(xié)商統(tǒng)一技術(shù)棧及各自的二方包版本,這無(wú)疑增加了開發(fā)和聯(lián)調(diào)的成本。為了讓開發(fā)人員專注自身功能業(yè)務(wù)的開發(fā),理想情況下開發(fā)人員希望能像開發(fā)獨(dú)立應(yīng)用一樣,僅定義好對(duì)外交互接口,而不用考慮和其他功能模塊出現(xiàn)的版本沖突、技術(shù)棧不統(tǒng)一等問(wèn)題。正是基于這種場(chǎng)景,SOFAArk 提供了靜態(tài)合并部署能力,應(yīng)用可以依賴其他應(yīng)用打成的 Biz 包,而當(dāng)自身被打成 Ark 包時(shí),可以將其他應(yīng)用 Biz 包一并打入,啟動(dòng)時(shí),則會(huì)根據(jù)優(yōu)先級(jí)依次啟動(dòng)各應(yīng)用。由于每個(gè)應(yīng)用使用獨(dú)立的 BizClassLoader 加載,因此不需要考慮依賴沖突或者技術(shù)棧不統(tǒng)一問(wèn)題。應(yīng)用之間則通過(guò) SofaService/SofaReference JVM 服務(wù)進(jìn)行交互。

動(dòng)態(tài)合并部署

動(dòng)態(tài)合并部署區(qū)別于靜態(tài)合并部署最大的一點(diǎn)是,在應(yīng)用運(yùn)行時(shí)可以通過(guò) API 或者配置中心(Zookeeper)來(lái)控制應(yīng)用的部署和卸載。動(dòng)態(tài)合并部署的設(shè)計(jì)理念圖如下:

無(wú)論是靜態(tài)還是動(dòng)態(tài)合并部署都會(huì)有宿主應(yīng)用(master app)的概念, 如果 Ark 包只打包了一個(gè) Biz,則該 Biz 默認(rèn)成為宿主應(yīng)用。如果 Ark 包打包了多個(gè) Biz 包,需要配置指定宿主應(yīng)用。宿主應(yīng)用不允許被卸載,一般而言,宿主應(yīng)用會(huì)作為流量入口的中臺(tái)系統(tǒng),具體的服務(wù)實(shí)現(xiàn)會(huì)放在不同的動(dòng)態(tài) Biz 中,供宿主應(yīng)用調(diào)用。宿主應(yīng)用可以使用 SOFAArk 提供的客戶端 API 實(shí)現(xiàn)動(dòng)態(tài)應(yīng)用的部署和卸載。除了 API, SOFAArk 提供了 Config Plugin,用于對(duì)接配置中心(目前支持 Zookeeper),運(yùn)行時(shí)接受動(dòng)態(tài)配置。Config Plugin 會(huì)解析下發(fā)的配置,控制動(dòng)態(tài)模塊的部署和卸載。

隨著近幾年 Serverless 技術(shù)的興起,螞蟻集團(tuán)在 Serverless 領(lǐng)域進(jìn)行了持續(xù)的建設(shè)和探索,基于 SOFAArk 動(dòng)態(tài)合并部署技術(shù)打造了比較成熟的 SOFAServerless 技術(shù)體系,去深入解決企業(yè)的研發(fā)和運(yùn)維效率問(wèn)題。其核心方式是通過(guò)快速熱部署、動(dòng)態(tài)服務(wù)發(fā)布等技術(shù),將應(yīng)用從代碼結(jié)構(gòu)和開發(fā)者陣型劃分為模塊和基座。其中基座為業(yè)務(wù)模塊提供計(jì)算環(huán)境并屏蔽基礎(chǔ)設(shè)施,讓模塊開發(fā)者不用感知機(jī)器和容量等底層設(shè)施而專注于某個(gè)功能模塊的開發(fā)迭代來(lái)幫助業(yè)務(wù)快速向前發(fā)展。

在應(yīng)用架構(gòu)領(lǐng)域,不可避免的問(wèn)題是應(yīng)用隨著業(yè)務(wù)的復(fù)雜度不斷增加,研發(fā)運(yùn)維的過(guò)程中的問(wèn)題會(huì)不斷暴露出來(lái)。首先我們看一下普通應(yīng)用研發(fā)和運(yùn)維過(guò)程中的流程是什么樣的:

如圖所示,從需求到設(shè)計(jì)、開發(fā)、線下測(cè)試,再到發(fā)布線上的研發(fā)運(yùn)維不斷反饋、循環(huán)迭代的過(guò)程??梢院?jiǎn)化為開發(fā)同學(xué)提交代碼到代碼倉(cāng)庫(kù),在線下做并行的驗(yàn)證測(cè)試,測(cè)試通過(guò)之后在線上發(fā)布,發(fā)布過(guò)程是串行的,只能夠有一個(gè)發(fā)布窗口,這樣的過(guò)程在應(yīng)用體量業(yè)務(wù)還不太復(fù)雜的情況下問(wèn)題,并不是很明顯。

但當(dāng)業(yè)務(wù)復(fù)雜度不斷增加,普通應(yīng)用迭代過(guò)程在會(huì)出現(xiàn)一些新的問(wèn)題,如下圖:

1、管理成本高:需求管理、代碼管理、人員管理。

2、時(shí)間成本高:線上驗(yàn)證與發(fā)布互相阻塞。單次啟動(dòng)慢。

3、變更風(fēng)險(xiǎn)高:一次變更涉及所有代碼。一次變更涉及所有機(jī)器。

另外,由于這些問(wèn)題是因?yàn)槎鄠€(gè)業(yè)務(wù)與研發(fā)任務(wù)耦合在某些單點(diǎn)上導(dǎo)致的,研發(fā)運(yùn)維的成本隨著業(yè)務(wù)的復(fù)雜度呈現(xiàn)出指數(shù)增長(zhǎng)的特點(diǎn):

通過(guò)借助 SOFAArk 框架將應(yīng)用拆分成基座和模塊,同時(shí)將應(yīng)用里的接口按場(chǎng)景維度做分組,使得業(yè)務(wù)可以按一組接口的粒度進(jìn)行極速發(fā)布運(yùn)維以及資源按需隔離。

從這張圖里可以看到 Serverless 應(yīng)用拆分的形態(tài),通過(guò)把一個(gè)普通的 Java 應(yīng)用拆出多個(gè)模塊,進(jìn)一步對(duì)應(yīng)用進(jìn)行了拆分:基座和模塊,對(duì)應(yīng)的研發(fā)人員也劃分為基座開發(fā)者和模塊開發(fā)者。

基座負(fù)責(zé)沉淀通用的邏輯,為模塊提供計(jì)算和環(huán)境,并為模塊開發(fā)者屏蔽基礎(chǔ)設(shè)施,讓模塊開發(fā)者不需要關(guān)心容量和資源等。各個(gè)模塊則是獨(dú)立的代碼倉(cāng)庫(kù),可以進(jìn)行獨(dú)立的研發(fā)運(yùn)維,這樣研發(fā)運(yùn)維粒度就得到了精細(xì)化,并且由于基座為模塊屏蔽了環(huán)境與基礎(chǔ)設(shè)施,模塊開發(fā)者可以專注于業(yè)務(wù)開發(fā)從而提高了業(yè)務(wù)創(chuàng)新效率。

載地址

下載錯(cuò)誤?【投訴報(bào)錯(cuò)】

Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0

      氣源碼

      關(guān)文章

      • Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0

        SOFAArk 是一款基于 Java 實(shí)現(xiàn)的動(dòng)態(tài)熱部署和輕量級(jí)類隔離框架,由螞蟻集團(tuán)開源貢獻(xiàn),主要提供應(yīng)用模塊的動(dòng)態(tài)熱部署和類隔離能力。歡迎需要的朋友下載使用...

      • SpringBlade微服務(wù)開發(fā)平臺(tái) v4.4.0

        SpringBlade 是一個(gè)由商業(yè)級(jí)項(xiàng)目升級(jí)優(yōu)化而來(lái)的SpringCloud分布式微服務(wù)架構(gòu)、SpringBoot單體式微服務(wù)架構(gòu)并存的綜合型項(xiàng)目,采用Java8 API重構(gòu)了業(yè)務(wù)代碼,完全遵循阿里巴...

      • Diboot輕代碼開發(fā)平臺(tái) v2.11.0

        Diboot輕代碼開發(fā)平臺(tái)是一個(gè)面向開發(fā)人員的低代碼開發(fā)平臺(tái),將重復(fù)性的工作自動(dòng)化,提高質(zhì)量、效率、可維護(hù)性...

      • RuoYi-activiti工作流平臺(tái)源碼 v4.1

        RuoYi-activiti是一款以若依開源權(quán)限管理系統(tǒng)為基礎(chǔ)開發(fā)平臺(tái)并集成了activiti框架完成的工作流系統(tǒng),旨在打造集流程設(shè)計(jì)、流程部署、流程執(zhí)行、任務(wù)辦理、流程監(jiān)控于一體的...

      • RuoYi若依權(quán)限管理系統(tǒng) v4.7.9

        RuoYi若依權(quán)限管理系統(tǒng)是一個(gè)基于SpringBoot的權(quán)限管理系統(tǒng),代碼易讀易懂、界面簡(jiǎn)潔美觀, 核心技術(shù)采用Spring、MyBatis、Shiro沒(méi)有任何其它重度依賴,喜歡的朋友快來(lái)下載...

      • Java Struts2漏洞復(fù)現(xiàn)工具

        今天給大家分享Java Struts2漏洞復(fù)現(xiàn)工具,喜歡的朋友快來(lái)下載體驗(yàn)吧...

      • java操作excel的jar包(jxl.jar包 源碼)

        jxl.jar是通過(guò)java操作excel表格的工具類庫(kù),能夠修飾單元格屬性,是由java語(yǔ)言開發(fā)而成的,接下來(lái)通過(guò)本文給大家介紹java操作excel的jar包(jxl.jar包 源碼),喜歡的朋友快...

      • springboot整合QuartJob實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理源代碼

        Quartz是一個(gè)完全由java編寫的開源作業(yè)調(diào)度框架,形式簡(jiǎn)易,功能強(qiáng)大,,下面給大家分享springboot整合QuartJob實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理源代碼,感興趣的朋友快來(lái)下載體驗(yàn)吧...

      • SOFABoot開源框架 v3.24.0

        SOFABoot 是螞蟻集團(tuán)開源的基于 Spring Boot 的研發(fā)框架,它在 Spring Boot 的基礎(chǔ)上,提供了諸如 Readiness Check,上下文隔離,類隔離,日志空間隔離等等能力...

      • 基于SSM的應(yīng)急資源管理系統(tǒng)源碼 v1.0

        應(yīng)急資源管理系統(tǒng)用的是是比較流行的SSM和前端JSP技術(shù),用它來(lái)創(chuàng)建使用腳本語(yǔ)言,結(jié)合HTML代碼來(lái)制作動(dòng)態(tài) 網(wǎng)頁(yè),歡迎需要的朋友下載使用...

      載聲明

      ☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
      ☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
      ☉ 如果這個(gè)軟件總是不能下載的請(qǐng)?jiān)谠u(píng)論中留言,我們會(huì)盡快修復(fù),謝謝!
      ☉ 下載本站資源,如果服務(wù)器暫不能下載請(qǐng)過(guò)一段時(shí)間重試!或者多試試幾個(gè)下載地址
      ☉ 如果遇到什么問(wèn)題,請(qǐng)?jiān)u論留言,我們定會(huì)解決問(wèn)題,謝謝大家支持!
      ☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請(qǐng)購(gòu)買正版。
      ☉ 本站提供的Java輕量級(jí)類隔離框架 SOFAArk Project v2.3.0資源來(lái)源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。