主頁 > 軟體設計 > nginx+tomcat+redis*+mysql(redis重點)

nginx+tomcat+redis*+mysql(redis重點)

2021-12-29 07:58:21 軟體設計

目錄

?

一,nginx

二,tomcat

tomcat中有三個容器

三,Redis

1優缺點

2關系型和非關系型的資料庫區別

3什么是事務?

4分布式鎖

5,RDB!!!!

6觸發條件

7淘汰策略

8主從復制原理

9哨兵模式原理

四,MySQL之MHA

五,keepalived



一,nginx

nignx是一個高性能的http和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務,

傳統的web服務器體系結構中,每個客戶端訪問時候都要單獨的行程或者執行緒進行處理,隨著訪問網站的人越來越多,并發連接的數量越來越大,web服務器就變得緩慢,從而降低了用戶體驗,

單獨的行程/執行緒都會消耗記憶體和CPU時間,

NGINX開發的目標是實作10倍以上的性能,優化服務器資源的使用,同時也能夠擴展和支持網站的動態增長, 因此,NGINX成為最知名的模塊化,事件驅動,異步,單執行緒Web服務器和Web代理之一,

二,tomcat

Tomcat 是由 Apache 開發的一個 Servlet 容器,實作了對 Servlet 和 JSP 的支持,并提供了作為Web服務器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等,由于 Tomcat 本身也內含了一個 HTTP 服務器,它也可以被視作一個單獨的 Web 服務器,但是,不能將 Tomcat 和 Apache HTTP 服務器混淆,

tomcat中有三個容器

web容器:我們講到servlet可以理解服務器端處理資料的java小程式,那么誰來負責管理servlet呢?這時候我們就要用到web容器,它幫助我們管理著servlet等,使我們只需要將重心專注于業務邏輯,

jsp容器:jsp容器基于web容器管理,將Java檔案翻譯成二進制檔案,系統能夠識別的語言

serverlet容器:處理客戶端的請求并填充response物件

Servlet容器實作了Container介面,在Tomcat中有4種級別的容器:Engine,Host,Context和Wrapper,

Engine:整個Catalina Servlet引擎;

Host:包含一個或多個Context容器的虛擬主機;

Context:表示一個Web應用程式,可以包含多個Wrapper;

Wrapper:表示一個獨立的Servlet;

三,Redis

1優缺點

優點:Redis基于記憶體運行并支持持久化(記憶體運行:處理高熱資料優秀,不占用多的行程)

資料讀取的速度最高可達110000次/s,資料寫入速度最高可達81000次/s

原子性:redis所有操作都是原子性的,支持資料備份,即master-salve模式的資料備份

缺點:不具自動容錯和恢復功能,資料庫容易受到物理記憶體的限制,不能作為海量資料的高熱性能讀寫,

用法:在資料庫前面做分壓,三大分為主從模式,哨兵,集群模式,是一個非關的資料庫,

2關系型和非關系型的資料庫區別

(1)存盤方式不同MySQL以記錄為行,欄位為列,形成表格方式存盤

(2)非關資料庫資料型別哈希,字串,串列等

按照擴展方式不同:

(1)關系型:水平擴展(節點擴容,可以多一個節點)資料庫中進行分庫分表

(2)非關:垂直擴展(硬體資源進行擴展CPU,磁盤,或者直接升級服務器)

Redis集群沒有使用一致性hash,而是使用了哈希槽的方式,redis集群有16384個哈希槽,每個key通過一點過演算法后,會決定放在那個槽內,(每個槽大小大概512),平均分配!!

注意:默認情況下是平均分配!!!實際生產中需要看節點性能!!

對事物的支持不同:

(1)關系型資料庫:特別適合高事務性要求和需要控制執行計劃的任務

(2)非關系:此處會稍顯弱勢,其價值點在于高擴展性和大資料量處理方面

關系型資料庫和非關系型資料庫都有各自的特點和應用場景,兩者相結合將會給web2.0的資料庫帶來新的思路,

MySQL 前置快取資料庫--》redis

為前端服務快取一些后臺--》為nginx快取圖片(就是i/o和網路資源壓力大點)

MySQL 高熱資料庫 --》redis

ps:非關資料庫不需要手動創建資料庫和集合(本身非關資料庫中含有0-15,一共16個數)

redis服務器程式是單行程還是多行程

采用epull機制執行單行程實行高并發的一個操作,但是redis在提高高并發處理能力時候,會給服務器的cpu造成很大壓力,生產中建議開啟2個行程:

1備份

2抗高并發的同時盡量不給cpu造成壓力

3什么是事務?

事務就是一個單獨的隔離操作:事務中所有的命令都會被序列化,按照順序執行,執行程序中,不會被其它客戶端發來的資訊打斷,

Redis 事務的本質是通過MULTI、EXEC、WATCH等一組命令的集合,事務支持一次執行多個命令,一個事務中所有命令都會被序列化,在事務執行程序,會按照順序串行化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中,

總結說:redis事務就是一次性、順序性、排他性的執行一個佇列中的一系列命令,

客戶在訪問程序中,由于網頁沒有加載,客戶不停的重繪,會建立相同的會話,訪問redis時候,會出現重復的會話,可以對redis做session會話池控制,

redis有豐富的特性-redis還支持publish(發布訊息)/subscribe(訂閱),通知,設定key有效期等特性,

redis概念穿透,擊穿,雪崩

4分布式鎖

一個行程進來后,第一條執行緒會在redis中處理,此時會在第一條地方加一個鎖,防止后面的行程進入導致擁塞,這邊有個watch dog監控鎖,如果請求處理完,會自動解鎖(比如30s之后自動斷開,鎖的自動釋放時間),如果規定時間沒有處理完,watch dog不會解鎖,等待完成手動或者自動執行解鎖,再放入下一個行程進行處理,

