為何要從PHP轉(zhuǎn)向Go

本篇文章給大家分享的是有關(guān)為何要從PHP轉(zhuǎn)向Go,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元洛寧做網(wǎng)站,已為上家服務,為洛寧各地企業(yè)和個人服務,聯(lián)系電話:18980820575

在最初的時候,我們自認為應該使用自己熟悉的編程語言,因為我們是一個小團隊,而且已經(jīng)做了兩項冒險的舉動:將我們的大流量游戲平臺切換到微服務和完全重建Web應用程序。

不過,最終,我們還是決定放棄PHP,轉(zhuǎn)向Go。在這篇文章中,我們將解釋為什么要這樣做。我們還將分享一些微服務架構(gòu)中有關(guān)數(shù)據(jù)庫的觀點。

微服務和PHP:錯誤的搭配

我們熟悉的語言是PHP,它驅(qū)動著我們現(xiàn)有的應用程序,有兩個模糊的理由支撐著我們使用PHP:

  • 我們熟悉PHP和它的怪特性,而且原來的程序運行得很好,我們?yōu)槭裁匆艞墸?/p>

  • 外面有很多的PHP開發(fā)人員,PHP可以讓我們的團隊更容易地成長起來。

這些聽起來都很正確,但是當我們清楚地認識到PHP真的不是我們這個案例的正確選擇時,我們很快就放棄了這些想法。

我們正在向著微服務架構(gòu)遷移,因為我們希望這些大流量的基礎(chǔ)架構(gòu)(每日200萬活躍用戶)具備可擴展性。從長遠來看,隨著我們向1000萬甚至更多用戶發(fā)展的時候,我們的基礎(chǔ)設施也應該能相應地進行擴大。

PHP無法滿足這些需求,因為:

PHP的啟動成本很高。 PHP一開始是為短生命周期腳本的運行而設計的,因此持久性并不是其原生特性。這意味著對于每個請求、數(shù)據(jù)庫連接和類都必須實例化,這增加了不必要的開銷。當然,這也是有辦法解決的,例如通過PHP-FPM或Apache來創(chuàng)建連接池,或者綁定C以獲得與redis的長連接。但是,由于我們需要追求高性能,所以這些依賴讓我們開始質(zhì)疑PHP對于這個系統(tǒng)來說是否是一個合適的工具。

容器化的PHP是一個雷區(qū)。 PHP需要借助Nginx和PHP-FPM(或類似的軟件)來進行進程管理和連接池管理。這意味著對于部署的每個微服務來說,PHP-FPM和Nginx必須同時運行。這既浪費了資源,又降低了效率。對運行在服務器上的PHP實例進行優(yōu)化也是相當困難的,因為你需要同時熟悉PHP、PHP-FPM和Nginx的配置。我們無法想象在彈性Kubernetes環(huán)境上配置多個PHP棧的痛苦,我們甚至不知道在這同一臺機器上還運行了其他什么東西。

對微服務來說,其復雜性存在于架構(gòu)中,因為你正在處理的是一個復雜的交互系統(tǒng)。既然我們已經(jīng)確定采用微服務架構(gòu),那么因為錯誤的選擇了編程語言導致的消耗顯然就不值得。

招聘的要求是什么?我們發(fā)現(xiàn)這個所謂的要求對于我們現(xiàn)在這種情況是毫無意義的。像微服務一樣,我們認為開發(fā)人員應該是編程語言無關(guān)的。我們寧愿聘請一位聰明的并愿意為了完成工作而學習新的編程語言的開發(fā)人員,而不是一位堅持己見的專家。因此,從這個意義上來說,放棄PHP對我們來說是一種解放。

為何要從PHP轉(zhuǎn)向Go

擁抱Go

我們主要偏向使用Node.js和Golang這兩種語言。在做了一些研究之后,我們最后決定放棄Node,使用Go。

那么為什么要使用Go呢?

性能: Go的二進制文件會生成一個長時間運行的進程,這意味著每個請求和數(shù)據(jù)庫連接的啟動成本很低。這使得Go在處理大量的并發(fā)請求時能保證極快的速度,因為Go語言(goroutines模塊)專為網(wǎng)絡和多核計算而設計。

Go可以編譯出一個小巧便攜的二進制文件。這使得Go非常適合在Docker容器中使用。部署我們的Go容器只需幾秒鐘,因為它們的體積很小(大多數(shù)是4-5MB),并且由于是靜態(tài)鏈接,因此在容器內(nèi)不需要OS或運行時依賴。例如,當使用Node Alpine Linux鏡像時,我們的前端容器大約為55MB。

