① php可以做集群和分布式運算嗎
用php吧,這個速度比較快,而且現在像taobao,Facebook等也都是用的php。
ASP現在用的不多了,ASP基本上都轉到asp.net了,.net如果很有實力的公司做也可以的,畢竟asp.net是微軟的東西
② php能實現分布式資料庫嗎
分布式資料庫系統通常使用較小的計算機系統,每台計算機凳叢告可單獨放在一個地方,每台計算機中都有dbms的一份完整拷貝副本,並具有自己局部的資料庫,位於不同地點的許多計算機通過網路互相連接,共同組成一個完整的、全局的大型資料庫。
這種組織資料庫的方法克服了物理中心資料庫組織的弱點。首先,降低了數據傳送代價,因為大多數的對資料庫的訪問操作都是針對局部資料庫的,而不是對其他位置的資料庫訪問;其次,系統的可靠性提高了很多,因為當網路出現故障時,仍然允許對局部資料庫的操作,而且一個位置的故障不影響其他位置的處理工作,只有當訪問出現故障棗明位置的數據時,在某種程度上才受影響;第三,便於系統的擴充,增加一個新的局部資料庫,或在某個位置擴充一台適當的小型計算機,都很容易實現。然而有些功能要付出更高的代價。例如,為了調配在幾個位置上的活動,事務管理的性能比在中心資料庫時花費更高,而且甚至抵消許多其他的優點。
分布式資料庫系統主要特點:
多數處理就地完成;
各地的計算機由數據通信網路相聯系;
克服了中心資料庫的弱點:降低了數據傳輸代價;
提高了系統的可靠性,局部系統發生故障,其他部分還可繼續工作;
各個資料庫的位置是透明的,方便系統的擴充;
為了協調整個系統的事務活動,事務管理的性能花費高;
數據分片
類型:
(1)水平分片:按一定的條件把全局關系的所有元組劃分成若干不相交的子集,每個子集為關系的一個片段。
(2)垂直分片:把一個全局關系的屬性集分成若乾子集,並在這些子集上作投影運算,每個投影稱為垂直分片。
(3)導出分片:又稱為導出水平分片,即水平分片的條件不是本關系屬性的條件,而是其他關系屬性的條件。
(4)混合分片:以上三種方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片,或其他形式,但他們的結果是鄭枝不相同的。
③ PHP中的文件系統函數(一)
從這篇文章開始,我們將學習一系列的 PHP 文件系統相關函數。其實這些函數中,有很多都是我們經常用到的,大家並不需要刻意地去記住它們,只要知道有這么個東西,在使用的時候記得來查文檔就可以了。
文件路徑相關的函數往往在一些框架中會比較常見,而且多會配合 __FILE__ 、 __DIR__ 之類的魔術常量使用。
basename() 函數是獲得路徑中的文件名,它有兩個參數,第一個是文件的路徑,第二個是過濾掉的內容,比如第一條測試語句我們過濾掉文件的後綴名。
dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內容,和 basename() 正好是相反的功能。
pathinfo() 函數用於以數組的形式返迴路徑中的信息,從結果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴展名 extension 和不包含擴展名的 filename 內容。
realpath() 返回的是規范化的絕對路徑名,它擴展所有的符號連接並且處理輸入的路徑中的 ./ 、 ../ 以及多餘的 / ,返回的內容是標准規范的絕對路徑。
接下來,我們學習一些修改文件相關屬性的函數,主要就是在 linux 系統環境中的文件許可權信息的操作。
當然,首先我們得創建一個文件。和 Linux 中的命令是非常類似的。
touch() 函數除了給出要創建的文件名之外,還有兩個可選參數可以指定文件的創建時間及訪問時間,不給參數的話默認就是當前時間。這個文件名可以是相對或絕對路徑中有許可權的目錄,並在該目錄下創建一個空的文件。
通過 fileowner() 函數,我們可以獲得某個文件所屬的用戶,默認情況下我們的用戶是當前運行 PHP 腳本的用戶,也就是系統目前的登錄用戶。在這里,我們使用 chown() 函數,將用戶改為 www 用戶。clearstatcache() 是用於清理文件系統的緩存信息,如果不清理一下的話,fileowner() 返回的依然還是之前的用戶信息。
同理,使用 filegroup() 函數獲得文件的屬組信息,chgrp() 用於修改文件的屬組。fileperms() 用於返迴文件的許可權信息,它返回的是數字模式的文件訪問許可權,這里我們使用 sprintf() 格式化結果後獲得我們常用的 Linux 系統許可權格式。chmod() 函數用於修改文件的許可權,它的許可權參數是三個 8 進制數據組成的數字,也就是代表 Linux 系統中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個 0 用於確保操作能夠正常執行。關於系統文件許可權的知識大家需要認真學習 Linux 系統中相關的內容。
注意,上述函數如果在命令行中運行失敗,大部分原因是沒有許可權,可以使用 sudo 進行測試。在 fastcgi 中運行時,就更加需要注意許可權問題,僅在我們伺服器可以操作的目錄中進行安全的文件許可權修改。
stat() 函數可以獲取到指定文件的所有屬性信息,在這里我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。
在 Linux 系統中,有軟連接和硬連接的相關知識。其實軟連接就像是 Windows 中的快捷方式,而硬連接相關於復制了一份數據。在 PHP 中,也為我們提供了創建軟硬連接以及相關的一些操作。
使用 link() 函數創建的就是一個指定文件的硬連接文件,而使用 symlink() 創建的則是一個軟連接文件。相對來說,我們使用軟連接的場景會更多一些。lstat() 就和 stat() 函數的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數針對的是軟硬連接文件。
同樣地,我們也可以修改軟硬連接的用戶和用戶組信息,不過它們的信息不能通過 fileowner() 或 filegroup() 查看。因為它們是連接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數查看到的依然是原始文件的信息。我們可以在系統環境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。
今天的內容比較簡單,而且修改許可權的操作也並不常用。不過對於系統安全來,它們還是非常有用的,比如對於上傳來說,我們要預防上傳可執行文件的話,就可以通過修改文件的許可權來讓文件無法直接運行,從而起到安全保護的作用。另外,目錄路徑相關的操作也是一些框架的基礎,幾乎所有框架的入口或者說是 Composer 的入口,都會見到 dirname() 以及 basename() 之類函數的身影。
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系統函數(一).php
參考文檔:
https://www.php.net/manual/zh/ref.filesystem.php
④ php大型應用如何採用分布式架構
大型分布式架構都是靠多種語言和工具共同分工合作實現的。
不是一兩種工具或者語言能實現的,如果專指php那是沒有意義的,因為php本身只是一個單進程的東東,更別說分布式。
大規模的web應用以及分布式架構主要在於伺服器的整體架構:
1、web服務集群;
2、資料庫集群;
3、分布式緩存;
php充其量只是實現其中一個節點的某個具體的web應用。
SD框架支持長連接協議TCP,WebSocket,短連接協議HTTP,以及UDP。
通過配置開放不同的埠開發者可以輕松管理不同的協議,並且可以共用一套業務代碼,當然你可以通過智能路由進行代碼的隔離。
長連接可以配置不同的數據傳輸協議,比如二進制協議文本協議等等,通過框架提供的封裝器解包器介面可以自定義各種各種的協議封裝,並且各種協議之間可以自動轉換,比如你通過廣播發送一個信息,該信息流向不同客戶端,客戶端間採用不同協議,那麼框架會根據不同的埠自動轉換不同的協議封裝。
也可以通過Http給所有長連接客戶端發送推送消息,類似這種混合協議協作的業務在SD框架上會異常簡單。
(4)php分布式文件系統擴展閱讀:
普通的Web開發,常用的模式就是用戶登錄之後,登錄狀態信息保存在Session中,用戶一些常用的熱數據保存在文件緩存中,用戶上傳的附件信息保存在Web伺服器的某個目錄上。這種方式對於一般的Web應用,使用很方便,完全能夠勝任。但是對於高並發的企業級網站,就應付不了了。需要採用Web集群實現負載均衡。
使用Web集群方式部署之後,首要調整的就是用戶狀態信息與附件信息。用戶狀態不能再保存到Session中,緩存也不能用本地Web伺服器的文件緩存,以及附件,也不能保存在Web伺服器上了。因為要保證集群裡面的各個Web伺服器,狀態完全一致。
因此,需要將用戶狀態、緩存等保存到專用的緩存伺服器,比如Memcache。附件需要保存到雲存儲中,比如七牛雲存儲、阿里雲存儲、騰訊雲存儲等。
SD框架內大多數的對象都使用了對象池技術,對象池技術有利於系統內存的穩定,減少GC的次數,提高系統的運行效率,事實證明對象池對系統穩定做出了極大的貢獻。
開發者也可以使用這一套對象池技術,增加對對象的復用,減少GC和NEW的頻率,對系統毛刺現象和內存泄露方面都有很大的穩定性提升。
⑤ php mysql分布式資料庫如何實現
當前做分布式的廠商有幾家,我知道比較出名的有「華為雲分布式資料庫DDM」和「阿里雲分布式資料庫」,感興趣可以自行搜素了解下。
分布式資料庫的幾點概念可以了解一下。
數據分庫:
以表為單位,把原有資料庫切分成多個資料庫。切分後不同的表存儲在不同的資料庫上。
以表中的數據行記錄為單位,把原有邏輯資料庫切分成多個物理資料庫分片,表數據記錄分布存儲在各個分片上。
路由分發:
在分布式資料庫中,路由的作用即將SQL語句進行解析,並轉發到正確的分片上,保證SQL執行後得到正確的結果,並且節約QPS資源。
讀寫分離:
資料庫中對計算和緩存資源消耗較多的往往是密集或復雜的SQL查詢。當系統資源被查詢語句消耗,反過來會影響數據寫入操作,進而導致資料庫整體性能下降,響應緩慢。因此,當資料庫CPU和內存資源佔用居高不下,且讀寫比例較高時,可以為資料庫添加只讀資料庫。
⑥ php什麼是分布式
php分布式是指多台伺服器處理不同的工作,指的是業務上的一般,比如多台伺服器有的處理日誌分布到一些伺服器,有的處理下單,分布到一些伺服器。
⑦ 大型互聯網架構概述,看完文章又漲知識了
1. 大型網站系統的特點
2. 大型網站架構演化歷程
2.1. 初始階段架構
問題:網站運營初期,訪問用戶少,一台伺服器綽綽有餘。
特徵:應用程序、資料庫、文件等所有的資源都在一台伺服器上。
描述:通常服螞猛務臘枝器操作系統使用 linux,應用程序使用 PHP 開發,然後部署在 Apache 上,資料庫使用 Mysql,通俗稱為 LAMP。匯集各種免費開源軟體以及一台廉價伺服器就可以開始系統的發展輪物敏之路了。
2.2. 應用服務和數據服務分離
問題:越來越多的用戶訪問導致性能越來越差,越來越多的數據導致存儲空間不足,一台伺服器已不足以支撐。
特徵:應用伺服器、資料庫伺服器、文件伺服器分別獨立部署。
描述:三台伺服器對性能要求各不相同:應用伺服器要處理大量業務邏輯,因此需要更快更強大的 CPU;資料庫伺服器需要快速磁碟檢索和數據緩存,因此需要更快的硬碟和更大的內存;文件伺服器需要存儲大量文件,因此需要更大容量的硬碟。
2.3. 使用緩存改善性能
問題:隨著用戶逐漸增多,資料庫壓力太大導致訪問延遲。
特徵:由於網站訪問和財富分配一樣遵循二八定律:80% 的業務訪問集中在 20% 的數據上。將資料庫中訪問較集中的少部分數據緩存在內存中,可以減少資料庫的訪問次數,降低資料庫的訪問壓力。
描述:緩存分為兩種:應用伺服器上的本地緩存和分布式緩存伺服器上的遠程緩存,本地緩存訪問速度更快,但緩存數據量有限,同時存在與應用程序爭用內存的情況。分布式緩存可以採用集群方式,理論上可以做到不受內存容量限制的緩存服務。
2.4. 使用應用伺服器集群
問題:使用緩存後,資料庫訪問壓力得到有效緩解。但是單一應用伺服器能夠處理的請求連接有限,在訪問高峰期,成為瓶頸。
特徵:多台伺服器通過負載均衡同時向外部提供服務,解決單一伺服器處理能力和存儲空間不足的問題。
描述:使用集群是系統解決高並發、海量數據問題的常用手段。通過向集群中追加資源,提升系統的並發處理能力,使得伺服器的負載壓力不再成為整個系統的瓶頸。
2.5. 資料庫讀寫分離
問題:網站使用緩存後,使絕大部分數據讀操作訪問都可以不通過資料庫就能完成,但是仍有一部分讀操作和全部的寫操作需要訪問資料庫,在網站的用戶達到一定規模後,資料庫因為負載壓力過高而成為網站的瓶頸。
特徵:目前大部分的主流資料庫都提供主從熱備功能,通過配置兩台資料庫主從關系,可以將一台資料庫伺服器的數據更新同步到一台伺服器上。網站利用資料庫的主從熱備功能,實現資料庫讀寫分離,從而改善資料庫負載壓力。
描述:應用伺服器在寫操作的時候,訪問主資料庫,主資料庫通過主從復制機制將數據更新同步到從資料庫。這樣當應用伺服器在讀操作的時候,訪問從資料庫獲得數據。為了便於應用程序訪問讀寫分離後的資料庫,通常在應用伺服器端使用專門的數據訪問模塊,使資料庫讀寫分離的對應用透明。
2.6. 反向代理和 CDN 加速
問題:中國網路環境復雜,不同地區的用戶訪問網站時,速度差別也極大。
特徵:採用 CDN 和反向代理加快系統的靜態資源訪問速度。
描述:CDN 和反向代理的基本原理都是緩存,區別在於 CDN 部署在網路提供商的機房,使用戶在請求網站服務時,可以從距離自己最近的網路提供商機房獲取數據;而反向代理則部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的伺服器時反向代理伺服器,如果反向代理伺服器中緩存著用戶請求的資源,就將其直接返回給用戶。
2.7. 分布式文件系統和分布式資料庫
問題:隨著大型網站業務持續增長,資料庫經過讀寫分離,從一台伺服器拆分為兩台伺服器,依然不能滿足需求。
特徵:資料庫採用分布式資料庫,文件系統採用分布式文件系統。
描述:分布式資料庫是資料庫拆分的最後方法,只有在單表數據規模非常龐大的時候才使用。不到不得已時,更常用的資料庫拆分手段是業務分庫,將不同的業務資料庫部署在不同的物理伺服器上。
2.8. 使用 NoSQL 和搜索引擎
問題:隨著網站業務越來越復雜,對數據存儲和檢索的需求也越來越復雜。
特徵:系統引入 NoSQL 資料庫及搜索引擎。
描述:NoSQL 資料庫及搜索引擎對可伸縮的分布式特性具有更好的支持。應用伺服器通過統一數據訪問模塊訪問各種數據,減輕應用程序管理諸多數據源的麻煩。
2.9. 業務拆分
問題:大型網站的業務場景日益復雜,分為多個產品線。
特徵:採用分而治之的手段將整個網站業務分成不同的產品線。系統上按照業務進行拆分改造,應用伺服器按照業務區分進行分別部署。
描述:應用之間可以通過超鏈接建立關系,也可以通過消息隊列進行數據分發,當然更多的還是通過訪問同一個數據存儲系統來構成一個關聯的完整系統。
縱向拆分:將一個大應用拆分為多個小應用,如果新業務較為獨立,那麼就直接將其設計部署為一個獨立的 Web 應用系統。縱向拆分相對較為簡單,通過梳理業務,將較少相關的業務剝離即可。
橫向拆分:將復用的業務拆分出來,獨立部署為分布式服務,新增業務只需要調用這些分布式服務橫向拆分需要識別可復用的業務,設計服務介面,規范服務依賴關系。
2.10. 分布式服務
問題:隨著業務越拆越小,存儲系統越來越龐大,應用系統整體復雜程度呈指數級上升,部署維護越來越困難。由於所有應用要和所有資料庫系統連接,最終導致資料庫連接資源不足,拒絕服務。
特徵:公共業務提取出來,獨立部署。由這些可復用的業務連接資料庫,通過分布式服務提供共用業務服務。
3. 大型網站架構模式
3.1. 分層
大型網站架構中常採用分層結構,將軟體系統分為應用層、服務層、數據層:
分層架構的約束:禁止跨層次的調用(應用層直接調用數據層)及逆向調用(數據層調用服務層,或者服務層調用應用層)。
分層結構內部還可以繼續分層,如應用可以再細分為視圖層和業務邏輯層;服務層也可以細分為數據介面層和邏輯處理層。
3.2. 分割
將不同的功能和服務分割開來,包裝成高內聚低耦合的模塊單元。這有助於軟體的開發和維護,便於不同模塊的分布式部署,提高網站的並發處理能力和功能擴展能力。
3.3. 分布式
大於大型網站,分層和分割的一個主要目的是為了切分後的模塊便於分布式部署,即將不同模塊部署在不同的伺服器上,通過遠程調用協同工作。
分布式意味可以用更多的機器工作,那麼 CPU、內存、存儲資源也就更豐富,能夠處理的並發訪問和數據量就越大,進而能夠為更多的用戶提供服務。
分布式也引入了一些問題:
常用的分布式方案:
3.4. 集群
集群即多台伺服器部署相同應用構成一個集群,通過負載均衡設備共同對外提供服務。
集群需要具備伸縮性和故障轉移機制:伸縮性是指可以根據用戶訪問量向集群添加或減少機器;故障轉移是指,當某台機器出現故障時,負載均衡設備或失效轉移機制將請求轉發到集群中的其他機器上,從而不影響用戶使用。
3.5. 緩存
緩存就是將數據存放在距離最近的位置以加快處理速度。緩存是改善軟體性能的第一手段。
網站應用中,緩存除了可以加快數據訪問速度以外,還可以減輕後端應用和數據存儲的負載壓力。
常見緩存手段:
使用緩存有兩個前提:
3.6. 非同步
軟體發展的一個重要目標和驅動力是降低軟體耦合性。事物之間直接關系越少,彼此影響就越小,也就更容易獨立發展。
大型網站架構中,系統解耦的手段除了分層、分割、分布式等,還有一個重要手段——非同步。
業務間的消息傳遞不是同步調用,而是將一個業務操作拆分成多階段,每個階段間通過共享數據的方式非同步執行進行協作。
非同步架構是典型的生產者消費模式,二者不存在直接調用。非同步消息隊列還有如下特性:
3.7. 冗餘
大型網站,出現伺服器宕機是必然事件。要保證部分伺服器宕機的情況下網站依然可以繼續服務,不丟失數據,就需要一定程度的伺服器冗餘運行,數據冗餘備份。這樣當某台伺服器宕機是,可以將其上的服務和數據訪問轉移到其他機器上。
訪問和負載很小的服務也必須部署 至少兩台伺服器構成一個集群,目的就是通過冗餘實現服務高可用。數據除了定期備份,存檔保存,實現 冷備份 外;為了保證在線業務高可用,還需要對資料庫進行主從分離,實時同步實現 熱備份。
為了抵禦地震、海嘯等不可抗因素導致的網站完全癱瘓,某些大型網站會對整個數據中心進行備份,全球范圍內部署 災備數據中心。網站程序和數據實時同步到多個災備數據中心。
3.8. 自動化
大型網站架構的自動化架構設計主要集中在發布運維方面:
3.9. 安全
4. 大型網站核心架構要素
架構 的一種通俗說法是:最高層次的規劃,難以改變的決定。
4.1. 性能
性能問題無處不在,所以網站性能優化手段也十分繁多:
4.2. 可用性
可用性指部分伺服器出現故障時,還能否對用戶提供服務
4.3. 伸縮性
衡量伸縮的標准就是是否可以用多台伺服器構建集群,是否容易向集群中增刪伺服器節點。增刪伺服器節點後是否可以提供和之前無差別的服務。集群中可容納的總伺服器數是否有限制。
4.4. 擴展性
衡量擴展性的標准就是增加新的業務產品時,是否可以實現對現有產品透明無影響,不需要任何改動或很少改動,既有功能就可以上線新產品。主要手段有:事件驅動架構和分布式服務。
4.5. 安全性
安全性保護網站不受惡意攻擊,保護網站重要數據不被竊取。
歡迎工作一到五年的Java工程師朋友們加入Java程序員開發: 721575865
群內提供免費的Java架構學習資料(裡面有高可用、高並發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間「來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
⑧ 當前主流分布式文件系統有哪些
目前幾個主流的分布式文件系統除GPFS外,還有PVFS、Lustre、PanFS、GoogleFS等。x0dx0a 1.PVFS(Parallel Virtual File System)項目是Clemson大學為了運行Linux集群而創建的一個開源項目,目前PVFS還存在以下不足:x0dx0a 1)單一管理節點:只有一個管理節點來管理元數據,當集群系統達到一定的規模之後,管理節點將戚碼判可能出現過度繁忙的情況,這時管理節點將成為系統瓶頸;x0dx0a 2)對數據的存儲缺乏容錯機制:當某一I/O節點無法工作時,數據將出現不可用的情況;x0dx0a 3)靜態配置:對PVFS的配置只能在啟動前進行,一旦系統運行則不可再更改原先的配置。x0dx0a 2.Lustre文件系統是一個基於對象存儲的分布式文件系統,此項目於1999年在Carnegie Mellon University啟動,Lustre也是一個開源項目。它只有兩個元數據管理節點,同PVFS類似,當系統達到一定的規模之後,管理節點會成為Lustre系統中的瓶頸。x0dx0a 3.PanFS(Panasas File System)是Panasas公司用於管理自己的集群存儲系統的分布式文件系統。x0dx0a 4.GoogleFS(Google File System)是Google公司為了滿足公司內部的數據處理需要而設計的一套分布式文件系統。x0dx0a 5.相對其它的文件系統,GPFS的主要優點有以下三點:x0dx0a 1)使用分布式鎖管理和大數據塊策略支持更大規模的集群系統,文件系統的令牌管理器為塊、inode、屬性和目錄項建立細粒度的鎖,第一個獲得鎖的客戶將負責維護相應共享對象的一致性管理,這減少了元數據伺服器的負擔;x0dx0a 2)擁有多個元數據伺服器,元數據模春也是分布式,使得元數據的管理不再是系統瓶頸;x0dx0a 3)令牌管理以位元組作為鎖的最小單位,也就是說除高改非兩個請求訪問的是同一文件的同一位元組數據,對於數據的訪問請求永遠不會沖突.
⑨ 什麼是分布式文件系統
解釋如下:
分布式文件系統(DistributedFileSystem,DFS)是指文件系統管理的物理存儲資源不一定直接連接消棗在拿芹拆本地節點上,而是通過計算機網路與節點(可首圓簡單的理解為一台計算機)相連;或是若干不同的邏輯磁碟分區或卷標組合在一起而形成的完整的有層次的文件系統。