版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淺談網(wǎng)站架構(gòu)中緩存的應(yīng)用, 朱曄 2010年6月,緩存恢恢,疏而不漏,內(nèi)容概要,緩存的基本知識(shí) 網(wǎng)站架構(gòu)中緩存的分類(lèi) 影響緩存命中率的因素 緩存常見(jiàn)的模式和實(shí)現(xiàn) 緩存的更新過(guò)期和清除策略 包裹著緩存紗布的數(shù)據(jù)庫(kù) 緩存存儲(chǔ)方式的選擇 緩存的同步問(wèn)題 緩存的顛簸問(wèn)題 分布式緩存系統(tǒng)的需求 memcache的基本介紹 memcache的使用誤區(qū)和實(shí)踐 windows server appfabric caching,緩存的基本知識(shí),緩存的由來(lái) 兩種介質(zhì)的速度不匹配(差距較大)的問(wèn)題導(dǎo)致?高速方在和低速方交互的時(shí)候因等待速度趨近于低速方,并且閑置得不到有效利用。 存在第三種介質(zhì),速度介于兩者之間, 價(jià)
2、格介于兩者之間。通過(guò)引入這種介質(zhì),把低速方部分內(nèi)容保存在這個(gè)介質(zhì)中,高速方大多情況下無(wú)須和低速方直接交互來(lái)提高整體性能。 典型的例子:cpu緩存(高速方cpu低速方內(nèi)存),內(nèi)存(高速方cpu低速方磁盤(pán))。 緩存的分類(lèi) 硬件領(lǐng)域中緩存(某種介質(zhì)),軟件領(lǐng)域中的緩存(不限于某種介質(zhì),只是一種手段),我們之后談的緩存都是軟件緩存。 讀取緩存(解決讀取速度慢),寫(xiě)入緩存(解決寫(xiě)入速度慢),讀寫(xiě)緩存。 狹義上解決介質(zhì)讀寫(xiě)速度不匹配問(wèn)題,廣義上包括任何利用中間媒介提高速度的方法,包括空間換時(shí)間,動(dòng)態(tài)操作變?yōu)殪o態(tài)操作。,緩存的基本知識(shí),緩存(cache)和緩沖(buffer) 緩存:可以共享,多種數(shù)據(jù),大小
3、不固定,可以重復(fù)使用,已知數(shù)據(jù),用于提高io效率。 緩沖:不可以共享,單一數(shù)據(jù),大小固定,讀取后失效,命中100%,未知數(shù)據(jù),用于減少io次數(shù)。 緩存的屬性 命中率:從緩存中返回正確數(shù)據(jù)的次數(shù)/總請(qǐng)求次數(shù)。 容量:超過(guò)這個(gè)值啟用一定的策略:轉(zhuǎn)移到磁盤(pán);轉(zhuǎn)移到遠(yuǎn)端;清空部分。 存儲(chǔ)介質(zhì):內(nèi)存、磁盤(pán)。 成本:開(kāi)發(fā)成本、部署成本、硬件成本。 效率:set效率、get效率、序列化、哈希算法、分布式算法。 緩存的限制 由于價(jià)格的因素,緩存實(shí)現(xiàn)依賴(lài)的存儲(chǔ)往往有大小限制保存什么,舍棄什么,命中率。 緩存往往是從無(wú)到有的在最初階段不能發(fā)揮作用,在不命中的時(shí)候性能顛簸。,網(wǎng)站架構(gòu)中緩存的分類(lèi),按照存儲(chǔ)介質(zhì)來(lái)分
4、內(nèi)存(網(wǎng)站進(jìn)程內(nèi)、同服務(wù)器獨(dú)立進(jìn)程、獨(dú)立服務(wù)器、分布式服務(wù)器組)。 磁盤(pán)(本地文件和數(shù)據(jù)庫(kù),獨(dú)立服務(wù)器、分布式服務(wù)器組)。 緩存可以使用磁盤(pán)而不僅僅是內(nèi)存。 按照存儲(chǔ)的數(shù)據(jù)來(lái)分 直接用于輸出的整頁(yè)(html、腳本樣式、圖片)。 片段頁(yè)(可供多個(gè)客戶端使用的html、腳本樣式等)。 索引和聚合數(shù)據(jù)(空間換時(shí)間)。 耗時(shí)查詢(xún)的結(jié)果數(shù)據(jù)。 和業(yè)務(wù)相關(guān)的大塊數(shù)據(jù)(列表數(shù)據(jù),引用數(shù)據(jù))。 和業(yè)務(wù)相關(guān)的小級(jí)數(shù)據(jù)(行級(jí)數(shù)據(jù),資源數(shù)據(jù))。 和上下文(用戶)相關(guān)的數(shù)據(jù)(活動(dòng)數(shù)據(jù))。 按照實(shí)現(xiàn)方式來(lái)分 框架或引擎內(nèi)置的緩存(比如orm緩存和sql server緩存)。 安裝特定的組件根據(jù)規(guī)則自動(dòng)實(shí)現(xiàn)緩存(比如反向
5、代理和輸出緩存)。 需要由開(kāi)發(fā)以編程方式實(shí)現(xiàn)的緩存(比如業(yè)務(wù)數(shù)據(jù)緩存)。 按照作用來(lái)分 用于數(shù)據(jù)的讀?。ㄖ蠼榻B的大部分內(nèi)容都是基于此類(lèi)緩存) 用于(允許丟失)數(shù)據(jù)的寫(xiě)入寫(xiě)到緩存的隊(duì)列中,再由工作線程提交處理(寫(xiě)入存儲(chǔ)),影響緩存命中率的因素,假設(shè)數(shù)據(jù)庫(kù)的訪問(wèn)操作需要5毫秒。 第一個(gè)測(cè)試固定key的范圍,第二個(gè)測(cè)試固定緩存時(shí)間。 對(duì)于相同的請(qǐng)求數(shù),隨著緩存時(shí)間的上升(實(shí)時(shí)性下降),緩存命中率明顯上升。 對(duì)于相同的緩存時(shí)間,隨著請(qǐng)求數(shù)的上升(時(shí)間的推移),緩存命中率保持穩(wěn)定。 在相同的緩存時(shí)間下(2秒),緩存key的跨度越大命中率越低,往往key的范圍很大預(yù)示著緩存的粒度太粗,key所容納的條件
6、太多。,影響緩存命中率的因素,影響命中率的因素 業(yè)務(wù)需求決定的時(shí)效性(體現(xiàn)在緩存的過(guò)期時(shí)間)。 硬件基礎(chǔ)結(jié)構(gòu)決定的容量(即使未過(guò)期都可能會(huì)刪除lru)。 軟件架構(gòu)設(shè)計(jì)決定的緩存的粒度 key = 帖子id; value = 所有跟貼數(shù)據(jù)。 key = 帖子id; value = 一條帖子的數(shù)據(jù) 以及 key = 帖子id; value = 跟貼id列表。 緩存的設(shè)計(jì)(包括替換策略等) 提高緩存命中率的方法 權(quán)衡業(yè)務(wù)、基礎(chǔ)結(jié)構(gòu)和架構(gòu)設(shè)計(jì)。 預(yù)熱、增加過(guò)期時(shí)間、增加存儲(chǔ)容量、調(diào)整緩存項(xiàng)的鍵值算法、對(duì)熱點(diǎn)問(wèn)題的捕捉。 對(duì)于時(shí)效性很高(或緩存空間有限),內(nèi)容跨度很大(或訪問(wèn)很隨機(jī)),并且訪問(wèn)量不高的應(yīng)
7、用來(lái)說(shuō)緩存命中率可能長(zhǎng)期接近于0,預(yù)熱后的緩存還沒(méi)來(lái)得及為后人服務(wù)就已經(jīng)冷卻。,緩存常見(jiàn)的模式和實(shí)現(xiàn),延遲加載的緩存 主要用于緩存計(jì)算后的小塊數(shù)據(jù) 依靠用戶的請(qǐng)求加載數(shù)據(jù) 一開(kāi)始命中率低(可以通過(guò)預(yù)熱提高命中率) 隨著用戶訪問(wèn)的增多命中率逐漸提高 隨著緩存的過(guò)期命中率保持穩(wěn)定 “冷門(mén)”的數(shù)據(jù)可能始終從數(shù)據(jù)庫(kù)獲取 適合分布式緩存 預(yù)加載的緩存 主要用于緩存計(jì)算前的原始大塊數(shù)據(jù) 一般緩存的(元)數(shù)據(jù)不太需要更新 大多采用主動(dòng)更新 一般信任緩存的數(shù)據(jù) 考慮初始化的時(shí)候多臺(tái)服務(wù)器對(duì)數(shù)據(jù)庫(kù)的沖擊 不適合分布式緩存,緩存常見(jiàn)的模式和實(shí)現(xiàn),操作緩存(異步隊(duì)列) 優(yōu)點(diǎn)是把瞬時(shí)的流量沖擊“磨平”,可以控制一定的
8、“帶寬”對(duì)數(shù)據(jù)庫(kù)操作,而不是“壓垮”,以及不阻塞調(diào)用方線程。 缺點(diǎn)是不能保證返回結(jié)果的時(shí)間。 注意要平衡寫(xiě)入速度和處理速度,要確保緩存的容量足夠大,能應(yīng)付peak time。飯店生意興旺沒(méi)有座位的時(shí)候可以選擇不接受新客人或是讓客人排隊(duì)等候,如果來(lái)的客人永遠(yuǎn)比走的客人多,那么只能考慮再開(kāi)一個(gè)飯店了。,緩存的更新、過(guò)期和清除策略,緩存的更新策略 a 由獲取數(shù)據(jù)請(qǐng)求觸發(fā)的被動(dòng)更新 b 由更新數(shù)據(jù)請(qǐng)求觸發(fā)的主動(dòng)更新(雙寫(xiě)) c 使用獨(dú)立線程主動(dòng)定時(shí)更新緩存 d 回調(diào)方式更新(過(guò)期或依賴(lài)) e 永遠(yuǎn)不更新? 緩存的過(guò)期(失效)策略 f 絕對(duì)的過(guò)期時(shí)間 g 平滑過(guò)期(有人使用就不會(huì)過(guò)期) h 依賴(lài)方式(依
9、賴(lài)數(shù)據(jù)庫(kù)、依賴(lài)文件) i 永遠(yuǎn)不過(guò)期? 緩存的清除(替換)策略: rand 刪除隨機(jī)數(shù)據(jù),不能反映局部性。 size 刪除最大的數(shù)據(jù)。 fifo,first in first out 刪除最先進(jìn)入緩存的數(shù)據(jù),不能反映局部性。 lfu,least frequently used 刪除一直以來(lái)最少被使用的數(shù)據(jù)。 lru,least recently used 刪除最近最少使用的數(shù)據(jù)。 常見(jiàn)模式 延遲加載方式:a+f 預(yù)加載方式:b/c/e+i,包裹著緩存紗布的數(shù)據(jù)庫(kù),靜態(tài)資源被瀏覽器、反向代理?yè)醯?,很少能擊中web服務(wù)器 實(shí)時(shí)性不高的動(dòng)態(tài)頁(yè),可以整頁(yè)緩存在反向代理端 實(shí)時(shí)性高,參數(shù)復(fù)雜的動(dòng)態(tài)頁(yè),分
10、為10個(gè)頁(yè)面片段 其中4個(gè)頁(yè)面片段,呈現(xiàn)層直接在分布式緩存中找到 剩余6個(gè)頁(yè)面片段web服務(wù)器無(wú)法直接獲取。但所需的數(shù)據(jù),其中4個(gè)可以由應(yīng)用服務(wù)器結(jié)合自己的緩存和分布式緩存計(jì)算得到,1個(gè)由應(yīng)用服務(wù)器基于內(nèi)存的業(yè)務(wù)數(shù)據(jù)得到 最終只有1個(gè)查詢(xún)落到數(shù)據(jù)庫(kù)端(還不一定需要訪問(wèn)磁盤(pán)) 需要考慮的問(wèn)題? 如果數(shù)據(jù)有重疊,需要刷新緩存怎么辦? 開(kāi)發(fā)人員各自實(shí)現(xiàn)自己的緩存,造成浪費(fèi),增加debug難度。,緩存存儲(chǔ)方式的選擇,緩存存儲(chǔ)方式的選擇,背景: 單臺(tái)服務(wù)器2g內(nèi)存,200g磁盤(pán) 內(nèi)網(wǎng)千兆帶寬 緩存5kb省市聯(lián)動(dòng)數(shù)據(jù) 緩存10kb請(qǐng)求中產(chǎn)生的數(shù)據(jù) 緩存100kb網(wǎng)站配置文件 緩存10mb敏感過(guò)濾詞列表 緩
11、存100mb游戲列表數(shù)據(jù) 緩存500m cms頁(yè)面數(shù)據(jù) 緩存1gb辭典原始數(shù)據(jù) 緩存1gb行級(jí)發(fā)布單數(shù)據(jù) 緩存1gb查詢(xún)結(jié)果數(shù)據(jù) 緩存100gb的報(bào)表聚合數(shù)據(jù) 緩存1tb的搜索索引數(shù)據(jù) 特殊情況下可否考慮多種存儲(chǔ)聯(lián)合使用?二級(jí)緩存,緩存的同步問(wèn)題,什么時(shí)候需要同步緩存? 多份相同的數(shù)據(jù)保存在多個(gè)點(diǎn),比如負(fù)載均衡的應(yīng)用服務(wù)器中的大塊業(yè)務(wù)數(shù)據(jù)。 對(duì)數(shù)據(jù)實(shí)時(shí)性要求高,或是不允許數(shù)據(jù)出現(xiàn)不一致的現(xiàn)象,各自過(guò)期不能滿足要求。 緩存同步的方式? 被動(dòng)同步:讓緩存依賴(lài)到一個(gè)點(diǎn)(文件、數(shù)據(jù)庫(kù)等)多份緩存同時(shí)過(guò)期,不適合永不過(guò)期的大塊數(shù)據(jù),不適合主動(dòng)更新的緩存,存在一定的延時(shí)。 主動(dòng)同步:把最新的keyvalu
12、e傳給各個(gè)節(jié)點(diǎn),或是把需要的key傳給各個(gè)節(jié)點(diǎn),由每一個(gè)節(jié)點(diǎn)從一個(gè)點(diǎn)(比如數(shù)據(jù)庫(kù)或memcache)去更新最新的值(后者也可以通過(guò)獨(dú)立的同步服務(wù)進(jìn)行)。 緩存同步的問(wèn)題? 消耗太多的資源:一份數(shù)據(jù)因?yàn)橥皆诰W(wǎng)絡(luò)上傳多份,同步時(shí)的鎖,在端點(diǎn)很多的時(shí)候創(chuàng)建過(guò)多的連接。 需要這么做的時(shí)候考慮一下,需要同步的數(shù)據(jù)是否適合緩存,如果是的話,是否能在單點(diǎn)緩存?,緩存的顛簸問(wèn)題,什么是緩存的顛簸問(wèn)題? 緩存失效后到緩存重建之間的時(shí)間內(nèi),由于用戶都會(huì)訪問(wèn)數(shù)據(jù)庫(kù)導(dǎo)致性能急劇下降。 應(yīng)用服務(wù)啟動(dòng)的時(shí)候初始大量的數(shù)據(jù),大量的應(yīng)用服務(wù)器同時(shí)啟動(dòng)給數(shù)據(jù)庫(kù)造成巨大壓力。 緩存可以改善性能,但是緩存也可能會(huì)在瞬時(shí)給系統(tǒng)造成
13、巨大的壓力,并且,由于緩存的存在,我們很難預(yù)測(cè)數(shù)據(jù)庫(kù)真正需要面對(duì)的壓力,一旦緩存基礎(chǔ)服務(wù)癱瘓,整個(gè)系統(tǒng)可能就癱瘓了。 有什么應(yīng)對(duì)方法? 考慮讓緩存永不失效,主動(dòng)更新緩存,采用替換引用方式更新(主/次緩存),而不是先刪除。 對(duì)于大塊緩存的初始化考慮按需加載(延遲加載),或是盡量避免同時(shí)重啟初始化服務(wù)。 壓力測(cè)試考慮無(wú)緩存服務(wù)的情況。 還要注意盡量讓外界無(wú)法干擾key的生成,否則可能會(huì)帶來(lái)過(guò)多無(wú)效數(shù)據(jù)穿透緩存(比如直接根據(jù)querystring作為key來(lái)查詢(xún)緩存不是好辦法,不信任或不直接使用任何來(lái)自客戶端的東西)。,分布式緩存系統(tǒng)的需求,為什么選擇分布式架構(gòu)?太多的理由! 單臺(tái)服務(wù)器的資源(內(nèi)存
14、)不足以支撐我們的應(yīng)用。 負(fù)載均衡的服務(wù)器緩存了大量相同的拷貝。 負(fù)載均衡的服務(wù)器緩存需要同步,或者多點(diǎn)更新。 負(fù)載均衡的服務(wù)器在緩存丟失的時(shí)候?qū)?shù)據(jù)庫(kù)同時(shí)發(fā)起“攻擊”。 我們有很多服務(wù)器cpu資源緊張而內(nèi)存資源充足,得不到有效利用。 為什么存儲(chǔ)方式選擇內(nèi)存??jī)?nèi)存真不貴! 主要用于解決磁盤(pán)速度太慢。 使用cpu緩存不太現(xiàn)實(shí),即使可以速度也和網(wǎng)絡(luò)不匹配 。 為什么存儲(chǔ)結(jié)構(gòu)選擇哈希表(key-value)? 快速時(shí)間復(fù)雜度o(1)。 穩(wěn)定一直是o(1)。 簡(jiǎn)單get/set/del。 天生就適合分布式不需要考慮如何拆分,key-value的粒度足夠小。 不過(guò)我們要針對(duì)key和value的設(shè)計(jì)做很多
15、工作,這又關(guān)于緩存的貢獻(xiàn)度。 于是乎,我們想到了memcache,memcache的基本介紹,分布式內(nèi)存對(duì)象緩存系統(tǒng);表現(xiàn)為分布式內(nèi)存哈希表dht; c/s架構(gòu);客戶端決定分布;服務(wù)端之間互不通信;多平臺(tái);見(jiàn)縫插針; 不是數(shù)據(jù)庫(kù);不提供故障轉(zhuǎn)移;不提供容災(zāi);不提供驗(yàn)證; 多客戶端訪問(wèn)相同數(shù)據(jù)?序列化方式;壓縮方式;哈希方式; 基本命令:get/set/del/add/replace/incr/decr/stats/flush/gets/cas key 250字符(超過(guò)截?cái)啵?;value 1mb限制(超過(guò)失?。? 只是字符串(有些不能序列化的數(shù)據(jù)不適合);和進(jìn)程中緩存相比沒(méi)有緩存指針的優(yōu)勢(shì); 始
16、終是緩存而不是數(shù)據(jù)庫(kù);過(guò)期時(shí)間(最長(zhǎng)30天)和lru(可以禁用);懶過(guò)期; 所有單條命令原子;1.2.5+ gets和cas(key, value, cas);,memcache的基本介紹,內(nèi)存存儲(chǔ)結(jié)構(gòu) slab allocator malloc/free 慢、內(nèi)存碎片 ( 也可使用use_system_malloc 編譯開(kāi)關(guān)啟用) 以slab( page )1mb(其實(shí)會(huì)是小于1m chunk size的倍數(shù))為單位申請(qǐng)內(nèi)存 將slab分割為固定尺寸的chunk(-f 開(kāi)關(guān)設(shè)置增長(zhǎng)因子,默認(rèn)1.25) 把相同尺寸的chunk分成組也就是slab class(bucket) 選擇最合適的chu
17、nk保存,會(huì)造成浪費(fèi),以空間作為性能的tradeoff 如果全部空間都是10k的chunk,之后進(jìn)來(lái)的數(shù)據(jù)都是20k怎么辦?重啟動(dòng),memcache的基本介紹,單調(diào)性和平衡性 傳統(tǒng)方式:取模,一旦節(jié)點(diǎn)有改變,映射全部改變 一致性哈希:解決單調(diào)性,平衡性通過(guò)引入虛擬節(jié)點(diǎn)來(lái)解決,memcache的基本介紹,memcache的使用誤區(qū)和實(shí)踐,使用誤區(qū) 不能假設(shè)可靠性也就是100%獲取到數(shù)據(jù)(比如當(dāng)作static變量,或用于session)。 需要考慮網(wǎng)絡(luò)開(kāi)銷(xiāo)或序列化反序列化開(kāi)銷(xiāo)(一個(gè)頁(yè)面數(shù)十個(gè)請(qǐng)求,拆分存儲(chǔ)大對(duì)象)。 key-value的存儲(chǔ)決定了在設(shè)計(jì)階段需要考慮如何使用緩存而不是在發(fā)布前去用。
18、使用實(shí)踐 不要和需要內(nèi)存的服務(wù)一起部署,可以和需要cpu的服務(wù)一起部署,不要開(kāi)啟swap。 定義具有意義的key,命名空間_業(yè)務(wù)相關(guān)主鍵id,而不是一段hash值:批量刪除、批量獲取、避免沖突,還可以在key中包含版本號(hào),老的數(shù)據(jù)”自然死亡“。 對(duì)于value到底是保存序列化后的立體對(duì)象還是字符分隔的平面對(duì)象?比如: 標(biāo)題 : 標(biāo)題1, id:1 , 標(biāo)題: 標(biāo)題2, id:2 還是 “標(biāo)題_id1_標(biāo)題2_id2”。,memcache的使用誤區(qū)和實(shí)踐,對(duì)于列表數(shù)據(jù),可以采用兩種數(shù)據(jù)結(jié)構(gòu)兩段式存?。╥ds和行數(shù)據(jù)id-value),排序、查找基于ids(可以根據(jù)條件定義多個(gè)ids,比如news
19、_from_0_to_100、news_category_1_top_20)而更新只需更新行數(shù)據(jù)。 如果沒(méi)有維護(hù)ids結(jié)構(gòu)可以直接根據(jù)key查找列表數(shù)據(jù),比如news_2010_6_1_12_00,我們就可以實(shí)現(xiàn)分頁(yè)列表但不能提供總頁(yè)數(shù)功能。 善于利用append和prepend(留言添加應(yīng)用,甚至可以采用命令疊加ids:1,2,3,2d,4)。 善于使用批量獲取來(lái)減少網(wǎng)絡(luò)調(diào)用,必要情況下把相關(guān)的key指定服務(wù)器保存。 改變思路,使用分布式緩存需要在設(shè)計(jì)階段花一些時(shí)間,把緩存的時(shí)間和業(yè)務(wù)緊密連接并根據(jù)keyvalue的特性(不利于范圍查詢(xún)、搜索等)來(lái)舍棄一些不那么必要的業(yè)務(wù)功能。 對(duì)于需要枚舉
20、key的應(yīng)用最好具有單獨(dú)的memcached集群。 可以基于memcache做一些擴(kuò)展,比如分布式鎖等等。,windows server appfabric caching,什么是windows server appfabric? 包含caching和hosting兩部分。 增強(qiáng)有關(guān)caching和hosting的基礎(chǔ)結(jié)構(gòu)。 windows server appfabric 解決的問(wèn)題? 分布式緩存 持久化的工作流 監(jiān)控wcf/wf應(yīng)用程序 基于iis和powershell的管理工具 windows server appfabric 的優(yōu)缺點(diǎn) 生產(chǎn)環(huán)境操作系統(tǒng)受限于 windows server 2008 sp2和windows server 2008 r2,基本都需要依賴(lài).net框架4.0。 功能非常完善,能做到都做了,并且可以和很多微軟產(chǎn)品很好結(jié)合。 大多數(shù)組件和工具基于.net/c#/wcf實(shí)現(xiàn),不要對(duì)性能期望過(guò)多。 要ge
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東a2貨運(yùn)從業(yè)資格證考試題
- 2025二手房屋購(gòu)買(mǎi)合同
- 中國(guó)隧道照明燈具項(xiàng)目投資可行性研究報(bào)告
- 粘膠雪尼爾圍巾行業(yè)深度研究報(bào)告
- 上海外國(guó)語(yǔ)大學(xué)《電子商務(wù)法專(zhuān)題研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海體育大學(xué)《建設(shè)工程合同管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025簡(jiǎn)單的單位租車(chē)合同范本(貨車(chē)租車(chē)協(xié)議合同范本)
- 2025農(nóng)村自建房買(mǎi)賣(mài)合同
- 《基本原則和制度》課件
- 2025飾品店加盟合同協(xié)議書(shū)范本版
- 第三單元第1課 標(biāo)志設(shè)計(jì) 課件 2024-2025學(xué)年人教版(2024)初中美術(shù)七年級(jí)上冊(cè)
- 2024年農(nóng)貿(mào)市場(chǎng)日常管理制度例文(四篇)
- 《數(shù)字信號(hào)處理(第2版)》本科全套教學(xué)課件
- 上市央國(guó)企數(shù)智化進(jìn)程中人才就業(yè)趨勢(shì)
- 2024版小學(xué)科學(xué)六年級(jí)上冊(cè)第四單元《能量》教學(xué)課件
- 4 古代詩(shī)歌四首《 觀滄?!方虒W(xué)設(shè)計(jì)
- 2024農(nóng)村機(jī)井轉(zhuǎn)讓合同范本
- 2024公路工程危險(xiǎn)性較大工程安全專(zhuān)項(xiàng)施工方案編制導(dǎo)則
- 2024-2030年中國(guó)巨菌草市場(chǎng)需求規(guī)模及未來(lái)發(fā)展戰(zhàn)略研究報(bào)告
- 人教版高一上學(xué)期化學(xué)(必修一)《第四章物質(zhì)結(jié)構(gòu)元素周期律》單元測(cè)試卷-帶答案
- 四年級(jí)上冊(cè)道德與法治全冊(cè)教案
評(píng)論
0/150
提交評(píng)論