畢業到如今,算了算也快3年了。我也不知道怎麼忽然,就玩了這麼多技術,原本是.net的卻成爲了一枚PHP全棧工程師,雖然也不算深刻,但是通常的軟件開發,仍是能夠應付的。有些時候對廣州那邊的面試或者深圳的面試,我會比較抗拒筆試,由於我就沒有看過他們所說的術語,我一直都是直接去GitHub直接review,並參考,不懂就谷歌。php
至於我是怎麼開始走上架構搭建這條路,要從畢業開始。前端
畢業的時候,因爲信心和經歷都不全面,去了一家廣告公司,面向豬八戒接單,也就是外包公司,進去呆了兩個月。感受這不是我想要的發展方向,而後就不告而別了,由於年輕不懂事。而後去了一家賣茶葉的公司,他一開始把分享吹上天,而後去「微三雲」企業參觀,買了一套源碼。而後教我維護,我一個剛畢業出來的人,業務都不懂怎麼處理,你叫我維護一個上市公司的源碼?,你這是逗我,而後一個月後我感受不適應,我離職。而後去了一家仍是沒有任何人開發人員,想出來作金融行業的傳統行業,這裏就比較有趣了,我大學學到的東西,能夠本身任由發揮,但是傳統企業都有一個毛病,急於求成,兩個月過去,它們發現沒有任何收益,就解散了。vue
而後接下來是我人生的轉折點,這也是我遇到我職業生涯的導師,先後兩我的,一個是個人上司,一個是個人經理。再遇到經理以前,和上司在另外一家企業工做,而後公司搬到一個很大型的賣場,在那個賣場裏面公司能夠說是惟一一家科技公司,那時候那個賣場經理就來參觀了。後面認識以後咱們才知道,經理他之前是百度出身的。後面老闆和技術總監鬧矛盾,還打起了公司。而後就沒而後了,所在的企業再次面臨解散,而後我和上司就投靠了咱們經理,想跟他作一番「大事業」。就這樣,咱們三我的就組建了一個團隊了。node
由於上司年紀也上去了,又有家庭,因此不少時候,我要承擔更多的事,前端是我,php,服務器搭建都是我,哈哈哈。那時候的業務和敏感業務處理,上司是不會給我處理的,因此php也就crud 這樣一個水平,上司在技術選行這個工做是交給我處理的,因此大家說的全部框架我都玩過,不管angular.js , angluar , React , Vue , Omi ,ThinkPHP , Laravel , Yii2 , Mysql, Node.js, Egg.js,
Express.js .... 等等等,這能夠說是初級架構師要作的事情吧。最後根據團隊狀況,我選擇了Laravel + (Vue Or React)做爲本身技術棧,後端仍是中規中舉的Layui,不用問我爲何,有什麼是一個Jquery作不了?若是有那就兩個!由於後端但是什麼前端框架都不會,可他們確定會jQuery。python
能夠瀏覽一下個人簡書,你會發現,我2017年一年下來,寫得最多的博客是服務器搭建。是的我一年就開始搭建服務器架構了。還有就是搭建了一個gogsmysql
也就能運行php環境這個階段,同時開始經過經理給的需求,進行需求分析和於上司經行業務梳理,而後制度方案,一開始的架構很簡單,也加咱們說的 dump ,連redis緩存機制都沒有,緩存用的是本地文件機制來處理。
初版的時候:服務器環境是這樣的
linux
所有的代碼都在一臺主機上運行。由於當時業務並不算大。我並無選擇國內所說的centos作服務器系統,而是選擇了ubuntu來作,由於ubuntu的軟件庫的支持,我距地是外來雲計算會有很大的做用。nginx
後面咱們須要用到緩存機制,那麼咱們的環境架構也須要更新支持,在windows上會出現各類奇葩的問題,好比php擴展的安裝就是windows的頭疼問題,如今的windows10已經有解決方案,但是當時的咱們沒有這種條件,php的圖片處理須要擴展,什麼都須要。那時候我開始提出使用虛擬機做爲咱們的開發環境,使用的vm虛擬機,利用的是vm虛擬共享文件機制,加上hosts的映射到虛擬機中。這樣處理後,咱們企業的php環境保證一至。laravel
這時候的開發環境就變成了
git
隨着本身對linux的熟悉,和環境搭建的逐漸深刻。16年能夠說是vue爆發的一年,我在14年就已經接觸vue這個框架,但是當時的人嚮往的是angluar.js,我知道國人的尿性,vue早晚是一個趨勢,16年vue爆發,生態完善,同時小程序的出現,瞭解了一下,發現小程序有點像vue,後面也有類vue框架的出現,那是我意識到先後分離的重要性。這個時候纔算真正入門架構搭建。
這時候的屬於中規中矩的一種軟件開發中的處理手段,到了後面,mysql的數據庫須要作讀寫分離,通常的人是怎麼處理呢?還就真的是處理配置讀寫分離,在程序上作一些判斷!!!就是寫的時候catenation讀數據庫,catenation寫數據庫,這樣作也不是不行,只是後面的時候,你的系統解藕會很是痛苦,可能你有時候都忘了那個地方寫個catenation別名。我選擇的是使用中間件連接池來管理個人數據庫讀寫分離。
這個時候我已經開始認識Swoole了,我無心間在開源中國發現SMProxy這個基於Swoole的數據庫連接池。因此後面也就開始出現如下狀況。
隨着後面的訪問量上來以後,mysql讀的速度跟不上了,由於用的是laravel,laravel運行速度大家都懂,我就很少說了,那時候知道laravel+swoole能夠提升性能,但是每次都要去服務器重啓服務,並且那時候的swoole還停留在1.9的版本,估計坑也很多,因此爲了保守,就在mysql和api層都作了負載均衡。
你就看到了以下狀況。
爲何須要用到 keepalived 去監聽寫入的mysql? 若是mysql寫入掛了,keepalived一旦檢查到,會把某臺讀mysql換左寫入數據庫。保證你的系統還能夠繼續進行。
到了這裏,就算你的電腦是16G運行這麼臺虛擬機後不免也會有點卡的啦,雖然之前有用過docker,但是那時候對linux並不熟悉,搭建環境的時候,會遇到各類問題,Dockerfile 寫都寫不出來,直到今年19年4月,我開始意識到我須要docker了,而19年的docker已經很完善了,docker-compose的出現,可讓你模擬的環境一鍵部署。我一開始去github 找了好幾個docker-compose版本的來看看,並吸取他們的精華,並如今本身的docker-composer 項目環境部署。
ui層一直是我來維護的,我選擇的是React作爲個人技術棧,不爲別的,就由於他支持Ts,寫代碼跟舒服,並且有antd這個叼東西支持。但是咱們的ui層分爲 小程序 / express.js (PC端渲染層 SEO)/ 手機端 React 。小程序 和 React 還好說,是靜態資源,express 就有點麻煩了,須要重啓服務,因此這個時候就須要pm2的接入。同時Swoole的完善進入Swoole4。
因爲swoole 的高性能,因此以前的負載均衡就能夠剩下來了。
隨着ui層 和 swoole 每次迭代更新代碼,都須要作一個繁瑣的操做,打包編譯。
因此這個時候就有了jenkins這個角色。
jenkins簡單點就是自動化部署工具,如今有了docker 安裝簡單的要死。。
到了這裏,幾乎通常軟件開發均可以應付。固然這裏這是環境搭建而已,還有一些業務梳理架構沒有詳細說明,若是你能搭建到以上服務器環境的話,那麼你的項目就不可能,只停留在寫代碼這麼簡單了,由於如今是數據驅動行業的年代,咱們須要對用戶行爲進行分析!!!
每每咱們市場說得最多得就是 pv uv,若是是你,你會怎麼處理?
若是沒有接觸過nignx 日誌的碼農通常都會給出兩個方案:
第一,使用站長工具
第二,利用 ajax + 創建數據庫模型。而後使用程序+mysql作統計分析。
第二種是,屬於高級版本,每每須要用到Redis + 定時任務來寫入數據庫,若是不是這樣,你的寫入數據庫不作集羣?等着呵呵吧。
若是接觸過nginx日誌的同窗來講,php面對這一個海量數據的時候,不少PHP 或者 Node 的開發人員第一時間都會矇蔽,是的若是你聽到海量數據,你第一反應的就是hadopp,這個時候咱們須要跳出本身生活許久的圈子(PHP + Node),爲何要選擇Hadoop而不是採用第二種方式呢?由於Hadoop提供了不少面對海量數據的算法,還有以前寫爬蟲的時候利用的是python,python+Hadoop 數據分析,你還用愁你分析不出東西嗎?
因此又獲得如下日誌架構
等等一些nginx的用戶行爲。
有了以上的日誌分析,咱們會發現有時候會有同行或者某些人,是惡意掃描咱們的服務器,我這個時候就應該須要Api網關了。
我選擇的是kong,其實你用nginx也能夠,不過嘛,你也懂php / node 出生的,哪裏懂那些底層的東西...,除非你會golang。
Kong 是經過 Admin API 管理,不像Nginx那樣在配置中完成。有管理工具你不用你傻呀?並且 Kong支持 Lua 插件機制 、支持OAuth2.0、黑白名單、ACL、JWT、SSL 等 、限量的Rate Limiting 還有 可管理性Rest API 交互 性能也比較高。
因此又改了一下
到了後面你的數據量也會愈來愈大,這個時候你還在用mysql的全文搜索索引,是很不現實的一建事情。
這個時候你不得不考慮使用 搜索引擎。外國人用的比較多的是Elastic Search
固然laravel也對Elastic Search
的支持。惋惜嘛這個東西消耗的資源太大了。咱們最後仍是使用了xunsearch,雖然這個東西有時候搜索的東西不許,可是至少能用....,就是配置起來嘛沒有Elastic Search方便。
這裏搜索引擎用在搜索產品上,你須要用 隊列 或者 定時任務 來同步 xunsearch 和 mysql 之間的關係。
2019 9 月,這是一個尷尬的時候,因爲實體經濟的下滑,系統也過於穩定。大老闆不想在開發系統了。技術部面臨解散,我和上司,經理告白以後。從新踏上招工做的路程。
我並不知道本身能不能勝任架構師這個崗位,由於看了看描述,幾乎都在本科學歷。我想一想我能夠作前端/php/全棧這個些崗位。
也開始投,但是嘛,怎麼說呢。帶人我也帶過,雖說技術不是很精,但是業務處理能力我也是有的,你也不能由於我學歷還有年輕壓我工資嘛。
9月底,決定跳出中山這個環境。去了廣州二家企業面試,感受作不會之前的事了,要當回碼農,可玩的事情就變得愈來愈少了。
最後不知道什麼緣由,我遇到一家創業公司的邀約。
就這樣我又回到之前的工做內容
需求分析 業務梳理 架構搭建,如今老闆算是比較成功的啦,能夠把平臺作到300wpv的巔峯時期。
我看來看如今的pv仍是能夠的 天天也有10v ,不過以前的那個系統bug較多,系統也沒有利用設計模式開發,全是堆代碼,技術總監的離職,我感受這個坑我是接不了。
申請重構代碼,並把一些不合理的業務從新梳理一遍
而後架構也變爲一下狀態
又從零開始了,來着可憐的程序員傻夢傻,如今面臨的問題是 docker 在不一樣機子部署的時候,都要麻煩的去 開啓端口映射, 因此將來須要作得是 學習k8s ,還有mysql 之前用的是 orm較多, 但是如今爲了提升這方便的知識,偶爾會寫sql api層減小 查詢次數。
SQL 我如今用的是基於小米的soar-web。