核心技術:setnx+分布式鎖

5,RDB!!!!

一旦觸發save,子行程的所有任務都會被阻塞
觸發方式:
1手動觸發:直接執行bgsave持久化命令
2自動觸發:按照規定周期執行的陳述句的數量來觸發,組態檔中例如save m n -----》save 90 10
bgsave執行時,會控制RDB紫禁城再執行的位置創建.rdb檔案,特性是,RDB持久化生產的檔案,只記錄的結果
有點偏于全量備份,為了提高處理速度和減少落地在磁盤中占用體積,RDB的資料會進行壓縮處理,
記憶體中資料消失了,一旦資料加載失敗,會啟動失敗
特殊的觸發方式:主動的關閉redis,但RDB持久化優先級較低
應用場景:
1主動關閉時,觸發RDB(redis 默認開啟RDB)
2主從復制時,master同步給SLAVE時,,會觸發RDB(全量復制),然后觸發AOF的增量復制
3在redis重啟時,當AOF未開啟時候,才會基于RDB檔案進行恢復資料,運行redis,

追加的是每一天追加記錄,把緩沖區的資料同步到磁盤中,再加以持久化,

6觸發條件

1always 每產生一條,就同步一條 可能造成資料壓力大,導致頻繁的寫入,每寫到緩沖區導致i/o占用過大,
還有追加部分導致緩沖區爆滿,同步率變低,(生產中幾乎不用)
2no 不自動觸發
3everysecond 每秒同步一次 在一定層度上可以減少壓力,但也可能導致緩沖區爆滿
再redis前面分流:
1令牌桶演算法(就是一個桶放慢令牌,一次打給能放100個令牌,設定放令牌速度決定通過)
2漏桶演算法(容量100,會填充,可以控制填充和下落速度),限流,
3防火墻控制流量或者次數
4 lru演算法,控制再記憶體中高熱資料的保存時間(redis在作為MySQL快取資料庫時候,存的都是高熱資料,)

7淘汰策略

默認是惰性洗掉

隨即淘汰

淘汰近期命中較少的資料 隨著時間的推移,命終值會減少,所謂的資料中,在做高熱資料的前提下是或者,套題近期命中較少的資料(相對而言不是重要的資料),

定期洗掉————》保證兩種持久化完成的情況下,同時業務不繁忙/終止業務的時候,洗掉為了解決快取壓力過功能模塊:AOF的持久化,

8主從復制原理

9哨兵模式原理

1哨兵是有自己的組態檔,只要去指向master節點IP時候就可以了

2哨兵節點會和配置的主節點建立起兩條連接命令連接和訂閱連接

PS:redis發布訂閱(pub/sub)是一種資訊通信模式:發送者發訊息,訂閱者接收訊息

3哨兵會通過命令連接每10s發送一次INFO命令,通過INFO命令,主節點會回傳自己的run_id和自己的從節點資訊,

4哨兵會對這些從節點建立兩條連接命令,連接和訂閱連接

5哨兵通過命令連接向從節點發送INFO命令,獲取到他的一些資訊:

run id(redis服務器id)

role(職能)

從服務器的復制偏移量offset

其它

6通過命令連接向服務器的sentinel:hello頻道發送一條資訊,內容包括自己的IP埠,run_id,配置(后續投票的時候會用到等)

7通過訂閱連接物件服務器的sentinel:hello頻道做了監聽,所以所有的向該頻道發送的哨兵的訊息都能被接受到

8決議監聽到的訊息,進行分析提取,就可以知道還有哪些別的哨兵服務節點也在監聽這些主從節點了,更新結構體將這些哨兵節點記錄下來

9向觀察到的其他的哨兵節點進行監聽

四,MySQL之MHA

它為 MySQL主從復制架構提供了 automating master failover (自動化主故障轉移)功能,MHA 在監控到 master 節點故障時,會提升其中擁有最新資料的 slave 節點成為新的master 節點,在此期間,MHA 會通過于其它從節點獲取額外資訊來避免一致性方面的問題,MHA 還提供了 master 節點的在線切換功能,即按需切換 master/slave 節點,

五,keepalived

keepalived是基于vrrp協議的一款高可用軟體,keepalived有一主服務器和多臺備份服務器,在主和備上部署相同的服務配置,當諸如武器出現故障,虛擬IP地址會自動漂移到備份服務器,

VRRP(虛擬路由器冗余協議)

VRRP是為了解決靜態路由的高可用,

1,資料庫概念(讀取方式)

臟讀:事務A可以讀到事務B修改過還沒提交的資料,此時事務B一旦回滾,事務A再次讀就讀不到了,

幻讀:a和b都在讀取資料庫,a進行更改資料庫保存,b按照相同的路徑再讀取的時候會發現多出來一些內容,

不可重復讀::一個事務先后讀取同一條記錄,而事務在兩次讀取之間該資料被其它事務所修改,則兩次讀取的資料不同,我們稱之為不可重復讀,

2,資料庫事務的四大特性

(1)原子性:事務包含的所有資料庫操作要么全部成功,要么全部失敗回滾

(2)一致性:一盒事務執行之前和執行后都必須處于一致狀態,

(3)隔離性:事務的隔離性是多個用戶并發訪問資料庫時,資料庫為每一個用戶開啟的事務,不能被其他事務的操作資料所干擾,多個并發事務之間要相互隔離,

(4)持久性:一個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/396158.html

標籤:其他

上一篇:網路技術理論:包、片段、幀、資料報和段

下一篇:暴力遞回——N皇后詳解 && 如何用位運算進行優化

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more