版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件各樣系統(tǒng)架構(gòu)圖宣布一公司技術(shù)架構(gòu)圖,供大家參照。該技術(shù)架構(gòu)圖是自己依照多年公司技術(shù)架構(gòu)經(jīng)驗(yàn)而制定,是公司技術(shù)的總架構(gòu)圖,希望對(duì)CTO們有所借鑒。簡單說明:1.中間件基礎(chǔ)運(yùn)行環(huán)境是經(jīng)過一致規(guī)劃的以WebLogic、JBOSS為主的集群環(huán)境2.公司集成平臺(tái)是以基礎(chǔ)業(yè)務(wù)應(yīng)用為基礎(chǔ)服務(wù)于上層平臺(tái)和基礎(chǔ)業(yè)務(wù)應(yīng)用的高度集成平臺(tái)3.數(shù)據(jù)中心是公司公共數(shù)據(jù)的集中管理比方用戶數(shù)據(jù)、公司編碼,能夠經(jīng)過數(shù)據(jù)集成平臺(tái)或服務(wù)集成平臺(tái)發(fā)散給其他應(yīng)用項(xiàng)目做了很多,都沒畫過架構(gòu)圖,此次被要求繪圖,畫的很丑,請(qǐng)大家看圖自己包括的系統(tǒng)架構(gòu)信息一、架構(gòu)整體圖1、核心是兩庫一線1.1接口總線所有算法功能抽象成接口,其中大部分接口的方法都是泛型方法,是為認(rèn)識(shí)決某一大類問題的1.2代碼庫代碼庫包括現(xiàn)接口總線中接口的各樣實(shí)現(xiàn)1.3應(yīng)用庫供給用戶的界面或許供給給外面的服務(wù)是經(jīng)過容器配置調(diào)用算法庫中的代碼來實(shí)現(xiàn)的各種應(yīng)用二、應(yīng)用關(guān)系圖1、應(yīng)用經(jīng)過配置從應(yīng)用庫中組裝出自己的應(yīng)用系統(tǒng)2、應(yīng)用自己之外的東西盡量使用攔截器辦理(授權(quán)訪問、權(quán)限數(shù)據(jù)推送、異樣辦理、緩存、日志等)3、使用信息行列做高并發(fā)應(yīng)用支撐(秒殺近似應(yīng)用)4、使用散布式任務(wù)系統(tǒng)做周期作業(yè)、數(shù)據(jù)保護(hù)、數(shù)據(jù)計(jì)算等ENode架構(gòu)圖什么是ENodeENode是一個(gè).NET平臺(tái)下,純C#開發(fā)的,鑒于DDD,CQRS,ES,EDA,In-Memory架構(gòu)風(fēng)格的,能夠幫助開發(fā)者開發(fā)高并發(fā)、高吞吐、可伸縮、可擴(kuò)展的應(yīng)用程序的一個(gè)應(yīng)用開發(fā)框架。開源項(xiàng)目地點(diǎn):/tangxuehua/enode作者博客地點(diǎn):/netfocus/category/496012.htmlQQ交流群號(hào):185916873微信民眾號(hào):ENodeENode框架特色一個(gè)DDD開發(fā)框架,圓滿支持鑒于六邊形架構(gòu)想想的開發(fā)實(shí)現(xiàn)CQRS架構(gòu)想想,而且框架供給C端命令的辦理結(jié)果的返回,支持同步返回和異步返回內(nèi)置EventSourcing(ES)架構(gòu)模式,讓C端的數(shù)據(jù)長久化變得通用化聚合根常駐內(nèi)存,in-memorydomainmodel聚合根的辦理鑒于CommandMailbox,EventMailbox的思想,近似ActorModel,ActorMailbox嚴(yán)格恪守聚合內(nèi)強(qiáng)一致性、聚合之間最后一致性的原則GroupCommitDomainevent鑒于聚合根ID+事件版本號(hào)的唯一索引,實(shí)現(xiàn)聚合根的樂觀并發(fā)控制框架保證Command的冪等辦理經(jīng)過聚合根ID對(duì)命令或事件進(jìn)行路由,做到最小的并發(fā)矛盾、最大的并行辦理信息發(fā)送和接收鑒于散布式信息行列EQueue,支持散布式部署鑒于事件驅(qū)動(dòng)架構(gòu)范式(EDA,Event-DrivenArchitecture)鑒于行列的動(dòng)向擴(kuò)容/縮容EventDB中因?yàn)榧拇娴亩际遣荒茏兊氖录?,因此水平擴(kuò)展特別簡單,框架可內(nèi)置支持支持ProcessManager(Saga),以支持一個(gè)用戶操作跨多個(gè)聚合根的業(yè)務(wù)場(chǎng)景,如訂單辦理,進(jìn)而防備散布式事務(wù)的使用ENode實(shí)現(xiàn)了CQRS架構(gòu)面對(duì)的大部分技術(shù)問題,讓開發(fā)者能夠?qū)W⒂跇I(yè)務(wù)邏輯和業(yè)務(wù)流程的開發(fā),而無需關(guān)心純技術(shù)問題夜晚把公司應(yīng)用的架構(gòu)聯(lián)合以前研究的東西梳理了下,整理了一張架構(gòu)規(guī)劃圖,貼在這里備份下面是個(gè)人理解的做架構(gòu)的幾個(gè)要點(diǎn):1、系統(tǒng)安全這是首要考慮的,以這張圖為例,網(wǎng)絡(luò)區(qū)分為3個(gè)區(qū):a)DMZ區(qū)能夠直接公網(wǎng)接見,也能夠與AppCore區(qū)互通,但不能夠直接與DBCore區(qū)互通(平時(shí)這里放置反向代理Web服務(wù)器)AppCore區(qū)能與DMZ區(qū)、DBCore區(qū)互通,可是無法直接從公網(wǎng)接見(平時(shí)這里放置應(yīng)用服務(wù)器、中間件服務(wù)器之類)c)DBCore區(qū)僅與AppCore區(qū)互通(平時(shí)這里放置核心數(shù)據(jù)庫)2、盡量除去單點(diǎn)故障上圖中,除了“硬件負(fù)載平衡”節(jié)點(diǎn)外,其他節(jié)點(diǎn)都能夠部署成集群(DB有點(diǎn)特別,傳統(tǒng)RDBMS要實(shí)現(xiàn)散布式/集群仍是比較困難的,要看詳盡采用的數(shù)據(jù)庫產(chǎn)品,其實(shí)不是所有數(shù)據(jù)庫都能方便的做Sharding),Jboss自己能夠經(jīng)過Domain模式+mod_cluster實(shí)現(xiàn)集群、Redis經(jīng)過Master/Slave以Sentinel方式能夠?qū)崿F(xiàn)HA、IBMMQ自己就支持集群、FTPServer配合基層積蓄陣列也能夠做到HA、Nginx靜態(tài)資源服務(wù)器自不用說3、成本盡量采用開源成熟產(chǎn)品,jboss、redis、nginx、apache、mysql、rabbitMQ都是很好的選擇。硬件負(fù)載平衡平時(shí)成本不低,但是收效顯然,若是實(shí)在沒錢,域名剖析采用
DNS
輪詢策略,也能達(dá)到近似收效,只可是可靠性略差。4、Database問題常例公司應(yīng)用中,傳統(tǒng)關(guān)系型數(shù)據(jù)仍舊是主流,可是no-sql經(jīng)過這幾年發(fā)展,技術(shù)也日漸成熟了,一些非要點(diǎn)數(shù)據(jù)能夠適合采用no-sql數(shù)據(jù)庫,比方:系統(tǒng)日志、報(bào)文歷史記錄這類對(duì)比較較獨(dú)立,而且增添快速的數(shù)據(jù),能夠考慮儲(chǔ)藏到no-sqldb甚至HDFS、TFS平散布式開源文件系統(tǒng)中。若是系統(tǒng)數(shù)據(jù)量級(jí)達(dá)到單機(jī)RDBMS的上限,盡早考慮Sharding方案,目前mysql在這方面比較成熟,其他數(shù)據(jù)庫就不好說了。5、性能webserver、appserver這些一般都能夠經(jīng)過集群實(shí)現(xiàn)橫向擴(kuò)張,知足性能平時(shí)增添的需求。最大的阻擋仍是DB,若是規(guī)模真達(dá)到了DB的上限,仍是考慮換散布式DB或許遷移到“云”上吧。HBase系統(tǒng)架構(gòu)圖組成零件說明
Client:
使用
HBaseRPC機(jī)制與
HMaster
和
HRegionServer
進(jìn)行通信
Client
與HMaster
進(jìn)行通信進(jìn)行管理類操作
Client
與HRegionServer
進(jìn)行數(shù)據(jù)讀寫類操作
Zookeeper:ZookeeperQuorum
儲(chǔ)藏
-ROOT-表地點(diǎn)、
HMaster
地點(diǎn)HRegionServer
把自己以
Ephedral
方式注冊(cè)到
Zookeeper中,HMaster
隨時(shí)感知各個(gè)
HRegionServer
的健康情況Zookeeper
防備
HMaster
單點(diǎn)問題
HMaster:HMaster
沒有單點(diǎn)問題,
HBase中能夠啟動(dòng)多個(gè)
HMaster,通過
Zookeeper
的
MasterElection
系統(tǒng)保證總有一個(gè)
Master
在運(yùn)行
主要負(fù)責(zé)
Table
和
Region
的管理工作:1管理用戶對(duì)表的增改正查操作
2管理HRegionServer
的負(fù)載平衡,調(diào)整
Region
散布
3RegionSplit后,負(fù)責(zé)新Region的散布4在HRegionServer停機(jī)后,負(fù)責(zé)無效HRegionServer上Region遷移HRegionServer:HBase中最核心的模塊,主要負(fù)責(zé)響應(yīng)用戶I/O懇求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)HRegionServer管理一些列HRegion對(duì)象;每個(gè)HRegion對(duì)應(yīng)Table中一個(gè)Region,HRegion由多個(gè)HStore組成;每個(gè)HStore對(duì)應(yīng)Table中一個(gè)ColumnFamily的儲(chǔ)藏;ColumnFamily就是一個(gè)集中的儲(chǔ)藏單元,故將擁有同樣IO特色的Column放在一個(gè)ColumnFamily會(huì)更高效HStore:HBase儲(chǔ)藏的核心。由MemStore和StoreFile組成。MemStore是SortedMemoryBuffer。用戶寫入數(shù)據(jù)的流程:Client寫入->存入MemStore,向到達(dá)MemStore滿->Flush成一個(gè)StoreFile,直至增添到必然閾值->觸發(fā)Compact歸并操作->多個(gè)StoreFile歸并成一個(gè)StoreFile,同時(shí)進(jìn)行版本歸并和數(shù)據(jù)刪除
->
當(dāng)
StoreFilesCompact
后,漸漸形成越來越大的
StoreFile->
單個(gè)StoreFile大小高出必然閾值后,觸發(fā)Split操作,把目前RegionSplit成2個(gè)Region,Region會(huì)下線,新Split出的2個(gè)孩子Region
會(huì)被
HMaster
分派到相應(yīng)的
HRegionServer
上,使得本來1個(gè)Region的壓力得以分流到2個(gè)Region上。由此過程可知,HBase可是增添數(shù)據(jù),有所得更新和刪除操作,都是在Compact階段做的,因此,用戶寫操作只需要進(jìn)入到內(nèi)存即可立刻返回,進(jìn)而保證I/O高性能。HLog引入HLog原因:在散布式系統(tǒng)環(huán)境中,無法防備系統(tǒng)犯錯(cuò)或許宕機(jī),一旦HRegionServer不測(cè)退出,MemStore中的內(nèi)存數(shù)據(jù)就會(huì)拋棄,引入HLog就是防備這種情況工作系統(tǒng):每個(gè)HRegionServer中都會(huì)有一個(gè)HLog對(duì)象,HLog是一個(gè)實(shí)現(xiàn)WriteAheadLog的類,每次用戶操作寫入Memstore的同時(shí),也會(huì)寫一份數(shù)據(jù)到HLog文件,HLog文件如期會(huì)轉(zhuǎn)動(dòng)出新,并刪除舊的文件(已長久化到StoreFile中的數(shù)據(jù))。當(dāng)HRegionServer不測(cè)停止后,HMaster會(huì)經(jīng)過Zookeeper感知,HMaster第一辦理遺留的HLog文件,將不同樣region的log數(shù)據(jù)拆分,分別放到相應(yīng)region目錄下,爾后再將無效的region從頭分派,領(lǐng)取到這些region的HRegionServer在LoadRegion的過程中,會(huì)發(fā)現(xiàn)有歷史HLog需要辦理,因此會(huì)ReplayHLog中的數(shù)據(jù)到MemStore中,爾后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)。儲(chǔ)在
HBase儲(chǔ)藏格式HBase中的所有數(shù)據(jù)文件都存HadoopHDFS文件系統(tǒng)上,格式主要有兩種:
1HFileHBase中KeyValue的二進(jìn)制格式文件,實(shí)質(zhì)上
數(shù)據(jù)的儲(chǔ)藏格式,StoreFile就是對(duì)
HFile是HadoopHFile做了輕量級(jí)包裝,即
StoreFile
基層就是
HFile
2HLogFile
,HBase
中
WAL(WriteAheadLog)
的儲(chǔ)藏格式,物理上是Hadoop的SequenceFileHFile圖片講解:有兩個(gè):Trailer據(jù)塊的初步點(diǎn)
HFile文件不定長,長度固定的塊只和FileInfoTrailer中指針指向其他數(shù)FileInfo中記錄了文件的一些Meta信息,比方:AVG_KEY_LEN,AVG_VALUE_LEN,LAST_KEY,COMPARATOR,MAX_SEQ_ID_KEY等DataIndex和MetaIndex塊記錄了每個(gè)Data塊和Meta塊的初步點(diǎn)DataBlock是HBaseI/O的基本單元,為了提高效率,HRegionServer中有鑒于LRU的BlockCache系統(tǒng)每個(gè)Data塊的大小能夠在創(chuàng)立一個(gè)Table的時(shí)候經(jīng)過參數(shù)指定,大號(hào)的Block有利于次序Scan,小號(hào)Block利于隨機(jī)查問每個(gè)Data塊除了開頭的Magic之外就是一個(gè)個(gè)KeyValue對(duì)拼接而成,Magic內(nèi)容就是一些隨機(jī)數(shù)字,目的是防備數(shù)據(jù)破壞HFile里面的每個(gè)KeyValue對(duì)就是一個(gè)簡單的byte數(shù)組。這個(gè)byte數(shù)組里面包括了很多項(xiàng),而且有固定的構(gòu)造。Key
KeyLength和ValueLength:兩個(gè)固定的長度,分別代表和Value的長度Key部分:RowLength是固定長度的數(shù)值,表示
RowKey
的長度,
Row
就是
RowKeyColumnFamilyLength
是固定長度的數(shù)值,表示
Family
的長度
接著就是
ColumnFamily
,再接著是
Qualifier
,然后是兩個(gè)固定長度的數(shù)值,表示
TimeStamp
和
KeyType(Put/Delete)Value部分沒有這么復(fù)雜的構(gòu)造,就是純粹的二進(jìn)制數(shù)據(jù)HLogFileHLog文件就是一個(gè)一般的HadoopSequenceFile,SequenceFile的Key是HLogKey對(duì)象,HLogKey中記錄了寫入數(shù)據(jù)的歸屬信息,除了table和region名字外,同時(shí)還包括sequencenumber和timestamp,timestamp是“寫入時(shí)間”,sequencenumber的初步值為0,或許是近來一次存入文件系統(tǒng)中sequencenumber。HLogSequeceFile的Value是HBase的KeyValue對(duì)象,即對(duì)應(yīng)HFile中的KeyValue結(jié)束語:這篇文章是我專門在網(wǎng)上弄下來的,算是hbase部分的終極篇吧,我的服務(wù)端的源碼系列也要鑒于這個(gè)次序來張開。一.三層架構(gòu)圖二.系統(tǒng)各層次職責(zé)1.UI(UserInterface)層的職責(zé)是數(shù)據(jù)的展現(xiàn)和采集,數(shù)據(jù)采集的結(jié)果平時(shí)以Entityobject提交給BL層辦理。ServiceInterface側(cè)層用于將業(yè)務(wù)或數(shù)據(jù)資源宣布為服務(wù)(如WebServices)。2.BL(BusinessLogic)層的職責(zé)是按預(yù)定的業(yè)務(wù)邏輯辦理UI層提交的懇求。1)BusinessFunction子層負(fù)責(zé)基本業(yè)務(wù)功能的實(shí)現(xiàn)。2)BusinessFlow子層負(fù)責(zé)將BusinessFunction子層供給的多個(gè)基本業(yè)務(wù)功能組織成一個(gè)完滿的業(yè)務(wù)流。(Transaction只幸虧BusinessFlow子層開啟。)3.ResourceAccess層的職責(zé)是供給全面的資源接見功能支持,并向上層障蔽資源的根源。(1)BEM(BusinessEntityManager)子層采用DataAccess子層和ServiceAccess子層來供給業(yè)務(wù)需要的基礎(chǔ)數(shù)據(jù)/資源接見能力。(2)DataAccess子層負(fù)責(zé)從數(shù)據(jù)庫中存取資源,并向BEM子層障蔽所有的SQL語句以及數(shù)據(jù)庫種類差別。DBAdapter子層負(fù)責(zé)障蔽數(shù)據(jù)庫種類的差別。ORM子層負(fù)責(zé)供給對(duì)象-關(guān)系照射的功能。Relation子層供給ORM無法完成的鑒于關(guān)系(Relation)的數(shù)據(jù)接見功能。3)ServiceAccess子層用于以SOA的方式從外面系統(tǒng)獲取資源。注:ServiceEntrance用于簡化對(duì)Service的接見,它相當(dāng)于Service
的代理,客戶直接使用
ServiceEntrance就能夠接見系統(tǒng)宣布的服務(wù)。
Service
Entrance
為特定的平臺(tái)(如Java、.Net)供給強(qiáng)種類的接口,內(nèi)部可能隱蔽了復(fù)雜的參數(shù)種類變換。(4)ConfigAccess子層用于從配置文件中獲取配置object或?qū)⑴渲胦bject保留倒配置文件。4.Entity側(cè)層超越UI/BEM/ResourceManager層,在這些層之間傳達(dá)數(shù)據(jù)。Entity側(cè)層中包括三類Entity,以以下列圖所示:三.AspectAspect貫串于系統(tǒng)各層,是系統(tǒng)的橫切關(guān)注點(diǎn)。平時(shí)采用AOP技術(shù)來對(duì)橫切關(guān)注點(diǎn)進(jìn)行建模和實(shí)現(xiàn)。1.SecurtiyAspect:用于對(duì)整個(gè)系統(tǒng)的Security供給支持。2.ErrorHandlingAspect:整個(gè)系統(tǒng)采用一致的錯(cuò)誤/異樣處理方式。3.LogAspect:用于系統(tǒng)異樣、日志記錄、業(yè)務(wù)操作記錄等。四.規(guī)則1.系統(tǒng)各層次及層內(nèi)部子層次之間都不得跨層調(diào)用。2.Entityobject在各個(gè)層之間傳達(dá)數(shù)據(jù)。3.需要在UI層綁定到列表的數(shù)據(jù)采用鑒于關(guān)系的DataSet傳達(dá),除此之外,應(yīng)當(dāng)使用
Entityobject
傳達(dá)數(shù)據(jù)。4.對(duì)于每一個(gè)數(shù)據(jù)庫表(
Table)都有一個(gè)
DBEntityclass與之對(duì)應(yīng),針對(duì)每一個(gè)Entityclass都會(huì)有一個(gè)BEMClass與之對(duì)應(yīng)。5.有些跨數(shù)據(jù)庫或跨表的操作(如復(fù)雜的聯(lián)合查問)也需要由相應(yīng)的BEMClass來供給支持。6.對(duì)于相對(duì)簡單的系統(tǒng),能夠考慮將BusinessFunction子層和BusinessFlow子層歸并為一個(gè)。7.UI層和BL層禁止出現(xiàn)任何SQL語句。五.錯(cuò)誤與異樣異樣能夠分為系統(tǒng)異樣(如網(wǎng)絡(luò)突然斷開)和業(yè)務(wù)異樣(如用戶的輸入值高出最大范圍),業(yè)務(wù)異樣必定被轉(zhuǎn)化為業(yè)務(wù)履行的結(jié)果。1.DataAccess層不得向上層隱蔽任何異樣(該層拋出的異常幾乎都是系統(tǒng)異樣)。2.要明確區(qū)分業(yè)務(wù)履行的結(jié)果和系統(tǒng)異樣。比方考證用戶的合法性,若是對(duì)應(yīng)的用戶ID不存在,不應(yīng)該拋出異樣,而是返回(或經(jīng)過out參數(shù))一個(gè)表示考證結(jié)果的列舉值,這屬于業(yè)務(wù)履行的結(jié)果??墒?,若是在從數(shù)據(jù)庫中提取用戶信息時(shí),數(shù)據(jù)庫連結(jié)突然斷開,則應(yīng)當(dāng)拋出系統(tǒng)異樣。3.在有些情況下,BL層應(yīng)依照業(yè)務(wù)的需要捕獲某些系統(tǒng)異常,并將其轉(zhuǎn)變?yōu)闃I(yè)務(wù)履行的結(jié)果。比方,某個(gè)業(yè)務(wù)要求試探指定的數(shù)據(jù)庫可否可連結(jié),這時(shí)BL就需要將數(shù)據(jù)庫連結(jié)失敗的系統(tǒng)異樣變換為業(yè)務(wù)履行的結(jié)果。4.UI層(包括Service層)除了從調(diào)用BL層的API獲取的返回值來查察業(yè)務(wù)的履行結(jié)果外,還需要截獲所有的系統(tǒng)異樣,并將其講解為友好的錯(cuò)誤信息表現(xiàn)給用戶。六.項(xiàng)目組織目構(gòu)造以BAS系統(tǒng)為例。1.主目錄構(gòu)造:2.命名空間命名:每個(gè)dll的根命名空間即是該dll的名字,如EAS.BL.dll的根命名空間就是EAS.BL。每個(gè)根命名空間下面能夠依照需求的分類而增添子命名空間,比方,EAS.BL的子空間EAS.BL.Order與EAS.BL.Permission分別辦理不同樣的業(yè)務(wù)邏輯。3.包括眾多子項(xiàng)目的弘大項(xiàng)目的物理組織:核心子項(xiàng)目Core的地點(diǎn):Core子項(xiàng)目中包括一些公共的基礎(chǔ)設(shè)備,如錯(cuò)誤辦理、權(quán)限控制方面等。七.宣布服務(wù)與服務(wù)回調(diào)以EAS系統(tǒng)為例。1.同UI層的Page同樣,服務(wù)也不同樣意拋出任何異樣,而是應(yīng)當(dāng)以返回錯(cuò)誤碼(int型,1表示成功,其他值表示失敗)的形式來表示服務(wù)調(diào)用出現(xiàn)了錯(cuò)誤,若是方法有返回值,則返回值以out參數(shù)供給。2.若是BAS系統(tǒng)供給了WebService(Remoting)服務(wù),則BAS必定供給BAS.Entrance.dll。BAS.Entrance.dll封裝了與BAS服務(wù)互換信息的通信系統(tǒng),客戶系統(tǒng)只需經(jīng)過BAS.Entrance.dll就能夠特別簡單地接見BAS供給的服務(wù)。3.若是BAS需要經(jīng)過WebService(Remoting)回調(diào)客戶系統(tǒng),則必定供給可是定義了接口的BAS.CallBack.dll,客戶系統(tǒng)將引用該dll,實(shí)現(xiàn)其中的接口,并將其宣布為服務(wù),供BAS回調(diào)。4.當(dāng)WebService的參數(shù)或返回值需若是復(fù)雜種類――即架構(gòu)圖中的ServiceEntity,則ServiceEntity應(yīng)當(dāng)在對(duì)應(yīng)的BAS.EntranceParaDef.dll或BAS.CallBackParaDef.dll中定義。WebService定義的方法中的復(fù)雜種類應(yīng)當(dāng)使用Xml字符串取代(注意,Entrance和CallBack接口對(duì)應(yīng)服務(wù)的方法的參數(shù)是強(qiáng)種類的),而Xml字符串和復(fù)雜種類對(duì)象之間的變換應(yīng)當(dāng)在BAS.Entrance.dll或BAS.CallBack.dll中實(shí)現(xiàn)。從上圖中能夠看出,Android系統(tǒng)架構(gòu)為四層構(gòu)造,從上層到基層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層以及Linux內(nèi)核層,分別介紹以下:1)應(yīng)用程序?qū)覣ndroid平臺(tái)不能是是操作系統(tǒng),也包括了很多應(yīng)用程序,諸如SMS短信客戶端程序、電話撥號(hào)程序、圖片閱讀器、Web閱讀器等應(yīng)用程序。這些應(yīng)用程序都是用Java語言編寫的,而且這些應(yīng)用程序都是能夠被開發(fā)人員開發(fā)的其他應(yīng)用程序所取代,這點(diǎn)不同樣于其他手機(jī)操作系統(tǒng)固化在系統(tǒng)內(nèi)部的系統(tǒng)軟件,更為靈便和個(gè)性化。2)應(yīng)用程序框架層應(yīng)用程序框架層是我們從事Android開發(fā)的基礎(chǔ),很多核心應(yīng)用程序也是經(jīng)過這一層來實(shí)現(xiàn)其核心功能的,該層簡化了組件的重用,開發(fā)人員能夠直接使用其供給的組件來進(jìn)行快速的應(yīng)用程序開發(fā),也能夠經(jīng)過繼承而實(shí)現(xiàn)個(gè)性化的拓展。a)ActivityManager(活動(dòng)管理器)管理各個(gè)應(yīng)用程序生命周期以及平時(shí)的導(dǎo)航回退功能b)WindowManager(窗口管理器)管理所有的窗口程序c)ContentProvider(內(nèi)容供給器)使得不同樣應(yīng)用程序之間存取或許分享數(shù)據(jù)d)ViewSystem(視圖系統(tǒng))建立應(yīng)用程序的基本組件e)NotificationManager(通知管理器)使得應(yīng)用程序能夠在狀態(tài)欄中顯示自定義的提示信息f)PackageManager(擔(dān)保理器)Android系統(tǒng)內(nèi)的程序管理g)TelephonyManager(電話管理器)管理所有的搬動(dòng)設(shè)備功能h)ResourceManager(資源管理器)供給給用程序使用的各樣非代碼資源,如當(dāng)?shù)鼗址?、圖片、布局文件、顏色文件等i)LocationManager(地點(diǎn)管理器)供給地點(diǎn)服務(wù)j)XMPPService(XMPP服務(wù))供給GoogleTalk服務(wù)3)系統(tǒng)運(yùn)行庫層從圖中能夠看出,系統(tǒng)運(yùn)行庫層能夠分紅兩部分,分別是系統(tǒng)庫和Android運(yùn)行時(shí),分別介紹以下:a)系統(tǒng)庫系統(tǒng)庫是應(yīng)用程序框架的支撐,是連策應(yīng)用程序框架層與Linux內(nèi)核層的重要紐帶。其主要分為以下幾個(gè):SurfaceManager:履行多個(gè)應(yīng)用程序時(shí)候,負(fù)責(zé)管理顯示與存取操作間的互動(dòng),其他也負(fù)責(zé)2D繪圖與3D繪圖進(jìn)行顯示合成。MediaFramework:多媒體庫,鑒于PacketVideoOpenCore;支持多種常用的音頻、視頻格式錄制和回放,編碼格式包括MPEG4、MP3、H.264、AAC、ARM。SQLite:小型的關(guān)系型數(shù)據(jù)庫引擎OpenGL|ES:依照OpenGLES1.0API標(biāo)準(zhǔn)實(shí)現(xiàn)的3D繪圖函數(shù)庫FreeType:供給點(diǎn)陣字與向量字的描述與顯示W(wǎng)ebKit:一套網(wǎng)頁閱讀器的軟件引擎SGL:基層的2D圖形襯著引擎SSL:在Andorid上通信過程中實(shí)現(xiàn)握手Libc:從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫,專門為鑒于embeddedlinux的設(shè)備定制b)Android運(yùn)行時(shí)Android應(yīng)用程序時(shí)采用Java語言編寫,程序在Android運(yùn)行時(shí)中履行,其運(yùn)行時(shí)分為核心庫和Dalvik虛擬機(jī)兩部分。核心庫核心庫供給了Java語言API中的大部分功能,同時(shí)也包括了Android的一些核心API,如android.os、、android.media等等。Dalvik虛假機(jī)Android程序不同樣于J2me程序,每個(gè)Android應(yīng)用程序都有一個(gè)專有的進(jìn)度,而且不是多個(gè)程序運(yùn)行在一個(gè)虛假機(jī)中,而是每個(gè)Android程序都有一個(gè)Dalivik虛假機(jī)的實(shí)例,并在該實(shí)例中履行。Dalvik虛假機(jī)是一種鑒于寄存器的Java虛假機(jī),而不是傳統(tǒng)的鑒于棧的虛假機(jī),并進(jìn)行了內(nèi)存資源使用的優(yōu)化以及支持多個(gè)虛假機(jī)的特色。需要注意的是,不同樣于J2me,Android程序在虛假機(jī)中履行的其實(shí)不是編譯后的字節(jié)碼,而是經(jīng)過變換工具dx將Java字節(jié)碼轉(zhuǎn)成dex格式的中間碼。4)Linux內(nèi)核層Android是鑒于Linux2.6內(nèi)核,其核心系統(tǒng)服務(wù)如安全性、內(nèi)存管理、進(jìn)度管理、網(wǎng)路協(xié)議以及驅(qū)動(dòng)模型都依賴于Linux內(nèi)核。EntityFramework的全稱是ADO.NETEntityFramework,是微軟開發(fā)的鑒于ADO.NET的ORM(Object/RelationalMapping)框架。EntityFramework的主要特色:1.支持多種數(shù)據(jù)庫(MicrosoftSQLServer,Oracle,andDB2);激烈的照射引擎,能很好地支持儲(chǔ)藏過程;供給VisualStudio集成工具,進(jìn)行可視化操作;能夠與ASP.NET,WPF,WCF,WCFDataServices進(jìn)行很好的集成。架構(gòu)圖一架構(gòu)圖2剛剛抵達(dá)一家新公司,第一會(huì)對(duì)項(xiàng)目進(jìn)行一個(gè)大概認(rèn)識(shí),研究了兩天了,有了個(gè)整體的掌握了,下面就是我這個(gè)小菜鳥畫的簡單系統(tǒng)架構(gòu)圖!有的時(shí)候架構(gòu)弘大的嚇人,有的時(shí)候架構(gòu)一眼看破,但里面卻隱蔽殺機(jī),真的需要我們?nèi)プ屑?xì)學(xué)習(xí),推測(cè)!不久前在園子里面看過一篇文章其中說道,設(shè)計(jì)架構(gòu)可是就是一個(gè)字→“拆”,當(dāng)時(shí)看到這個(gè)字,想起來還真的是這么一回事,可是這里面去包括了很多的東西,我們現(xiàn)在就是不知道怎么拆,這個(gè)也不是一時(shí)半會(huì)能夠認(rèn)識(shí)的,需要我們認(rèn)仔細(xì)真的做,慢慢的積累,到時(shí)候就知道怎么拆了,而且還拆的很到位,因此加油!對(duì)于這個(gè)拆字園友們也給出了很多的理解,這是可是個(gè)人見解!Struts2架構(gòu)圖Struts2架構(gòu)圖懇求第一經(jīng)過Filterchain,F(xiàn)ilter主要包括ActionContextCleanUp,它主要清理目前線程的ActionContext和Dispatcher;FilterDispatcher主要經(jīng)過AcionMapper來決定需要調(diào)用哪個(gè)Action。ActionMapper獲取了ActionMapping后,在Dispatcher的serviceAction方法里創(chuàng)立ActionProxy,ActionProxy創(chuàng)立ActionInvocation,爾后ActionInvocation調(diào)用Interceptors,履行Action自己,創(chuàng)立Result并返回,自然,若是要在返回以前做些什么,能夠?qū)崿F(xiàn)PreResultListener。Struts2部分類介紹這部分從Struts2參照文檔中翻譯就能夠了。ActionMapperActionMapper
實(shí)質(zhì)上是
HttpServletRequest
和
Action調(diào)用懇求的一個(gè)照射,它障蔽了
Action
對(duì)于
Request等
javaServlet類的依靠。Struts2中它的默認(rèn)實(shí)現(xiàn)類是DefaultActionMapper,ActionMapper很大的用途能夠依照自己的需要來設(shè)計(jì)url格式,它自己也有Restful的實(shí)現(xiàn),詳盡能夠參照文檔的
docs\actionmapper.html。ActionProxy&ActionInvocationAction的一個(gè)代理,由ActionProxyFactory創(chuàng)立,它自己不包括Action實(shí)例,默認(rèn)實(shí)現(xiàn)DefaultActionProxy是由ActionInvocation擁有Action實(shí)例。ActionProxy作用是如何獲取Action,不論是當(dāng)?shù)厝允沁h(yuǎn)程。而ActionInvocation的作用是怎樣履行Action,攔截器的功能就是在ActionInvocation中實(shí)現(xiàn)的。ConfigurationProvider&ConfigurationConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主若是特別實(shí)現(xiàn)類XmlConfigurationProvider及其子類StrutsXmlConfigurationProvider來剖析,Struts2懇求流程1、客戶端發(fā)送懇求2、懇求先經(jīng)過ActionContextCleanUp-->FilterDispatcher3、FilterDispatcher經(jīng)過ActionMapper來決定這個(gè)Request需要調(diào)用哪個(gè)Action4、若是ActionMapper決定調(diào)用某個(gè)Action,F(xiàn)ilterDispatcher把懇求的辦理交給ActionProxy,這兒已經(jīng)轉(zhuǎn)到它的Delegate--Dispatcher來履行5、ActionProxy依照ActionMapping和ConfigurationManager找到需要調(diào)用的Action類6、ActionProxy創(chuàng)立一個(gè)ActionInvocation的實(shí)例7、ActionInvocation調(diào)用真實(shí)的Action,自然這波及到有關(guān)攔截器的調(diào)用8、Action履行完成,ActionInvocation創(chuàng)立Result并返回,自然,若是要在返回以前做些什么,能夠?qū)崿F(xiàn)PreResultListener。增添PreResultListener能夠在Interceptor中實(shí)現(xiàn),不知道其他還有什么方式?短連結(jié)聊天服務(wù),每半分鐘刷新一次..客戶端可切換3種襯著模式,全位圖blit傳輸:sprite區(qū)塊和MC架構(gòu)圖:模塊與模塊之間的通信也經(jīng)過sendNotifcation發(fā)送信息。神仙道尋路方法:1.2點(diǎn)可否能夠直接抵達(dá),能夠,則不走尋路,直接前進(jìn)2.2點(diǎn)不能夠直接抵達(dá),進(jìn)行尋路,找不到結(jié)果,搜尋取代點(diǎn)3.正常尋路對(duì)于flash共享庫:若是a的庫里的資源設(shè)置了共享資源并設(shè)置了一個(gè)url把a(bǔ)宣布的swf放到設(shè)置的url的地點(diǎn)b引入a的庫里共享的資源..再宣布b..這時(shí)b會(huì)自動(dòng)從那個(gè)設(shè)置的url加載a閱讀器緩存地點(diǎn):C:\DocumentsandSettings\Administrator\LocalSettings\TemporaryInternetFiles網(wǎng)頁游戲的swf都加載到這里了。<深度排序>那就不停的遍歷更具顯示對(duì)象的Y設(shè)置它們?cè)偃萜骼锩娴纳疃炔恢腊淹溜@示對(duì)象的Y再數(shù)組里面排序好再設(shè)置深度速度快仍是變排序邊設(shè)置深度快而且在數(shù)組里面排序好這種方法要速度很好把圖層封裝成一個(gè)類。和NPC和玩家都共同繼承一個(gè)接口iworldObject加一個(gè)屬性depth.創(chuàng)立的時(shí)候設(shè)置這個(gè)屬性。爾后sortOn("depth");Array.Numberic啊默認(rèn)都是從小到大排序的depth是他的一個(gè)屬性npc也一致有這個(gè)屬性爾后就不用y軸排序了,看你的y+height挺糾結(jié)的一致用depth這個(gè)屬性排序這里判斷這個(gè)玩家的深度若是已經(jīng)符合,就不要排序。setChildIndex耗資挺大的詳解三層架構(gòu)圖PS:在看三層架構(gòu)的時(shí)候,找的了一個(gè)我感覺不錯(cuò)的資料,里面有以下一張圖,打算詳盡的講解一下這張圖,也總結(jié)一下三層的知識(shí)一、系統(tǒng)各層次職責(zé)1.UI(UserInterface)層的職責(zé)是數(shù)據(jù)的展現(xiàn)和采集,數(shù)據(jù)采集的結(jié)果平時(shí)以Entityobject提交給BL層辦理ServiceInterface側(cè)層用于將業(yè)務(wù)或數(shù)據(jù)資源宣布為服務(wù)(如WebServices)。2.BL(BusinessLogic)層的職責(zé)是按預(yù)定的業(yè)務(wù)邏輯處理UI層提交的懇求。1)BusinessFunction子層負(fù)責(zé)基本業(yè)務(wù)功能的實(shí)現(xiàn)。2)BusinessFlow子層負(fù)責(zé)將BusinessFunction子層供給的多個(gè)基本業(yè)務(wù)功能組織成一個(gè)完滿的業(yè)務(wù)流(Transaction只幸虧BusinessFlow子層開啟。)3.ResourceAccess層的職責(zé)是供給全面的資源接見功能支持,并向上層障蔽資源的根源。1)BEM(BusinessEntityManager)子層采用DataAccess子層和ServiceAccess子層來供給業(yè)務(wù)需要的基礎(chǔ)數(shù)據(jù)/資源接見能力。(2)DataAccess子層負(fù)責(zé)從數(shù)據(jù)庫中存取資源,并向BEM子層障蔽所有的SQL語句以及數(shù)據(jù)庫種類差別。DBAdapter子層負(fù)責(zé)障蔽數(shù)據(jù)庫種類的差別。ORM子層負(fù)責(zé)供給對(duì)象-關(guān)系照射的功能。Relation子層供給ORM無法完成的鑒于關(guān)系(Relation)的數(shù)據(jù)接見功能。3)ServiceAccess子層用于以SOA的方式從外面系統(tǒng)獲取資源。注:ServiceEntrance用于簡化對(duì)Service的接見,它相當(dāng)于Service的代理,客戶直接使用ServiceEntrance就能夠接見系統(tǒng)宣布的服務(wù)。ServiceEntrance為特定的平臺(tái)(如Java、.Net)供給強(qiáng)種類的接口,內(nèi)部可能隱蔽了復(fù)雜的參數(shù)種類變換。(4)ConfigAccess子層用于從配置文件中獲取配置object或?qū)⑴渲胦bject保留倒配置文件。4.Entity側(cè)層超越UI/BEM/ResourceManager層,在這些層之間傳達(dá)數(shù)據(jù)。Entity側(cè)層中包括三類Entity,以以下列圖所示:二、AspectAspect貫串于系統(tǒng)各層,是系統(tǒng)的橫切關(guān)注點(diǎn)。平時(shí)采用AOP技術(shù)來對(duì)橫切關(guān)注點(diǎn)進(jìn)行建模和實(shí)現(xiàn)。1.SecurtiyAspect:用于對(duì)整個(gè)系統(tǒng)的Security供給支持。2.ErrorHandlingAspect:整個(gè)系統(tǒng)采用一致的錯(cuò)誤/異常辦理方式。3.LogAspect:用于系統(tǒng)異樣、日志記錄、業(yè)務(wù)操作記錄等。三、規(guī)則1.系統(tǒng)各層次及層內(nèi)部子層次之間都不得跨層調(diào)用。2.Entityobject在各個(gè)層之間傳達(dá)數(shù)據(jù)。3.需要在UI層綁定到列表的數(shù)據(jù)采用鑒于關(guān)系的DataSet傳達(dá),除此之外,應(yīng)當(dāng)使用Entityobject傳達(dá)數(shù)據(jù)。4.對(duì)于每一個(gè)數(shù)據(jù)庫表(Table)都有一個(gè)DBEntityclass與之對(duì)應(yīng),針對(duì)每一個(gè)Entityclass都會(huì)有一個(gè)BEMClass與之對(duì)應(yīng)。5.有些跨數(shù)據(jù)庫或跨表的操作(如復(fù)雜的聯(lián)合查問)也需要由相應(yīng)的BEMClass來供給支持。6.對(duì)于相對(duì)簡單的系統(tǒng),能夠考慮將BusinessFunction子層和BusinessFlow子層歸并為一個(gè)。7.UI層和BL層禁止出現(xiàn)任何SQL語句。四、錯(cuò)誤與異樣異樣能夠分為系統(tǒng)異樣(如網(wǎng)絡(luò)突然斷開)和業(yè)務(wù)異樣(如用戶的輸入值高出最大范圍),業(yè)務(wù)異樣必定被轉(zhuǎn)變?yōu)闃I(yè)務(wù)履行的結(jié)果。1.DataAccess層不得向上層隱蔽任何異樣(該層拋出的異樣幾乎都是系統(tǒng)異樣)。2.要明確區(qū)分業(yè)務(wù)履行的結(jié)果和系統(tǒng)異樣。比方考證用戶的合法性,若是對(duì)應(yīng)的用戶ID不存在,不應(yīng)該拋出異常,而是返回(或經(jīng)過out參數(shù))一個(gè)表示考證結(jié)果的列舉值,這屬于業(yè)務(wù)履行的結(jié)果??墒?,若是在從數(shù)據(jù)庫中提取用戶信息時(shí),數(shù)據(jù)庫連結(jié)突然斷開,則應(yīng)當(dāng)拋出系統(tǒng)異樣。3.在有些情況下,BL層應(yīng)依照業(yè)務(wù)的需要捕獲某些系統(tǒng)異樣,并將其轉(zhuǎn)變?yōu)闃I(yè)務(wù)履行的結(jié)果。比方,某個(gè)業(yè)務(wù)要求試試指定的數(shù)據(jù)庫可否可連結(jié),這時(shí)BL就需要將數(shù)據(jù)庫連結(jié)失敗的系統(tǒng)異樣變換為業(yè)務(wù)履行的結(jié)果。4.UI層(包括Service層)除了從調(diào)用BL層的API獲取的返回值來查察業(yè)務(wù)的履行結(jié)果外,還需要截獲所有的系統(tǒng)異樣,并將其講解為友好的錯(cuò)誤信息表現(xiàn)給用戶。五、項(xiàng)目組織目構(gòu)造以BAS系統(tǒng)為例。1.主目錄構(gòu)造:2.命名空間命名:每個(gè)dll的根命名空間即是該dll的名字,如EAS.BL.dll的根命名空間就是EAS.BL。每個(gè)根命名空間下面能夠依照需求的分類而增添子命名空間,比方,EAS.BL的子空間EAS.BL.Order與EAS.BL.Permission分別辦理不同樣的業(yè)務(wù)邏輯。3.包括眾多子項(xiàng)目的弘大項(xiàng)目的物理組織:核心子項(xiàng)目Core的地點(diǎn):Core子項(xiàng)目中包括一些公共的基礎(chǔ)設(shè)備,如錯(cuò)誤辦理、權(quán)限控制方面等。六、宣布服務(wù)與服務(wù)回調(diào)以EAS系統(tǒng)為例。1.同UI層的Page同樣,服務(wù)也不同樣意拋出任何異樣,而是應(yīng)當(dāng)以返回錯(cuò)誤碼(int型,1表示成功,其他值表示失敗)的形式來表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版八年級(jí)物理上冊(cè)《2.3聲的利用》同步測(cè)試題及答案
- 教科版小學(xué)科學(xué)復(fù)習(xí)資料(3-6年級(jí))
- 高一化學(xué)成長訓(xùn)練:第二單元微粒之間的相互作用力
- 2024高中地理第二章自然環(huán)境中的物質(zhì)運(yùn)動(dòng)和能量交換4水循環(huán)和洋流學(xué)案湘教版必修1
- 2024高中語文第三單元因聲求氣吟詠詩韻虞美人訓(xùn)練含解析新人教版選修中國古代詩歌散文欣賞
- 2024高考地理一輪復(fù)習(xí)第二部分人文地理-重在運(yùn)用第五章交通運(yùn)輸布局及其影響第24講交通運(yùn)輸方式和布局學(xué)案新人教版
- 2024高考地理一輪復(fù)習(xí)專練75歐洲西部地區(qū)含解析新人教版
- 2025高考數(shù)學(xué)考點(diǎn)剖析精創(chuàng)專題卷二-函數(shù)與導(dǎo)數(shù)【含答案】
- 運(yùn)動(dòng)會(huì)入場(chǎng)詞
- 物流運(yùn)營管理與外包合作合同范例
- 人教版數(shù)學(xué)二年級(jí)下冊(cè)全冊(cè)核心素養(yǎng)目標(biāo)教學(xué)設(shè)計(jì)
- 爛尾樓工程聯(lián)建檢測(cè)與鑒定
- 運(yùn)用OGSM進(jìn)行工作管理
- 汽車技術(shù)服務(wù)與營銷畢業(yè)論文備選題目
- Reaxys使用方法
- 跌落測(cè)試(中文版)ISTA2A2006
- 云南省教育科學(xué)規(guī)劃課題開題報(bào)告 - 云南省教育科學(xué)研究院
- 常用鋼材尺寸允許偏差范圍(2013)
- 蒸汽管道施工方案(20201118222709)
- 漢語教程第一冊(cè)-上-測(cè)試
- 免疫球蛋白的功能ppt課件
評(píng)論
0/150
提交評(píng)論