技術演進的方向

2021-09-29 22:07:22 字數 4236 閱讀 7717

1.技術演進的方向?

1.1 判斷方向的3大派別

• 潮流派

特點:熱衷新技術,緊跟技術潮流,迫切想將新技術應用起來

問題:新技術未成熟,可能遇到坑;掌握新技術後才知不適合,成本很高

• 保守派

特點:戒備新技術,穩定壓倒一切,一種技術打遍天下

問題:無法享受到新技術帶來的收益

• 跟風派

特點:跟緊競爭對手,對方用什麼技術自己就用什麼

問題:可能無風可跟;無法獲取完整資訊,跟不上,跟上了也可能不適合

2.技術演進的動力

• 市場、技術、管理,三者構成支撐業務發展的鐵三角,業務是中心。

• 技術與業務的關係可以分兩類:

產品類業務,是技術創新推動業務發展,核心是產品功能是否更好幫助自己完成某項任務。

服務類業務,是業務發展推動技術的發展,核心是『使用者規模』決定業務,業務發展的核心驅動力是服務模式的創新

3.技術演進的模式

• 判斷標準:基於業務發展階段進行判斷

4.網際網路技術演進的模式

由於各行業的業務發展軌跡並不完全相同,無法給出乙個統一的模板讓所有的架構師拿來就套用,因此我以網際網路的業務發展為案例,談談網際網路技術演進的模式,其他行業可以參考分析方法對自己的行業進行分析。

網際網路業務千差萬別,但由於它們具有「規模決定一切」的相同點,其發展路徑也基本上是一致的。網際網路業務發展一般分為幾個時期:初創期、發展期、競爭期、成熟期。

不同時期的差別主要體現在兩個方面:複雜性、使用者規模。

4.1 業務複雜性

網際網路業務發展第乙個主要方向就是「業務越來越複雜」,我們來看看不同時期業務的複雜性的表現。

4.1.1 初創期

網際網路業務剛開始一般都是乙個創新的業務點,這個業務點的重點不在於「完善」,而在於「創新」,只有創新才能吸引使用者;而且因為其「新」的特點,其實一開始是不可能很完善的。只有隨著越來越多的使用者的使用,通過快速迭代試錯、使用者的反饋等手段,不斷地在實踐中去完善,才能繼續創新。

4.1.2 發展期

當業務推出後經過市場驗證如果是可行的,則吸引的使用者就會越來越多,此時原來不完善的業務就進入了乙個快速發展的時期。業務快速發展時期的主要目的是將原來不完善的業務逐漸完善,因此會有越來越多的新功能不斷地加入到系統中。對於絕大部分技術團隊來說,這個階段技術的核心工作是快速地實現各種需求,只有這樣才能滿足業務發展的需要。

如何做到「快」,一般會經歷下面幾個階段。

• 堆功能期

業務進入快速發展期的初期,此時團隊規模也不大,業務需求又很緊,最快實現業務需求的方式是繼續在原有的系統裡面不斷地增加新的功能,重構、優化、架構等方面的工作即使想做,也會受制於人力和業務發展的壓力而放在一邊。

• 優化期

「堆功能」的方式在剛開始的時候好用,因為系統還比較簡單,但隨著功能越來越多,系統開始變得越來越複雜,後面繼續堆功能會感到越來越吃力,速度越來越慢。一種典型的場景是做乙個需求要改好多地方,一不小心就改出了問題。直到有一天,技術團隊或者產品人員再也受不了這種慢速的方式,終於下定決定要解決這個問題了。

如何解決這個問題,一般會分為兩派:一派是優化派,一派是架構派。

優化派的核心思想是將現有的系統優化。例如,採用重構、分層、優化某個 mysql 查詢語句,將機械硬碟換成 ssd,將資料庫從 mysql 換成 oracle,增加 memcache 快取等。優化派的優勢是對系統改動較小,優化可以比較快速地實施;缺點就是可能過不了多久,系統又撐不住了。

架構派的核心思想是調整系統架構,主要是將原來的大系統拆分為多個互相配合的小系統。例如,將購物系統拆分為登入認證子系統、訂單系統、查詢系統、分析系統等。架構派的優勢是一次調整可以支撐比較長期的業務發展,缺點是動作較大、耗時較長,對業務的發展影響也比較大。

相信在很多公司都遇到這種情況,大部分情況下都是「優化派」會贏,主要的原因還是因為此時「優化」是最快的方式。至於說「優化派」支撐不了多久這個問題,其實也不用考慮太多,因為業務能否發展到那個階段還是個未知數,保證當下的競爭力是最主要的問題。

• 架構期

架構期可以用的手段很多,但歸根結底可以總結為乙個字「拆」,什麼地方都可以拆。

拆功能:例如,將購物系統拆分為登入認證子系統、訂單系統、查詢系統、分析系統等。

拆資料庫:mysql 一台變兩台,2 台變 4 臺,增加 dbproxy、分庫分表等。

拆伺服器:伺服器一台變兩台,2 台變 4 臺,增加負載均衡的系統,如 nginx、haproxy 等。

4.1.3 競爭期

當業務繼續發展,已經形成一定規模後,一定會有競爭對手開始加入行業來競爭,畢竟誰都想分一塊蛋糕,甚至有可能一不小心還會成為下乙個 bat。當競爭對手加入後,大家互相學習和模仿,業務更加完善,也不斷有新的業務創新出來,而且由於競爭的壓力,對技術的要求是更上一層樓了。

