自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何獲得高并發(fā)的項目經驗?

開發(fā) 前端
今天我們邀請了 3 名淘系技術工程師,給大家分享一些他們在高并發(fā)項目的學習實踐經驗&面試回答經驗,希望能夠對你有幫助。

 

在互聯(lián)網公司,經常面臨一個“三高”問題: 高并發(fā)、高性能、高可用。

我們經常收到一些同學提問: 我沒有高并發(fā)項目經驗,工作中沒有這樣的場景。 但是面試的時候經常被問到高并發(fā)、性能調優(yōu)方面的問題,有什么辦法可以學習或者解決嗎?

這種時候,你需要有一個全局的技術視野,熟悉一些常用的系統(tǒng)優(yōu)化方法論,以及學會一些關于系統(tǒng)設計的解答思路。

今天我們邀請了 3 名淘系技術工程師,給大家分享一些他們在高并發(fā)項目的學習實踐經驗&面試回答經驗,希望能夠對你有幫助。

01

淘系技術部-產品技術-昭明

“ 高并發(fā)系統(tǒng)是可遇不可求的,但其實是可以通過壓測來模擬的。”

現(xiàn)實中,哪怕是大公司,高并發(fā)系統(tǒng)也是可遇不可求的。不過,高并發(fā)其實是可以通過壓測來模擬的。

高并發(fā)的背后,核心是高可用和低延遲。所以我們其實是想有能力設計一個系統(tǒng),在高并發(fā)訪問的時候,系統(tǒng)依然可用,而且響應速度不會變慢。

想提升高并發(fā)系統(tǒng)的設計和開發(fā)能力,有2個方面:

  • 系統(tǒng)的學習相關理論;

  • 找一個目標系統(tǒng),不斷想辦法去提升他的性能。

前者是后者的理論基礎。

如果想從事一個高并發(fā)系統(tǒng)開發(fā)的崗位,要學習的相關技術其實是很多的,這些技術核心就是解決高并發(fā)情況下如何保持系統(tǒng)的高可用和低延遲。

以Java工程師為例,互聯(lián)網程序員面試中經常會考察的內容包括:

   架構設計

高可用與穩(wěn)定性、事務一致性、多副本一致性、CAP理論。

  相關技術

多線程(JUC/AQS/線程池)、RPC調用及框架(如Thrift)、NIO及NIO框架(如Netty)、高并發(fā)框架(如Disruptor) 、微服務框架(SpringBoot)、微服務治理(Spring Cloud)、數(shù)據(jù)庫相關技術(如:索引優(yōu)化、分庫分表、讀寫分離)、分布式緩存(如redis)、消息中間件系統(tǒng)(如RabbitMQ)、容器技術(如docker)。

  工具

系統(tǒng)性能查看(top、uptime、vmstat、iostat)、壓測工具(如ab、locust、Jmeter、go)、線程分析(如jps、jstack)等。

當然,一開始,我們不可能逐一把這些技能全部掌握,我們可以從一個實際項目入手,不斷的把這些技術用上去,發(fā)現(xiàn)哪些知識不足,再去補充相關的知識。

“如何設計一個好的秒殺系統(tǒng)“,一定是互聯(lián)網大廠面試中最常問的一個問題。所以從設計一個秒殺系統(tǒng)開始實踐,是個不錯的選擇。

  秒殺系統(tǒng)的特點:

  • 瞬時并發(fā)量大

秒殺時會 有大量用戶在同一時間進行搶購,瞬時并發(fā)訪問量突增 10 倍,甚至 100 倍以上都有。

  • 庫存量少

一般秒殺活動商品量很少,這就導致了只有極少量用戶能成功購買到。

  • 業(yè)務簡單

流程比較簡單,一般都是下訂單、扣庫存、支付訂單。

     設計秒殺系統(tǒng)的關鍵點

  • 限流

由于活動庫存量一般都是很少,對應的只有少部 分用戶才能秒殺成功。所以我們需要限制大部分用戶流量,只準少量用戶流量進 入后端服務器。

  • 削峰

