原创 網關2 - 網關如何調用API

什麼是API API --> 官方解釋:應用編程接口。 首先,它是一個接口,其次它基於應用,並且它是可編程的。 API 的生命週期 1、設計(方法名 + 入參 + 出參) 名字:可以解釋接口功能,見文知意; 入參:不要公開不合理的

原创 分佈式緩存redis(基礎+線程模型+過期策略) - 大總結1

分佈式緩存 - 大總結 靈魂拷問一:在項目中如何使用緩存的? 第一種場景,需要緩存要查詢用戶的歷史訂單,請求接口劇多,如果實時去請求的話,接口超時。 第二種場景,分佈式緩存鎖,用戶參加了a活動就不能參加b活動,防止併發,所以要用到

原创 設計模式之大總結

設計模式在於理解,而不只在於形式。 不要爲了套用設計模式而使用設計模式,而是在業務上遇到問題的時候,很自然的想到設計模式可以做爲一種解決方案。 設計模式是一門藝術,來源於生活,屬經驗之談。

原创 認識分佈式系統

分佈式系統 1、分佈式系統是什麼? 多個系統一起組成分佈式系統,各個系統之間互相調用。 2、爲什麼要做系統拆分? 系統不做拆分,代碼量會很大,很多人一起維護代碼,難以維護,上線複雜。 拆分之後,每個人只維護自己的系統和服務,大大減

原创 如何生成分庫分表的全局id?

分庫分表的id生成方式 第一種,維護一個含有自增主鍵的單表。 創建一個全局唯一的含有自增主鍵的單表。 在操作分庫分表之前,先將數據插入到單表裏,生成主鍵,再操作分庫分表。 優點:簡單 缺點:會有性能瓶頸,比如不支持高併發操作。

原创 mysql讀寫分離,主從複製,主從延遲

一、mysql讀寫分離 爲了提升數據庫的性能,一般會採用讀寫分離,即寫請求去主庫,讀請求去從庫。 二、mysql主從複製 支持開啓多個IO線程,可以提升效率。 2.1 如果主庫還未同步數據至從庫,就掛掉了,這時候應該怎麼辦?

原创 分佈式緩存redis(主從複製+哨兵) - 大總結2

redis 靈魂拷問1:如何保證redis高併發/支撐10萬+的併發,應該怎麼做? 單機redis,能夠承載的QPS大概在上萬到幾萬不等。如果是十幾萬,就不行啦。 方案:用主從模式實現讀寫分離。 一般來說,對於緩存,都是讀的高併發

原创 分庫分表的中間件和遷移方案

分庫分表 一、爲什麼要分庫分表 單機mysql帶來的問題: 1、mysql單機,扛不住併發 2、mysql單機磁盤容量快滿 3、mysql單表數據量太大,sql執行越跑越慢 利用分庫分表將單機拆分成多機,帶來的好處。 1、可承受的

原创 併發編程 - 線程基礎篇

一、併發的發展歷史 1、真空管 / 穿孔打卡 工作流:把程序寫在紙上,打成卡片,把卡片的程序輸入到計算機上,電腦運行出結果打印到打印機上。 最大的問題,計算機在等程序輸入的時候,會處於空閒狀態。 2、晶體管 / 批處理操作系統

原创 20190710 - 數據庫連接池大小如何設置

誤區:數據庫連接池設置的越大,性能越高,吞吐量越大。 錯錯錯。 爲啥呢?? 【CPU + 磁盤I/O + 網絡I/O】 主要原因: 【CPU】:因爲單核CPU的計算機,運行數百個線程,也是CPU去快速調度,切換,執行,使它看起來並

原创 20190711 - 淘寶架構演進之路(十四次)

一、基本概念 1、分佈式 系統中的多個模塊在不同的服務器上部署,即可稱之爲分佈式系統。如Tomcat和數據庫分別部署在不同的服務器上,或者兩個相同功能的Tomcat分別部署在不同的服務器上。 2、高可用 系統中部分節點失效的時候,

原创 redis的併發競爭

redis的併發競爭 redis的併發競爭問題是什麼? 某個時刻,多個系統實例都去更新key。 如何解決redis的併發競爭問題? 增加zookeeper分佈式鎖和時間戳,來保證後者不會被覆蓋。

原创 分佈式系統 - 基礎

分佈式系統 1、分佈式系統是什麼? 多個系統一起組成分佈式系統,各個系統之間互相調用。 2、爲什麼要做系統拆分? 系統不做拆分,代碼量會很大,很多人一起維護代碼,難以維護,上線複雜。 拆分之後,每個人只維護自己的系統和服務,大大減

原创 redis-保證和數據庫的一致性

如何保證redis和數據庫的一致性? cache Aside pattern 讀取的時候,先從緩存讀,讀不到就讀數據庫,然後取出數據之後寫入到緩存; 更新的時候,先刪除緩存,再更新數據庫。 爲啥不是更新緩存? 如果緩存的計算邏輯比

原创 redis cluster 的集羣模式

redis的集羣模式 一、單機redis的存儲瓶頸問題。 master和slave存儲的數據量是一模一樣的,如果master只能存儲32g,那麼這個模式下,一共也只能存儲32g數據。 二、如何突破單機瓶頸問題,讓redis支持海