新業務的創新給技術帶來的典型壓力就是新的系統會更多,同時,原有的系統也會拆得越來越多。兩者合力的乙個典型後果就是系統數量在原來的基礎上又增加了很多。架構拆分後帶來的美好時光又開始慢慢消逝,技術工作又開始進入了「慢」的狀態,這又是怎麼回事呢?

原來系統數量越來越多,到了乙個臨界點後就產生了質變,即系統數量的量變帶來了技術工作的質變。主要體現在下面幾個方面:

• 重複造輪子:系統越來越多,各系統相似的工作越來越多。例如,每個系統都有儲存,都要用快取,都要用資料庫。新建乙個系統,這些工作又要都做一遍,即使其他系統已經做過了一遍,這樣怎麼能快得起來?

• 系統互動一團亂麻:系統越來越多,各系統的互動關係變成了網狀。系統間的互動數量和系統的數量成平方比的關係。例如,4 個系統的互動路徑是 6 個,10 個系統的互動路徑是 45 個。每實現乙個業務需求,都需要幾個甚至十幾個系統一起改,然後互相呼叫來呼叫去,聯調成了研發人員的災難、聯測成了測試人員的災難、部署成了運維的災難。

針對這個時期業務變化帶來的問題,技術工作主要的解決手段有:

平台化:

目的在於解決「重複造輪子」的問題。

儲存平台化:**的 tfs、京東 jfs。

服務化目的在於解決「系統互動」的問題,常見的做法是通過訊息佇列來完成系統間的非同步通知,通過服務框架來完成系統間的同步呼叫。

訊息佇列:**的 notify、metaq,開源的 kafka、activemq 等。

服務框架:facebook 的 thrift、當當網的 dubbox、**的 hsf 等。

4.1.4 成熟期

當企業熬過競爭期,成為了行業的領頭羊,或者整個行業整體上已經處於比較成熟的階段,市場地位已經比較牢固後,業務創新的機會已經不大,競爭壓力也沒有那麼激烈,此時求快求新已經沒有很大空間,業務上開始轉向為「求精」:我們的響應時間是否比競爭對手快?我們的使用者體驗是否比競爭對手好?我們的成本是否比競爭對手低……

此時技術上其實也基本進入了成熟期,該拆的也拆了,該平台化的也平台化了,技術上能做的大動作其實也不多了,更多的是進行優化。但有時候也會為了滿足某個優化,系統做很大的改變。例如,為了將使用者響應時間從 200ms 降低到 50ms,可能就需要從很多方面進行優化:cdn、資料庫、網路等。這個時候的技術優化沒有固定的套路,只能按照競爭的要求,找出自己的弱項,然後逐項優化。在逐項優化時,可以採取之前各個時期採用的手段。

4.2 使用者規模

網際網路業務的發展第二個主要方向就是「使用者量越來越大」。網際網路業務的發展會經歷「初創期、發展期、競爭期、成熟期」幾個階段,不同階段典型的差別就是使用者量的差別,使用者量隨著業務的發展而越來越大。

使用者量增大對技術的影響主要體現在兩個方面:效能要求越來越高、可用性要求越來越高。

4.2.1 效能

使用者量增大給技術帶來的第乙個挑戰就是效能要求越來越高。以網際網路企業最常用的 mysql 為例,再簡單的查詢,再高的硬體配置,單台 mysql 機器支撐的 tps 和 qps 最高也就是萬級,低的可能是幾千,高的也不過幾萬。當使用者量增長後,必然要考慮使用多台 mysql,從一台 mysql 到多台 mysql 不是簡單的數量的增加,而是本質上的改變,即原來集中式的儲存變為了分布式的儲存。

稍微有經驗的工程師都會知道,分布式將會帶來複雜度的大幅度上公升。以 mysql 為例,分布式 mysql 要考慮分庫分表、讀寫分離、複製、同步等很多問題。

4.2.2 可用性

使用者量增大對技術帶來的第二個挑戰就是可用性要求越來越高。當你有 1 萬個使用者的時候,宕機 1 小時可能也沒有很大的影響;但當你有了 100 萬使用者的時候,宕機 10 分鐘,投訴**估計就被打爆了,這些使用者再到朋友圈抱怨一下你的系統有多爛,很可能你就不會再有機會發展下乙個 100 萬使用者了。

除了口碑的影響,可用性對收入的影響也會隨著使用者量增大而增大。1 萬使用者宕機 1 小時,你可能才損失了幾千元;100 萬使用者宕機 10 分鐘,損失可能就是幾十萬元了。

技術的演進

對人們生活影響最大的是技術的進步,技術一直都是圍繞著生存和繁衍這兩大主題進行發展的,而技術的進步是因為人類集群的大規模協作。在整個過程中趨向於熵增加,也就是說技術的複雜度越來越高。石器遠古時代的人類不滿足於果實,需要營養含量更高的食物,在肉體力量上又無法與其他食肉動物相抗衡,只能使用石器敲開被其他食...

儲存網路的未來演進方向?

使用者期望應用能夠立即響應,快閃儲存器儲存毋庸置疑可幫助實現這個級別的效能。事實上,資料中心採用快閃儲存器還能帶來其他諸多優勢,例如 別忘了公升級網路 儘管企業投資快閃儲存器儲存是為了獲得那些預期的優勢,實際情況或許與計畫中的不同,有可能並不會從這項投資中獲得企業所期待的一切。例如,儲存與伺服器之間...

LINQ的技術演進

以乙個簡單的例子來說明 var developersusingcsharp from d in developers where d.language c select d.name 1 提供對ienumerable的extension method使得它可以將where,select應用到任意實現...