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