Go是類型嚴格的。這讓代碼中的內(nèi)部通信更為可靠,也有助于在構(gòu)建期間捕獲異常,而不是在運行期間。

Go的工具鏈的規(guī)模很大。雖然工具是很多編程語言關(guān)注的問題,但Google從一開始就解決了這個問題,他提供了大量常用的工具作為語言安裝時的一部分。

我們也考慮到Go有這些缺點:

  • Go不附帶依賴管理器。不過Google正在努力實現(xiàn)這個功能。現(xiàn)在,你可以問一下你的供應商,或者看一下Glide這個工具。

  • 太多的公式化代碼。這是Go優(yōu)雅和簡單的另一面。

然而,我們必須接受這一點:用Go程序確實需要花上一些功夫,但它能提高代碼質(zhì)量,并讓我們能夠時刻知道代碼實際是如何運行的。

這并不是說所有的代碼我們都用Go來寫。對于服務器端渲染,我們使用Node,因為它允許我們在前端和后端之間共用代碼邏輯。我們也可以使用Java來解決特定的問題,因為它已經(jīng)存在了很長時間,并且擁有大量的庫。我們希望能使用最合適的工具,對于大多數(shù)情況而言,Go是我們的首選。

探索NOSQL

當我們開始使用Go語言來編寫我們的第一個服務時,我們也開始考慮數(shù)據(jù)庫的選擇。我們習慣了過去為我們服務的MySQL,但它經(jīng)常會成為性能的瓶頸。

在我們的傳統(tǒng)架構(gòu)中,我們使用了大量的Redis來進行緩存,它的性能非常棒,因為它有效地減少了昂貴的連接數(shù)量。所以當我們開始在我們的新架構(gòu)中探索數(shù)據(jù)庫時,我們要探索一下NoSQL,來看看是否可以完全避免這些連接。

我們試用了這兩個數(shù)據(jù)庫:

MongoDB:因為我們非常好奇對于存儲包含大量元數(shù)據(jù)的游戲數(shù)據(jù)而言,文件存儲是否是一個好的解決方案。但是,缺點是:我們必須在Google Cloud上管理它,而且根據(jù)社區(qū)所說,它根本不能很好地進行擴展。

Cassandra:因為它是一個大家熟知的可以擴展的數(shù)據(jù)庫,并被大流量平臺Netflix和Reddit所使用。它的優(yōu)點是:速度非???,能線性擴展。不過,我們發(fā)現(xiàn)它的內(nèi)容管理太復雜了。如果你知道該如何查詢數(shù)據(jù),那么Cassandra是挺好的。它適用于包含大量數(shù)據(jù)的分析服務,但是在敏捷產(chǎn)品設計環(huán)境中,產(chǎn)品變化頻繁,Cassandra就是一個強大的野獸,對于大多數(shù)情況而言它太笨重了。

為何要從PHP轉(zhuǎn)向Go

堅守SQL

我們傾向于構(gòu)建小型而又獨立的服務,這些服務可以完成指定的工作,并且在需要的時候可以很輕松地進行升級或更換。

這就是為什么我們決定堅持使用MySQL作為我們的默認數(shù)據(jù)庫的原因。我們已經(jīng)使用MySQL很多年了,知道如何設計高性能的數(shù)據(jù)庫方案。雖然它不能線性擴展,但現(xiàn)在還好,得益于微服務架構(gòu)的模塊化特性,應用程序負載可以分布在不同機器的不同微服務上,并且每個微服務都可以訪問自己的32核數(shù)據(jù)庫機器和不同的數(shù)據(jù)庫讀副本(Read Replicas)。

讓我們高興的是,至今我們還沒有過度設計。如果有某個服務確實需要Cassandra或其他數(shù)據(jù)庫的話,那么沒有什么可以阻止我們遷移這個服務。

那么為什么選用MySQL?主要是因為它可以在Google Cloud上進行管理,而在DevOps方面我們是務實的。我們想嘗試試用Postgres,因為它是開源的,有一個強大的社區(qū),并且已經(jīng)改進了很多。因此,如果Google Cloud上有了Alpha版本,我們也會研究一下。

以上就是為何要從PHP轉(zhuǎn)向Go,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標題:為何要從PHP轉(zhuǎn)向Go
文章源于:http://bm7419.com/article8/jjesip.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司用戶體驗、網(wǎng)站收錄軟件開發(fā)、商城網(wǎng)站外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司