PHP開發人員分佈式計算的8個謬誤
PHP開發者構建分佈式應用需警惕的八大誤區
Peter Deutsch在1997年提出了七個分佈式計算的誤區,後來James Gosling(Java之父)又補充了一個。這些誤區對PHP開發者來說至關重要,因為我們每天都在構建分佈式應用:mashup、與SOAP和REST服務交互的應用、通過Facebook、Google或Twitter API進行用戶身份驗證、從遠程數據庫和緩存服務檢索信息等等。我們構建的正是分佈式計算應用。因此,理解這八個誤區及其影響至關重要。
關鍵要點:
- Peter Deutsch和James Gosling提出的八大分佈式計算誤區對PHP開發者至關重要:網絡可靠、延遲為零、帶寬無限、網絡安全、拓撲不變、只有一個管理員、傳輸成本為零以及網絡同構。
- 儘管網絡可靠性和帶寬有了顯著提升,但這些因素並非完美無缺。開發者必須預見潛在的故障,並在應用程序設計和部署中納入相應的處理策略。
- 網絡安全始終是一個重要問題,開發者必須優先考慮良好的安全實踐,並評估其合作廠商的安全措施。
- 開發者應準備好應對拓撲結構的變化、更換供應商的可能性以及數據傳輸相關的成本。他們還應該採取靈活的方法,能夠處理多個數據庫和數據源,並且不假設網絡是同構的。
- 網絡可靠
這顯然是不正確的。儘管自1995年以來,網絡延遲降低,帶寬顯著增加,但說網絡可靠是錯誤的。假設我們搭建了一個簡單的應用程序,它不使用太多服務——一個使用MySQL作為後端的PHP應用程序。似乎沒什麼問題。然而,假設我們後來決定使用像Xeround這樣的MySQL託管服務提供商來滿足我們的數據庫需求。即使具有良好的可擴展性和高可用性,如果他們的系統出現問題怎麼辦?如果他們的基礎設施遭受DDoS攻擊或由於內部問題而出現停機怎麼辦?我們經常聽說99.999%的正常運行時間,但這仍然不是100%。隨著服務的激增和當今通常高度可用的帶寬,很容易忘記沒有什麼是完美的。您如何在應用程序中考慮服務的故障?
- 延遲為零
雖然延遲可能很低,確實比幾年前低得多,但它永遠不會為零。引用Arnon Rotem-Gal-Oz在其《分佈式計算誤區詳解》文章中的話:以大約300,000公里/秒(3.6 * 10E12 teraangstrom/兩週)的速度,即使處理是實時完成的,從歐洲到美國再返回的ping也至少需要30毫秒。
這是壞事嗎?好壞參半。根據我們應用程序的結構和可用的資源,我們可以很大程度上減輕延遲問題。我們可以使用Amazon Web Services之類的服務託管我們的應用程序,並利用S3,以便我們的數據位於世界各地的多個區域,使其更接近我們的最終用戶,並減少網絡上應用程序的延遲。但即使我們可以減少延遲,我們也無法消除它。我們可以採用一系列方法和架構來減少它對我們的影響,但無論我們做什麼,它都將始終存在。您在設計應用程序時是否考慮過這一點?
- 帶寬無限
帶寬真的可以無限嗎?如果是這樣,無限的代價是什麼?當我們考慮到網絡正日益轉向移動化時,一切舊事物都煥發了新生。我並不是說我們從撥號上網的速度開始重新開始,更新的4G網絡比早期的2G和3G網絡快得多。但是,即使是它們的峰值數據速率目前也低於標準寬帶連接。此外,隨著移動寬帶的普及,尋求使用我們服務的潛在用戶數量(我們都想受歡迎,至少取得Facebook的一些成功)正在以驚人的速度增長。考慮來自mobithinking的這些統計數據:
- 有59億移動用戶。
- 有12億擁有3G覆蓋範圍的移動網絡用戶。
- 移動設備佔全球點擊量的8.49%。
鑑於此,可以公平地說,儘管帶寬速率及其在世界範圍內的普及率正在提高,但用戶增長率卻抵消了這一點。更進一步說,隨著移動寬帶提供的巨大靈活性,自然而然地出現了明確的臨時服務消耗。您是否為服務上潛在的巨大負載做好了準備?你能處理這種可用性帶來的峰值嗎?
- 網絡安全
我認為無需過多細節就可以公平地說,這是,並且將永遠是錯誤的。如果您有任何疑問,也許您應該與LinkedIn或eHarmony成員談談。當我們設計和部署我們的應用程序時,我們在應用程序的託管位置(例如Rackspace、PagodaBox或cloudControl)以及應用程序本身的設計中,對安全性投入了多少精力?根據SecurityAffairs,Prolexic報告:
- 針對金融服務行業的惡意數據包流量環比增長3000%。
- 2011年第四季度針對金融服務行業的惡意流量數據量為19.1TB,數據包為140億個,2012年有所增加。
- 2012年識別並緩解的數據量為65TB,數據包為1.1萬億個,是2011年的80倍。
鑑於網絡並不安全,我們需要確保我們正在將良好的安全實踐作為當然的事情來使用。鑑於Chris Shiflett的博客、Essential PHP Security、PHP安全聯盟等來源的大量良好建議,很難不知道如何在我們的應用程序核心融入安全性以及為什麼要這樣做。您的安全實踐是什麼?您是否評估了您部署的供應商?
- 拓撲不變
不會嗎?真的嗎?它不會改變,還是我們只是不知道?當我們將應用程序託管給其他人時,我們只是不知道。如果提供商重新配置他們的數據中心、升級它、調整它,無論出於何種原因,拓撲結構都會發生變化。鑑於前面提到的智能手機使用率的提高,拓撲結構經常發生變化。從用戶和提供商的角度來看,拓撲結構幾乎每天都在變化!如果拓撲結構發生變化,並且它依賴的外部服務無法再訪問,導致例如無法訪問數據庫,那麼這肯定是一個問題。但是,如果在我們的提供商內部發生變化,並且應用程序繼續運行,那麼它可能不是問題。當然,編寫一個小型且以簡單配置託管的應用程序很容易。但應用程序會發生變化,那些越來越受歡迎的應用程序更是如此。您是否在設計中考慮了拓撲結構的變化?您如何解釋或處理應用程序設計和部署設計中的故障?
- 只有一個管理員
“但是我的應用程序由單個服務提供商託管。他們提供操作系統、數據庫和Web服務器支持,”你說。好吧,假設那是您的應用程序,真的只有一個管理員嗎?如果真的只有一個管理員,你會真的相信提供商會處理你的應用程序嗎?如果他們生病或休假,我會討厭想到會發生什麼。通常,至少會有幾個管理員,儘管每個管理員的技術和更廣泛的敏銳程度可能不同。應該制定策略,例如網絡入侵檢測和其他安全策略,但不能保證他們都會以相同的徹底性和盡職盡責來遵守這些策略。鑑於當今可用的眾多託管提供商以及更新DNS記錄所需的時間很少,我們有很多選擇和靈活性,如果一個提供商沒有滿足我們的需求和期望,我們可以轉向另一個提供商。您是否考慮過這會如何影響您?如果您無法輕鬆更換供應商怎麼辦?如果您有大量的供應商鎖定,或者移動成本很高怎麼辦?如果您的應用程序架構不夠靈活怎麼辦?您可以採取哪些措施來減輕此類風險?
- 傳輸成本為零
與迄今為止的所有陳述一樣,這的有效性也很不可能。如果支持我們應用程序的服務器位於同一數據中心的同一機架中,那麼傳輸成本可以大大降低,但就時間成本而言。貨幣成本呢?是的,我們可以根據需要無限地彈性地向上和向下擴展,並且可以在地理位置分散的數據中心之間存儲我們的應用程序數據,以便它盡可能接近我們的最終用戶,但代價是什麼?您的應用程序或服務的架構組成是什麼?就成本或時間而言,它是否接近於零?如果您能減少一個,它是否會增加另一個?
- 網絡同構
與其他誤區不同,我認為作為PHP開發者,我們天生就理解這一點。我們在Windows、Linux、Solaris、BSD和Mac OS X服務器上託管我們的應用程序。我們使用MySQL、SQLServer、SQLite、PostgreSQL、mongoDB、Hadoop和Oracle來存儲數據。我們通過需要不同接口的XML或JSON使用外部服務。作為一個多操作系統和多服務社區,可以說從早期開始,我們就從未期望過同構網絡。但問題仍然需要提出,您的方法是否靈活?您可以處理多個數據庫和數據源嗎?您是否使用相關的設計模式,例如抽象工廠,來使用透明的代碼接口從各種來源和類型消費數據?或者如果需要執行像從XML切換到JSON這樣簡單的事情,您的代碼是否會中斷?
結論
我認為,作為PHP開發者,分佈式計算的八大誤區與以往一樣重要。鑑於大量可用的信息和資源,我們處於一個非常有利的地位來理解它們並減輕由此產生的風險。您怎麼看?在開發應用程序和服務時,您是否考慮到了它們?您認為這八個誤區如何影響您的應用程序?
(圖片保持不變)
以上是PHP開發人員分佈式計算的8個謬誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

RESTAPI設計原則包括資源定義、URI設計、HTTP方法使用、狀態碼使用、版本控制和HATEOAS。 1.資源應使用名詞表示並保持層次結構。 2.HTTP方法應符合其語義,如GET用於獲取資源。 3.狀態碼應正確使用,如404表示資源不存在。 4.版本控制可通過URI或頭部實現。 5.HATEOAS通過響應中的鏈接引導客戶端操作。

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

匿名類在PHP中的主要作用是創建一次性使用的對象。 1.匿名類允許在代碼中直接定義沒有名字的類,適用於臨時需求。 2.它們可以繼承類或實現接口,增加靈活性。 3.使用時需注意性能和代碼可讀性,避免重複定義相同的匿名類。

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