秒殺開始的那一瞬間,會有大量用戶沖擊進來,所以在開始時候會有一個瞬間流量峰值。如何把瞬間的流量峰值變得 更平緩,是能否成功設計好秒殺系統(tǒng)的關鍵因素。實現(xiàn)流量削峰填谷,一般的采用緩存和 MQ 中間件來解決。

  • 異步

秒殺其實可以當做高并發(fā)系統(tǒng)來處理,在這個時候 ,可以考慮從業(yè)務上做兼容,將同步的業(yè)務,設計成異步處理的任務,提高網站的整 體可用性。

  • 緩存

秒殺系統(tǒng)的瓶頸主要體現(xiàn)在下訂單、扣減庫存流程中。在這些流程中主要用到 OLTP 的數(shù)據(jù)庫,類似 MySQL、Orac le。由于數(shù)據(jù)庫底層采用 B+ 樹的儲存結構,對應我們隨機寫入與讀取的效率,相對較低。如果我們把部分業(yè)務邏輯遷移到內存的緩存或者 Redis 中,會極大的提高并 發(fā)效率。

從0到1搭建一個秒殺系統(tǒng),也并不 容易,涉及到很多前端、后端、中間件的技術。這個跟其實是所有公司的工作常態(tài),大部分時間也是在搭架子,真正做技術優(yōu)化的時間并不多,經常是在業(yè)務量突增或 者大促活動來臨時,集中搞一波性能優(yōu)化。

所以,如果沒有實際的高并發(fā)項目可做,自己弄個秒殺系統(tǒng)自娛自樂也是不錯的。

搭建系統(tǒng) -> 壓測 -> 發(fā)現(xiàn)問題 -> 學習知識 -> 優(yōu)化系統(tǒng),通過這樣的循環(huán),相信你一定既能體驗到學習的樂趣,同時實力也大幅提升。

02

淘系技術部-行業(yè)與智能運營架構組-仲春

“在面試時被問到高并發(fā)經驗時不要慌,按照以下過 程表達即可體現(xiàn)你的高并發(fā)設計能力:優(yōu)化單請求耗時、提高單機并發(fā)能力、提 高整體并發(fā)能力。”

個人認為,其實我們并不用去追求嚴格意義上的高并發(fā)經驗,因為很多時候都沒有這樣的機會給到你,對于高并發(fā)的處理經驗主要體現(xiàn)在日常的積累以及對自己的嚴格要求上。

   為什么總在說高并發(fā)?

在并發(fā)不高的場景下,不區(qū)分經驗是否豐富的任何人都能完成基本的業(yè)務開發(fā),而且不會產生任何性能問題,下游依賴、底層存儲依賴都不會對你的系統(tǒng)產生影響,但是在并發(fā)很高的時候,一切都變了,可能由于高并發(fā)環(huán)境時下游抖了幾ms、db由于高寫入或者備庫讀壓力過大而導致主備延遲了一下,你的系統(tǒng)或者業(yè)務都會產生故障。

  如何積攢“經驗”?

對于這個問題,我總結3點可落地:

  • 系統(tǒng)的設計優(yōu)化

首先 系統(tǒng) 只有無狀態(tài)的,才能不斷橫向擴展,才能支撐流量的變化,在業(yè)務層的高并發(fā)大多都需要不斷擴容來支持,但是擴容也不是最根本的方式,如果系統(tǒng)不做優(yōu)化,一開始擴容大概率是有效的,到一 定階段后就會發(fā)現(xiàn)情況開始惡化,因為底層的依賴競爭開始激烈,失敗開始增多。優(yōu)化的盡頭往往是對下游依賴和底層數(shù)據(jù)層的優(yōu)化,解決方案大多是常見的緩存分層、讀寫分離、分庫分表、異步化等等,但是引入這些技術方案時,會帶來一些副作用,接下來你需要解決和屏蔽這些副作用。

  • 業(yè)務邏輯的優(yōu)化

