成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

天天說要做性能優化,到底在優化什么?

開發 前端
連環炮問下來,對于有做過優化的老司機來說,肯定能抗住。對于沒有真正做過優化的小白來說,肯定扛不住這一系列的追問,最后只能以面試失敗而告終。

[[349912]]

 本文轉載自微信公眾號「猿天地」,作者尹吉歡  。轉載本文請聯系猿天地公眾號。 

面試過程中經常被問到:

  • 你做過性能優化嗎?
  • 優化了哪些方面?
  • 怎么做優化的?
  • 優化的效果如何?

連環炮問下來,對于有做過優化的老司機來說,肯定能抗住。對于沒有真正做過優化的小白來說,肯定扛不住這一系列的追問,最后只能以面試失敗而告終。

那么性能優化到底在優化什么呢?我們來盤點下一些常用的優化手段。

SQL 優化

當你開發的接口響應時間超過了 200ms 的時候就得優化了,當然 200ms 不是絕對值,具體還是看應用場景。以 App 舉例,進一個頁面調用 5 個接口(題外話:也可以做聚合),那么總共就是 1s 的時間,對用戶來說體驗還算可以,當然是越快響應越好。

接口耗時 200ms,其中占大頭的還是對數據庫的操作,一個接口中會有 N 次數據庫操作。所以優化 SQL 的速度優先級是最高的,大量的慢 SQL 會拖垮整個系統。

關于 SQL 的優化不是本文的重點,大部分慢 SQL 還是跟各位平時開發時的習慣有關系。大部分在寫 SQL 的時候不太會去考慮性能,只要寫出來就可以了,join 隨手就來,也不梳理查詢字段,不加索引,剛開始上線沒問題,等到并發量,數據量起來的時候就涼涼了。

關于數據庫的使用規范大家可以參考下這篇文章:老大讓我整理下公司內部mysql使用規范,分享給大家

當數據量大了后肯定要做讀寫分離和分庫分表的,這也是優化的必經之路。

  • 讀寫分離
  • 分庫分表

減少重復調用

性能不好的另一個致命問題就是重復調用,相同的邏輯在不同的方法中重復對數據庫查詢,重復調用 RPC 服務等。

比如下面的代碼:

  1. skuDao.querySkus(productId).stream().map(sku -> { 
  2.    skuDao.getById(sku.getId()); 
  3. }) 

明明數據已經查詢出來了,又根據 ID 重新去查詢了一次,數量越多,浪費的時間越多。這里只是舉例,我相信在真實的項目中大量存在重復查詢的情況,之前我還寫過一篇文章,講解如何解決這種重復查詢問題,感興趣的可以查看這篇文章:簡直騷操作,ThreadLocal還能當緩存用

按需查詢

很多業務邏輯不復雜的功能,卻響應很慢。往往都是寫代碼的時候沒有思考,隨便就調用一些已經存在的方法,導致整體響應變慢,總結起來就是:性能問題大部分都是代碼寫出來的。

