摘要:架構(gòu)團(tuán)隊(duì)的人是不是很輕松,業(yè)務(wù)團(tuán)隊(duì)天天加班搞項(xiàng)目,架構(gòu)團(tuán)隊(duì)貌似都是在喝茶聊天研究一些不實(shí)用的東西。架構(gòu)團(tuán)隊(duì)的架構(gòu)師最好是在業(yè)務(wù)團(tuán)隊(duì)深耕過,知道痛點(diǎn)所在的,這樣研發(fā)出來的系統(tǒng)和工具能夠和公司目前的項(xiàng)目所匹配發(fā)揮最大的作用,讓大家愛不釋手。
最近幾年寫博客確實(shí)寫得少了,初出茅廬的時(shí)候什么都愿意去寫,現(xiàn)在寫一點(diǎn)東西之前會(huì)反復(fù)斟酌是否有價(jià)值。工作十幾年了,做了N多個(gè)互聯(lián)網(wǎng)系統(tǒng),業(yè)務(wù)涉及教育、游戲、電商、O2O、P2P,算是各種類型的互聯(lián)網(wǎng)系統(tǒng)都摸過,多少有一些心得,架構(gòu)方面的文章網(wǎng)上很多很多,有些是說一些方法論,有些是說一些具體的案例,感覺自己想分享的東西和別人已分享的是有點(diǎn)不同的,還是應(yīng)該留下點(diǎn)什么。在這里我更多想分享一下搭建一套完整的互聯(lián)網(wǎng)系統(tǒng)架構(gòu)方面一些具體的實(shí)踐心得,大概會(huì)從這幾個(gè)方面來寫:
各種廢話的閑聊和吐槽
屢試不爽的架構(gòu)三馬車:介紹一個(gè)簡(jiǎn)單實(shí)用的可擴(kuò)展的互聯(lián)網(wǎng)架構(gòu)
相輔相成的存儲(chǔ)四件套:介紹一下個(gè)人比較喜歡的一個(gè)存儲(chǔ)組合以及適用場(chǎng)景
簡(jiǎn)單好用的監(jiān)控六兄弟:介紹監(jiān)控方面一直在用的一些工具以及強(qiáng)調(diào)監(jiān)控的重要性
不斷耕耘的基礎(chǔ)中間件:中后期的項(xiàng)目需要有完善的基礎(chǔ)中間件,這里進(jìn)行逐一介紹
令人頭痛的飛機(jī)換引擎:有的時(shí)候需要對(duì)高速發(fā)展的項(xiàng)目進(jìn)行重構(gòu),這里分享一些經(jīng)驗(yàn)
三十種架構(gòu)設(shè)計(jì)模式(上):針對(duì)微軟總結(jié)的一些架構(gòu)設(shè)計(jì)模式給出自己的一些理解
三十種架構(gòu)設(shè)計(jì)模式(下):針對(duì)微軟總結(jié)的一些架構(gòu)設(shè)計(jì)模式給出自己的一些理解
架構(gòu)評(píng)審和架構(gòu)文檔:自己總結(jié)的架構(gòu)評(píng)審100問以及架構(gòu)文檔5要素
有關(guān)All-In-One架構(gòu)很多項(xiàng)目起步的時(shí)候都會(huì)以一個(gè)All-In-One的項(xiàng)目起步,使用一套MVC框架,對(duì)外提供數(shù)據(jù)的Controller、包含業(yè)務(wù)邏輯的Service、訪問數(shù)據(jù)庫(kù)的DAL、定時(shí)任務(wù),所有的東西都在一個(gè)項(xiàng)目?jī)?nèi),然后在半年和一年之后業(yè)務(wù)發(fā)展起來了急需對(duì)現(xiàn)在的架構(gòu)進(jìn)行重構(gòu)(說的不好聽就是推翻重來了),原因如下:
超過5人在同一個(gè)大項(xiàng)目中修改代碼,分支管理代碼沖突解決成本太高了。
隨著壓力的上升這么簡(jiǎn)單的直腸子架構(gòu)很難去拆分分散壓力從而頂不住高并發(fā)。
雖然對(duì)于MVC我們會(huì)有明確的目錄來存放三大組件的邏輯但是隨著業(yè)務(wù)邏輯越來越復(fù)雜,我們會(huì)有聚合的Controller和聚合的Service產(chǎn)生,所有組件不再位于同一個(gè)水平面,代碼全都堆積在一起腐化很快,容易形成復(fù)制粘貼的趨向。
除非已經(jīng)明確是實(shí)驗(yàn)性臨時(shí)性的項(xiàng)目,我個(gè)人不建議以這樣的方式起步,使用一個(gè)相對(duì)簡(jiǎn)單的架構(gòu)(見文2)并不會(huì)浪費(fèi)太多的時(shí)間,但是這個(gè)開局往往可以避免之后的推翻重來。
有關(guān)百花齊放的平臺(tái)和語(yǔ)言我個(gè)人從.NET轉(zhuǎn)到Java平臺(tái),之前的公司有使用過PHP,Python,Go。經(jīng)歷過.NET和PHP轉(zhuǎn)Java,經(jīng)歷過混用各種語(yǔ)言的公司。在這幾想說幾點(diǎn):
曾經(jīng)犯過錯(cuò),在團(tuán)隊(duì)不大的時(shí)候允許保留兩種技術(shù)PHP和Java同時(shí)發(fā)展。無(wú)論大小,每個(gè)團(tuán)隊(duì)的成員都需要自己的技術(shù)發(fā)展和晉升,每個(gè)技術(shù)棧都有不同的運(yùn)維方式,每個(gè)技術(shù)都會(huì)有各自的妖怪問題,在一個(gè)規(guī)模不大的技術(shù)團(tuán)隊(duì)里同時(shí)使用多個(gè)技術(shù),對(duì)于團(tuán)隊(duì)來說真是一個(gè)很大的消耗。語(yǔ)言的確有各司其職發(fā)揮所長(zhǎng)之說,但是小于30人規(guī)模的開發(fā)團(tuán)隊(duì)真沒必要這么早進(jìn)行技術(shù)棧的分叉。
隨著團(tuán)隊(duì)規(guī)模的擴(kuò)大,處于招聘成本、使用成本、性能、資源豐富性等等問題,往往會(huì)進(jìn)行技術(shù)轉(zhuǎn)型,許多平臺(tái)花了幾年時(shí)間都無(wú)法徹底從.NET或PHP轉(zhuǎn)到Java,這是一個(gè)痛苦的過程。雖說技術(shù)負(fù)責(zé)人總是趨向于一開始使用自己熟悉的技術(shù)棧來搭建系統(tǒng),但是不得不承認(rèn)Java這門綜合性很強(qiáng)的語(yǔ)言是一個(gè)不錯(cuò)的開局方式,開源資源豐富、好招人、高手多、開發(fā)效率還湊活、性能也不算差、少點(diǎn)折騰就能把精力更多放到業(yè)務(wù)上。倒不是說.NET和PHP不好,而是我們最后需要接受很多殘酷的現(xiàn)實(shí)。
隨著項(xiàng)目規(guī)模的擴(kuò)大,很多東西勢(shì)必需要自己來寫,開源往往不適合,這個(gè)時(shí)候發(fā)揮語(yǔ)言各自的所長(zhǎng)又會(huì)顯得很重要。Go在性能方面、可移植性方面、開發(fā)效率方面、高并發(fā)友好性方面有獨(dú)特的優(yōu)勢(shì),是開發(fā)(網(wǎng)絡(luò))中間件的很不錯(cuò)的候選語(yǔ)言,往往可以替代C。Python的開發(fā)效率奇高,豐富的類庫(kù)基本任何需求都是一行代碼一句API解決問題,作為運(yùn)維平臺(tái)各種工具和爬蟲的開發(fā)語(yǔ)言再適合不過,在AI方面也是鶴立雞群無(wú)可替代。
開發(fā)應(yīng)該多接觸幾門語(yǔ)言,這是非常有好處的。有些語(yǔ)言在高并發(fā)方面有優(yōu)勢(shì),有些語(yǔ)言在函數(shù)式編程方面發(fā)展的很好,有些語(yǔ)言在語(yǔ)法糖方面設(shè)計(jì)的很漂亮,每個(gè)語(yǔ)言在其特色上所在的層次會(huì)比較高一點(diǎn),也容易被其它語(yǔ)言借鑒,多看一些語(yǔ)言會(huì)讓自己知道每一個(gè)技術(shù)能好到什么程度,不容易在綜合性語(yǔ)言中成為井底之蛙。
有關(guān)平臺(tái)架構(gòu)團(tuán)隊(duì)和業(yè)務(wù)團(tuán)隊(duì)技術(shù)團(tuán)隊(duì)到了一定程度不但會(huì)橫向拆分為前中后臺(tái),還會(huì)縱向拆分為框架架構(gòu)團(tuán)隊(duì)和業(yè)務(wù)團(tuán)隊(duì),研發(fā)中間件或框架的平臺(tái)架構(gòu)團(tuán)隊(duì)和一心耕耘業(yè)務(wù)代碼的業(yè)務(wù)團(tuán)隊(duì)我都待過。在架構(gòu)團(tuán)隊(duì)的時(shí)候我們總會(huì)吐槽:
業(yè)務(wù)團(tuán)隊(duì)不愿意配合架構(gòu)團(tuán)隊(duì)做技術(shù)升級(jí),架構(gòu)團(tuán)隊(duì)辛辛苦苦搞這些還不是在解決業(yè)務(wù)團(tuán)隊(duì)的問題?
業(yè)務(wù)團(tuán)隊(duì)太謹(jǐn)慎保守了總是擔(dān)心架構(gòu)升級(jí)影響現(xiàn)有系統(tǒng),想法太老舊了一點(diǎn)架構(gòu)意識(shí)都沒有?
在業(yè)務(wù)團(tuán)隊(duì)的時(shí)候我們又會(huì)吐槽:
架構(gòu)團(tuán)隊(duì)總是高高在上的樣子,他們體會(huì)不到業(yè)務(wù)的復(fù)雜性,做出來的東西根本不實(shí)用,這么難用的東西還不如我們的土辦法。
架構(gòu)團(tuán)隊(duì)的人是不是很輕松,業(yè)務(wù)團(tuán)隊(duì)天天加班搞項(xiàng)目,架構(gòu)團(tuán)隊(duì)貌似都是在喝茶聊天研究一些不實(shí)用的東西。
在這里想表達(dá)幾個(gè)觀點(diǎn):
技術(shù)發(fā)展到一定的程度,一定是需要一些中間件或框架來做統(tǒng)一的事情,這些中間件結(jié)合在一起形成一個(gè)平臺(tái)(見文5)可以大大減少出問題排錯(cuò)的時(shí)間,也可以讓一些高并發(fā)下的優(yōu)化工作更簡(jiǎn)單。
架構(gòu)團(tuán)隊(duì)的架構(gòu)師最好是在業(yè)務(wù)團(tuán)隊(duì)深耕過,知道痛點(diǎn)所在的,這樣研發(fā)出來的系統(tǒng)和工具能夠和公司目前的項(xiàng)目所匹配發(fā)揮最大的作用,讓大家愛不釋手。
在做架構(gòu)升級(jí)的時(shí)候?qū)I(yè)務(wù)侵入性越小越好,業(yè)務(wù)團(tuán)隊(duì)無(wú)感知最好,前提是我們的一些核心架構(gòu)框架和中間件已經(jīng)是統(tǒng)一的標(biāo)準(zhǔn)化的,有一些框架還是自己研發(fā)比較好,在之后的一些文中會(huì)提到這個(gè)觀點(diǎn)。
做業(yè)務(wù)往往變動(dòng)大,我們總是會(huì)習(xí)慣很多事情先手動(dòng)來做,慢慢形成了對(duì)工具化自動(dòng)化理念沒有這么敏銳。如果在這個(gè)時(shí)候有局外人能參與一下說不定可以碰撞出很多好的框架和工具來幫助我們提高生產(chǎn)力,這其實(shí)是一個(gè)好事情。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/11927.html
摘要:架構(gòu)團(tuán)隊(duì)的人是不是很輕松,業(yè)務(wù)團(tuán)隊(duì)天天加班搞項(xiàng)目,架構(gòu)團(tuán)隊(duì)貌似都是在喝茶聊天研究一些不實(shí)用的東西。架構(gòu)團(tuán)隊(duì)的架構(gòu)師最好是在業(yè)務(wù)團(tuán)隊(duì)深耕過,知道痛點(diǎn)所在的,這樣研發(fā)出來的系統(tǒng)和工具能夠和公司目前的項(xiàng)目所匹配發(fā)揮最大的作用,讓大家愛不釋手。 最近幾年寫博客確實(shí)寫得少了,初出茅廬的時(shí)候什么都愿意去寫,現(xiàn)在寫一點(diǎn)東西之前會(huì)反復(fù)斟酌是否有價(jià)值。工作十幾年了,做了N多個(gè)互聯(lián)網(wǎng)系統(tǒng),業(yè)務(wù)涉及教育、游...
摘要:還可以初步判斷出問題的原因是異常導(dǎo)致還是突增的壓力所致。通過面板配置的服務(wù)調(diào)用量和業(yè)務(wù)進(jìn)出量,排除上下游問題,定位出問題的模塊。 這里所說的六兄弟只指ELK套件(ElasticSearch+Logstash+Kibana)以及TIG套件(Telegraf+InfluxDb+Grafana)。 showImg(https://segmentfault.com/img/bVbhS81?w=...
摘要:同步寫服務(wù)負(fù)責(zé)第一時(shí)間把重要的數(shù)據(jù)落地和落緩存。因?yàn)榛蛑鲝膹?fù)制導(dǎo)致的一些事故也是層出不窮的。這也是圖中對(duì)于的寫入由專門的異步流程進(jìn)行的原因。合理規(guī)劃好的方式,以及想好在后的全套查詢方案。合理利用不同數(shù)據(jù)源的特性,組合使用發(fā)揮所長(zhǎng),避免 這里所說的五件套是指關(guān)系型數(shù)據(jù)庫(kù)、索引型數(shù)據(jù)庫(kù)、時(shí)序型數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)和緩存型數(shù)據(jù)庫(kù)。 showImg(https://segmentfault.c...
摘要:同步寫服務(wù)負(fù)責(zé)第一時(shí)間把重要的數(shù)據(jù)落地和落緩存。因?yàn)榛蛑鲝膹?fù)制導(dǎo)致的一些事故也是層出不窮的。這也是圖中對(duì)于的寫入由專門的異步流程進(jìn)行的原因。合理規(guī)劃好的方式,以及想好在后的全套查詢方案。合理利用不同數(shù)據(jù)源的特性,組合使用發(fā)揮所長(zhǎng),避免 這里所說的五件套是指關(guān)系型數(shù)據(jù)庫(kù)、索引型數(shù)據(jù)庫(kù)、時(shí)序型數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)和緩存型數(shù)據(jù)庫(kù)。 showImg(https://segmentfault.c...
閱讀 2201·2021-11-22 11:56
閱讀 2647·2021-10-08 10:05
閱讀 7772·2021-09-22 15:53
閱讀 1910·2021-09-22 15:29
閱讀 2234·2021-09-08 09:35
閱讀 3354·2021-09-07 10:12
閱讀 1379·2019-08-30 13:11
閱讀 1968·2019-08-28 17:54