當你只是在負責一個流量不大的系統(tǒng)時,是否就沒有高并發(fā)的機會了呢?其實不然,你需要不斷嚴格要求自己,讓業(yè)務跑的更快,例如:將單次請求響應耗時從100ms優(yōu)化到20ms;單機能力從100qps提高到500qps,同時cpu消耗上漲不明顯;優(yōu)化單次請求對緩存和db的放大系數(shù)降低,減少對緩存和db的壓力。在這個過程中你將積累大量的實戰(zhàn)經驗,完成業(yè)務開發(fā)很簡單,但是完成一個高效且具備高擴展性的業(yè)務開發(fā)卻是很難的,往前多想幾步,你會收獲很多。

  • 壓測驗證

在業(yè)務體量沒有高并發(fā)的情況下,只有自己人為創(chuàng)造流量來驗證(不過前提是你的系統(tǒng)支持全鏈路壓測,否則壓測數(shù)據(jù)會污染線上真實環(huán)境,如果暫時不支持,那么恭喜你,你有機會做一次全鏈路壓測改造了),通過驗證在目標水位下的系統(tǒng)表現(xiàn)、機器表現(xiàn),再繼續(xù)重復前面兩個過程,不斷迭代,直到無法扣細節(jié),提高性能;

   如何展示自己的高并發(fā)經驗?

只要在日常研發(fā)過程中嚴以律己,做好各項設計和優(yōu)化,不隨意寫難易擴展和難易維護的代碼,面試的時候就能聊下去。在面試時被問到高并發(fā)經驗時不要慌,只要按照以下過程表達即可體現(xiàn)你的高并發(fā)設計能力:

  • 如何優(yōu)化單請求耗時

這里你會闡述如何設計和改造系統(tǒng)架構,有可能涉及到jvm的參數(shù)優(yōu)化、各種依賴是如何選型,過程中你積累了哪些選型和優(yōu)化的方式;

  • 如何提高單機并發(fā)能力

這里你會闡述在你的業(yè)務中,單機并發(fā)能力受限于哪些關鍵點,這里主要的挑戰(zhàn)點是單機的限制條件以及單機資源的競爭,你是如何設計克服的,過程中你積累了哪些設計原則;

  • 如何提高整體并發(fā)能力


這里你會闡述在集群環(huán)境下最重要的亮點,就是如何處理跨機器的資源競爭以及數(shù)據(jù)的一致性問題,這里將體現(xiàn)你整體業(yè)務架構設計能力;

綜上所述,面試時并不是要求你一定要有真實高并發(fā)的項目經驗,項目經驗只是為了驗證你真的做過一些設計和優(yōu)化,如果你能將高并發(fā)場景下的設計原則和可能遇到的問題場景和解法都表達清楚,那么我相信面試官也是認可的。

03

淘系技術部-淘系基礎架構-羅集

“對于高并發(fā)系統(tǒng)設計,個人推薦可以自底向上的分成三個部分,首先是建立基礎知識體系,其次是熟悉業(yè)界解決方案,最后是分布式系統(tǒng)設計。 

首先高并發(fā)的系統(tǒng)也不是最初就設計出來的, 一切解決方案都是來自于業(yè)務場景 。

大多是針對特定時期內的問題與挑戰(zhàn),一步一步演化出來的。即便是在有高并發(fā)場景的公司里的研發(fā)同學,如果不是去參與解決這些問題,往往也不能直接獲得高并發(fā)的經驗積累。所以沒有場景的公司里面的研發(fā)同學,大家的起點其實是差不多的,完全不用虛,關鍵還是在于掌握其中的核心科技。

對于高并發(fā)系統(tǒng)設計,個人推薦可以自底向上的分成三個部分,首先是 建立基礎知識體系 ,其次是 熟悉業(yè)界解決方案 ,最后是 分布式系統(tǒng)設計 。