說個場景,大家肯定都見到過。參數是一個商品 ID, 功能是上架商品,需要進行狀態的判斷,符合條件才能上架。這個場景下只需要獲取商品的狀態進行判斷即可,有的時候你看到的代碼往往都是下面的方式:

  1. GoodsDetail goods = goodsService.detail(id); 
  2. if (goods.getStatus() == GoodsStatusEnum.XXXX) { 
  3.  

detail 中有大量的邏輯,除了基本的商品信息,還有很多其他的內容,這就是慢的原因。

并行調用

針對一個接口,如果設計到多個內部 RPC 服務或者多個外部接口,在接口之間沒有關聯關系的情況下,我們可以采用并行調用的方式來提高性能。

CompletableFuture 就非常適合并行調用的場景,關于 CompletableFuture 的使用本文不做詳細說明,做 Java 的都要會用。

除了 CompletableFuture 之外,對于集合類的處理,可以用 parallelStream 來實現并行調用。

在微服務中有一層專門用于聚合 API, 聚合層就非常適合并行調用,一個功能或者一個頁面展示會涉及到多個接口,通過聚合層在后端進行接口的聚合和數據的裁剪,一起響應給前端。

上緩存

緩存也是優化中最常用的,效果提升最明顯的,成本也不大。對于緩存,也不要濫用,不是所有場景都可以靠堆緩存來提高性能的。

首先對于實時性要求不高的業務場景可以優先使用緩存,也不用太考慮更新的問題,自然過期就行。

實時性要求高的業務場景,用緩存一定要有完整的緩存更新機制,否則很容易造成業務數據和緩存數據不一致的情況。

建議的做法是訂閱 binlog 來統一更新緩存,不要在代碼中去更新或者失效緩存,簡單的場景還好,入口就那幾個,問題不大。有些數據在多個場景下使用,需要更新的入口太多了,

異步處理

有些邏輯,不需要實時反饋給用戶那就可以采用異步的方式在后臺進行處理。

異步處理的方式最常見的就是將任務加到線程池中進行處理,線程池需要考慮容量以及對一些指標的監控,相關的文章可以查看我的這篇:一時技癢,擼了個動態線程池,源碼放Github了

除了一些指標的監控,線程池的使用另一個需要關注的問題就是任務的持久化。如果你的數據本來就是存儲好了的,然后讀取出來通過線程池去執行是沒問題的。如果是沒有持久化直接丟入線程池中進行執行,就有可能出現丟失的情況,比如服務重啟之類的場景。

關于持久化,無論是線程池還是 EventBus 這種,都會遇到,所以針對異步的場景我建議大家使用消息隊列比較好。

消息隊列可以存儲任務信息,保證不會丟失。單獨消費隊列的消息進行邏輯處理,如果想提高消費速度,也可以在隊列的消費方使用線程池進行多線程消費,多線程消費也要避免消息丟失的情況,可以查看我的這篇文章:噓!異步事件這樣用真的好么?

JVM 參數調整

JVM 參數的調整,一般情況下我們都不用怎么去調整。偶爾有些代碼寫的不好,導致內存溢出了,這個時候會去做一些調整和優化代碼。

參數調整主要是去降低 GC 的導致的停頓問題,如果你的程序一直在 GC, 一直在停頓,你的接口自然就慢了。

只要沒有頻繁的 Full GC,在優化這塊 JVM 的參數調整可以最后再做,優先以 SQL 優化這些為主。

加機器

加機器是最后的終極大招了,并發量上去的時候,你在怎么優化單機器和單數據庫抗并發能力也是有限的,這個時候只能水平擴展了。

如果是創業初期,并且在快速發展,加機器是最直接的優化方式了,雖然說成本上去了,但是開發資源也是成本,節約下來可以實現更多的業務需求。等到中期穩定了再考慮架構,性能方面整體的優化和重構。

就像玩游戲一樣,有裝備的玩家才能所向睥睨啊,對于后端應用來說也是一樣,高配的機器,高配的數據庫配置,高配的緩存等。

關于作者:尹吉歡,簡單的技術愛好者,《Spring Cloud 微服務-全棧技術與案例解析》, 《Spring Cloud 微服務 入門 實戰與進階》作者, 公眾號猿天地發起人。

原文鏈接:http://cxytiandi.com/blog/user/1

 

責任編輯:武曉燕 來源: 猿天地
相關推薦

2020-03-09 16:43:06

腳本語言瀏覽器JavaScript

2025-06-03 00:00:06

性能優化性能指標響應時間

2022-08-22 09:25:47

分布式系統單塊系統

2018-03-21 15:02:23

數據庫MySQL分頁優化

2023-06-11 17:02:24

數字化轉型數字經濟

2019-07-17 10:10:34

Netty版本Event

2019-05-28 09:19:57

5G華為美國

2021-01-21 10:28:16

自然語言NLP人工智能

2014-12-10 10:12:02

Web

2020-10-29 11:08:06

CPUMySQL數據庫

2021-04-19 10:08:48

優化CSS性能

2020-10-19 19:45:58

MySQL數據庫優化

2014-07-08 12:29:43

錘子手機

2016-04-05 10:21:25

大數據元數據數據分析

2021-03-16 22:47:42

數據分析大數據崗位

2021-07-29 14:20:34

網絡優化移動互聯網數據存儲

2013-06-09 15:31:35

jQueryjQuery優化性能優化

2017-08-08 09:45:43

Python性能優化

2009-06-16 16:10:59

Hibernate性能

2020-09-19 21:26:56

webpack
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九99靖品| www.色综合| 夜夜摸夜夜操 | 青青草原精品99久久精品66 | 桃花av在线| 91久久精品一区二区二区 | 精品国产一区二区三区免费 | 精品久久久精品 | 91社区在线高清 | 在线免费观看毛片 | 免费黄色大片 | 中文字幕国产精品 | 亚洲巨乳自拍在线视频 | 男人的天堂亚洲 | 日韩久久久久久 | 日韩在线视频一区二区三区 | 久久精品视频网站 | 久久久91精品国产一区二区精品 | 精品中文在线 | 国产蜜臀97一区二区三区 | 精品在线一区 | 国产精品激情小视频 | 日韩精品在线观看一区二区三区 | www.天天操 | 亚洲一区二区三区视频 | 在线播放国产视频 | 中文字幕在线视频一区二区三区 | 日本精品久久久久久久 | 国产人成精品一区二区三 | 干干干操操操 | 日韩中文欧美 | 狠狠色香婷婷久久亚洲精品 | 久久午夜精品 | 在线免费观看视频黄 | 成人在线视频一区 | 久久精品欧美一区二区三区不卡 | 久久69精品久久久久久国产越南 | 男人天堂网址 | 国产aⅴ | 亚洲永久精品国产 | 日韩午夜在线观看 |