原创 隊列和Nginx

在系統中,不是所有的處理都必須實時處理,不是所有請求都必須實時反饋給用戶。對於這樣的業務,保證最終一致性,不需要強一致性。此時,更應該考慮使用隊列來解決問題。 當然,也需要考慮是否需要保證消息處理的有序性及如何保證,是否保證能重複消費

原创 擴容

擴容 對於一個系統,隨着產品使用的用戶越來越多,網站的流量會增加,最終單臺服務器無法處理那麼大的流量,此時需要用分而治之的思想來解決問題。 擴容的方式: 單體應用垂直擴容:直接通過增加單機硬件,如果CPU由32核升級到64核,硬盤擴

原创 緩存、數據庫連接池

緩存,就是讓數據更接近於使用者,目的是讓訪問速度更快。 應用級緩存 即在程序員層級進行緩存利用。 緩存回收策略 緩存主要有以下回收策略: 基於空間。 基於容量 基於空間 基於Java引用對象:軟引用:當JVM堆內存不足時,垃圾回收器

原创 限流與降級

限流 限流目的是通過對併發訪問/請求進行限速或者一個事件窗口內的請求進行限速,來保護系統。 一般高併發系統常見限流有: 限制總併發數(如數據庫連接池、線程池) 瞬時併發數(如Nginx的limit_conn模塊) 限制時間窗口內平均

原创 超時重試、回滾與壓測

超時與重試 在開發中,很多故障都是沒有設置超時時間導致的,可能會導致請求慢,連鎖反映,甚至是雪崩。 超時與重試可分爲以下幾個方面: 代理層超時與重試:入Haproxy,Nginx,Twemproxy,這些組件可實現代理功能,入Hap

原创 隔離

隔離是指將系統或資源分開,系統隔離是爲了在系統發生故障時,能夠限定傳播範圍和影響範圍,即發生故障後不回出現滾雪球效應,從而保證只有出問題的服務不可用,其他服務可用。 線程隔離 主要指線程池隔離,實際使用時,將請求分類,交給不同線程池處

原创 負載均衡與反向代理

當訪問一個域名例如www.baidu.com時候,瀏覽器首先查詢DNS服務器獲取對應IP,然後通過IP訪問對應服務。 一個很簡單問題,當某臺服務器重啓或者故障,DNS有一定緩存事件,故障後切換時間長。 外網DNS應該用GSLB(全局負

原创 系統設計原則

在設計系統時,需要多思考二八定律,在系統設計初期將有限的資源用到刀刃上,以最小可行產品方式迭代推進。 高併發原則 無狀態應用是無狀態,配置文件有狀態,比如,不同機房需要不同數據源,那麼需要通過配置文件或者配置中心指定。 功能拆分 ,

原创 Netty權威指南學習筆記

最近花了一段時間系統的學習了Netty框架,包括《Netty in Action》以及《Netty權威指南》,對於博主自己來說,我覺得《Netty權威指南》要更適合博主。 很厚的《Netty權威指南》權威指南,雖然上面一大部分是例子代

原创 Linux的history命令

Linux中history命令,用於查看當前用戶歷史的命令,最近有所用到,感覺還是很有用的。 記事本,免費記錄命令哈哈 基本意思 history: 用法: history [-c] [-d 偏移量] [n] 或 history -a

原创 Python中對象轉Json

如何用python和redis交互呢? 該怎樣定義數據存儲格式,從而使得數據跨平臺使用?當然是Json 並在其他項目中,採用redis緩存進行讀取,並由Python進行寫入。 這裏就簡單記錄兩種語言在讀寫寫Json時候需要注意的點。

原创 數據庫連接不穩定引發的事情

上段時間,遇到一個這樣的問題,由於數據顯示的原因,需要往Spring Boot項目中配置兩個數據庫連接池,一個是mysql,另外一個是amazon redshift。 情景 接着前言,當連上兩個數據庫後,發生一個問題,由於redshi

原创 Linux 中不同文件的 解壓縮 壓縮命令 總結

tar 本文列出tar常用命令意思,更多信息,自行tar --help 查看 c: 建立壓縮檔案 x:解壓 t:查看內容 r:向壓縮歸檔文件末尾追加文件 u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以

原创 Linux基本目錄

Linux系統區分大小寫 Linux下文件 Linux系統中並沒有盤符的概念,而是通過目錄/表示所有文件的開始,並通過掛載(mount)的方式把所有硬盤分區都放置在根目錄下。 目錄名稱 英文原意 說明 bin binar

原创 HTTP協議概覽

這些天業務需要,用python爬取了一些移動應用分析網站的數據,包括App Annie和 Sensor Tower等,當然在爬取過程中,對HTTP協議也有了更深一步的理解,下面重新總結了以下HTTP協議相關請求頭相應頭的常用內容及釋義