知識體系的建立要更多的去關注底層,如算法、緩存、多線程、并發(fā)、JVM、OS、網絡、分布式理論等,這些東西相對穩(wěn)定,在這些底層技術的基礎上的解決方案好像層出不窮,如各種緩存技術、各種消息隊列、各種數(shù)據(jù)庫。但是掌握了底層原理,再去看上層的解決方案就能有觸類旁通的效果。對于最后的分布式系統(tǒng)設計,就是針對具體業(yè)務場景去應用相應的技術,組裝成一套體系的方案。

對于知識的學習資料網上已經非常多,可以自行學習建立體系。自己公司沒有具體的場景,就去各大公司的技術博客學習業(yè)界方案。業(yè)界方案的學習推薦更多的思考其中的原因(Why),這個才是系統(tǒng)設計的核心。

比如一個環(huán)節(jié)拿掉會對系統(tǒng)產生什么樣的影響?換成另外一個技術會有什么不同?下面主要講一下面試中對于系統(tǒng)設計的解答思路。

   第一步,提取設計目標

分布式系統(tǒng)設計中一定要明確自己的設計目標,比如系統(tǒng)的延遲和吞吐量,有時候是不可兼得的,會直接影響到具體的技術選型。面試中自己沒有實際的項目不要緊,可以針對某個假設的業(yè)務場景提取出系統(tǒng)設計的假設,多與面試官溝通交流,說明清楚自己是基于怎樣的需求來做這個設計。

  第二步,核心模塊設計

接下來就是對系統(tǒng)的建模,需要哪幾個核心模塊,這個階段主要關注功能的滿足,比如核心的算法選擇,數(shù)據(jù)模型設計。

    第三步,擴展設計

識別系統(tǒng)的瓶頸點,結合所需要達到的系統(tǒng)指標。合理的對系統(tǒng)分層,并選用常見的擴展技術,如:

  • 負載均衡

  • 水平擴展

  • 緩存

  • 數(shù)據(jù)分片

最后,高并發(fā)系統(tǒng)的設計是一個負責且系統(tǒng)的工程,目標絕不僅僅只關注性能,實際上要同時關注高可用和擴展性。所以在實際方案的設計中,除了要考慮正常情況下性能指標是否能夠達成,還要考慮在各種異常情況下系統(tǒng)是否能處于可控的狀態(tài),如不能因為一個異常情況就發(fā)生系統(tǒng)雪崩,另外互聯(lián)網業(yè)務都是處于高速迭代和發(fā)展的過程,要保證未來的場景有足夠的演進空間。

如上,我們在日常工作和面試經歷中并不一定能夠真實經歷高并發(fā)系統(tǒng),但是我們依然有多種學習和實踐方式獲得類似經驗。如果能夠嘗試去學習和理解高并發(fā)場景下的設計原則,以及可能遇到的問題場景和解法,等真正遇到高并發(fā)項目的時候,效果也是事半功倍。

希望以上分享對大家有所幫助。一起加油~

 

責任編輯:張燕妮 來源: 淘系技術
相關推薦

2022-05-17 11:46:48

高并發(fā)服務數(shù)據(jù)庫

2019-12-03 10:46:07

PHP高并發(fā)架構

2021-05-24 09:28:41

軟件開發(fā) 技術

2011-11-08 11:03:26

App Store蘋果應用推廣

2018-05-13 22:23:32

2021-11-01 20:17:07

Go項目目錄

2025-02-28 00:03:22

高并發(fā)TPS系統(tǒng)

2025-02-26 03:00:00

2019-06-28 10:55:04

預熱高并發(fā)并發(fā)高

2022-06-12 06:45:26

高并發(fā)防重

2024-10-16 12:48:42

2021-05-14 14:52:59

高并發(fā)TPSQPS

2022-06-02 12:56:25

容器網絡云原生

2018-08-27 11:35:19

編程語言Java面試

2019-01-24 09:42:55

系統(tǒng)高并發(fā)面試

2023-09-03 22:44:28

I/O高并發(fā)

2019-12-11 10:14:23

Kafka吞吐量架構

2020-07-15 08:14:12

高并發(fā)

2019-12-13 08:52:48

高并發(fā)系統(tǒng)限流

2025-02-26 08:20:18

點贊
收藏

51CTO技術棧公眾號