當前位置:首頁 » 文件管理 » nginx緩存redis

nginx緩存redis

發布時間: 2022-10-07 13:04:49

⑴ tomcat,apache,nginx,php,redis,memcached,lvs-keeplived是什麼意思

Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。

Apache是世界使用排名第一的Web伺服器軟體。它可以運行在幾乎所有廣泛使用的計算機平台上,由於其跨平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。它快速、可靠並且可通過簡單的API擴充,將Perl/python等解釋器編譯到伺服器中。

Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。

PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。

Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕資料庫負載。它通過在內存中緩存數據和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。

LVS是linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。
Keepalived的作用是檢測伺服器的狀態,如果有一台web伺服器死機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的伺服器。

⑵ 如何解決Nginx的session一致性問題

方案一:會話保持模塊,即通過cookie實現客戶端與後端伺服器的會話保持, 在一定條件下可以保證同一個客戶端訪問的都是同一個後端伺服器,即可解決session取不到、session不一致的問題。
方案二:Session共享(推薦使用),即伺服器在分發請求到了一台機器的時候,會先去session緩存資料庫查看是否有該用戶的session,如果有則取出,否則新建一個。那麼這個Session共享如何解決呢?共有2種方法:1、memcached緩存方案。2、Redis緩存方案。下面重點介紹session共享的問題:
1、memcached緩存方案
memcached緩存資料庫是專門管理session的,memcached 緩存服務可以和tomcat整合,幫助tomcat 共享管理session。
安裝memcached:
# yum –y install memcached11

啟動memcached(默認埠是11211):
# service memcached start11

通過telnet測試memcached資料庫
# telnet localhost 1121111

測試
set abc 0 0 5
12345
get abc
quit12341234

將memcached的jar包拷貝到tomcat的lib下,jar包的下載地址:http://download.csdn.net/detail/chenweijisun/9826940
在tomcat的server.xml中配置jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
1212

在tomcat的context.xml的Context配置Manager
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.17.4:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
123456789123456789

為了方便測試,index.jsp也配置下,文件在/tomcat安裝目錄/webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat2 page</h1>
12345671234567

測試
2、redis緩存方案
安裝redis:
# yum –y install redis11

啟動redis
# service redis start11

測試(redis的默認埠是6379):
# telnet localhost 637911

修改配置文件vi /etc/redis.conf,將bind的127.0.0.1修改為本機地址,否則只能本機訪問了
導入redislib中三個jar包到tomcat中,jar包的下載地址:http://download.csdn.net/detail/chenweijisun/9826941
在tomcat的context.xml的Context配置Manager
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.17.4"
port="6379"
database="0"
maxInactiveInterval="60" />

⑶ 不容錯過的Nginx配置詳解,一文帶你搞懂Nginx

Nginx是一個高性能的HTTP和反向代理伺服器,特點是佔用內存少,並發能力強,事實上Nginx的並發能力確實在同類型的網頁伺服器中表現好。Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率,能經受高負載的考驗,有報告表明能支持高達50000個並發連接數。

需要客戶自己在瀏覽器配置代理伺服器地址

例如:在大陸訪問www.google.com,我們需要一個代理伺服器,我們通過代理伺服器去訪問谷歌,這個過程就是正向代理。

反向代理,客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取數據後,在返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器IP地址。

單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的伺服器,也就是我們說的負載均衡。

為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。

進入到下面的目錄,然後使用命令

配置文件所在位置:/usr/local/nginx/conf/nginx.conf

由全局塊+events塊+http塊組成

從配置文件開始到events之間的內容,主要會設置一些影響Nginx伺服器整體運行的配置指令,主要包括配置運行Nginx伺服器的用戶(組)、允許生成的worker process數,進程pid存放路徑、日誌存放路徑和類型以及配置文件的引入等。

events塊設計的指令主要影響Nginx伺服器與用戶的網路連接,常用的設置包括是否開啟對多work process下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個work process可以同時支持的最大連接數等。下面的例子表示每個work process支持的最大連接數為1024。這部分配置對Nginx的性能影響較大,在實際中應該靈活配置。

Nginx伺服器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這里,http塊又包括http全局塊和server塊。

http全局塊配置的指令包括文件引入、MIME-TYPE定義、日誌自定義、連接超時時間、單鏈接請求數上限等。

這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一台獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網伺服器硬體成本。

每個http塊可以包括多個server塊,而每個server塊就相當於一個虛擬主機。

每個server塊也可以分為全局server塊,以及可以同時包含多個location塊。

最常見的配置時本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。

一個server塊可以配置多個location塊。

這塊的主要作用是基於Nginx伺服器接收到的請求字元串(例如server_name/uri-string),對虛擬主機名稱(也可以是IP別名)之外的字元串(例如前面的/uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。

訪問http://ip,訪問到的是Tomcat的主頁面http://ip:8080。

Nginx+JDK8+Tomcat

訪問:http://192.168.71.167/,看到的是Tomcat的首頁。

根據訪問的路徑跳轉到不同的伺服器中去。

訪問http://ip:9001/e 直接跳到http://127.0.0.1:8080/e

訪問http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod

Nginx+JDK8+配置兩個Tomcat,Tomcat的配置不再講述。

訪問http://192.168.71.167:9001/e/a.html跳到了http://127.0.0.1:8080/e/a.html頁面。

訪問http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html頁面。

假如Nginx代理伺服器Server的配置為:192.168.71.167:9001,跳到:127.0.0.1:8080,訪問者的IP為:192.168.71.200:20604。

通過訪問http://192.168.71.167/e/a.html,實現負載均衡的效果,平均分攤到8080和8081埠中。

Nginx+JDK8+2台Tomcat,一台8080,一台8081。

訪問:http://192.168.71.167/e/a.html,8080和8081交替訪問。

1 輪詢(默認)

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2 weight

weight代表權重,默認為1,權重越高被分配的客戶端越多。

指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。

3 ip_hash

每個請求按訪問IP的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題,示例如下:

4 fair(第三方)

按後端伺服器的響應時間來分配請求,響應時間短的優先分配。

訪問圖片:http://192.168.71.167/image/1.jpg

訪問頁面:http://192.168.71.167/www/a.html

訪問目錄:http://192.168.71.167/image/(因為設置了autoindex on;)

兩台機器,每台機器都裝有keepalived+Nginx+Tomcat。

主備keepalived伺服器中只有master一台機器會出現VIP地址,否則會出現腦裂問題。

【提示】腳本要加+x的執行許可權:chmod +x chk_nginx.sh

在Nginx里把虛擬IP配置進去即可。

一個Nginx是由一個master進程和多個worker進程組成的。

客戶端發送請求到Master,然後給worker,再由這些work爭搶處理這個請求。

1 可以使用nginx -s reload進行熱部署方式;

2 每個worker是獨立的進程,如果有其中的一個worker出現了問題,其他worker獨立的繼續進行爭搶,實現請求的過程,不會造成服務的中斷;

Nginx和Redis類似,都採用了io多路復用機制。每個worker進程都可以把CPU發揮到極致,一般來說worker數和伺服器的CPU數相等是最為適宜的。

發送請求:訪問靜態資源佔用2個連接,反向代理佔用4個連接。

【溫馨提示】

⑷ 介面異常是什麼意思

介面異常的意思就是伺服器崩了,網路導致視頻播放失敗,介面出現了異常。

檢查自己的網路是不是已經連接成功了,網速限速沒,連接成功後再次登錄,就可以看自己想要看的視頻了。

⑸ 怎麼在linux上使用redis緩存css文件

你這樣做的目的是......?
css文件的緩存加速技術應該用squid、varnish、nginx的緩存也可以。
如果想提高用戶滿意度,應該是CDN,各大雲運營商都有,你可以去看看。

⑹ zabbix,redis,nginx三者有什麼關系,分別同做什麼語言的伺服器例如:php等,最近被這三個東西搞得很暈

zabbix:是一套伺服器性能監控軟體,這個沒怎麼用過,沒有發言權。
redis:你可以當成是資料庫,和MYsql差不多(實際上差很多)
nginx:是一個web 伺服器,提供網頁服務(如果它壞了,用戶輸入域名就不能正常訪問網站)
memcached:基於內存的分布式緩存系統,是redis的長江前浪。

這幾個東西和PHP都沒關系,但可以這樣理解:
nginx 可以做php的WEB伺服器
redis 可以做php的資料庫或緩存
memcached 可以做PHP的緩存

zabbix 既然能監控伺服器性能,能把他們全都監控起來?

⑺ 如何理解redis+tomcat+nginx集群緩存

Nginx是一款輕量級兼備高性能的Http和反向代理伺服器。
所謂反向代理就是指在用戶發起訪問請求,由代理伺服器接收,然後將請求轉發給正式伺服器,並且將正式伺服器處理完的數據返回給客戶端,此時代理伺服器就表現為一個伺服器。

⑻ nginx如何實現負載均衡、限流、緩存、黑白名單和灰度發布

1.負載均衡配置

2.失敗重試配置

在fail_timeout時間內失敗了max_fails次請求後,認為上游伺服器不可用,就會將服務地址剔除掉,fail_timeout時間後會再次將伺服器加入存活列表進行重試。

limit_req_zone指令設置參數

參數說明

limit_req_zone定義在http塊中,$binary_remote_addr表示保存客戶端IP地址的二進制形式。

Zone定義IP狀態及URL訪問頻率的共享內存區域。zone=keyword標識區域的名字,以及冒號後面跟區域大小。16000個IP地址的狀態信息約1MB,例子區域可以存儲160000個IP地址。

Rate定義最大請求速率。示例中速率不能超過每秒10個請求。

設置限流

burs排隊大小,nodelay不限制單個請求間的時間。具體使用可以查看高並發場景如何使用nginx實現限流-實戰篇

不限流白名單

該配置說明 192.168.1.0/24網段的ip訪問是不限流的,其它限流。ip後面數字的含義

24表示子網掩碼:255.255.255.0

16表示子網掩碼:255.255.0.0

8表示子網掩碼:255.0.0.0

1.瀏覽器緩存 靜態資源緩存用expire

Response Header中添加了Expires和Cache-Control

所謂的靜態資源一般包括一直不變的圖像,如網站的logo,js、css靜態文件還有可下載的內容,媒體文件

協商緩存(add_header ETag/Last-Modified value)包括html文件,經常替換的圖片,經常需要修改的js、css文件和基本不變的api介面

不需要緩存包括用戶隱私等敏感數據,用戶經常變動的api介面

2.代理層緩存

在本地磁碟創建一個文件目錄,根據我們的配置把請求資源以k(key自定義,這邊用url的hash值)->v形式緩存到目錄里,並根據需求對內容設置緩存時長,比如狀態碼為200緩存10分鍾,其餘的緩存1分鍾等待。要清理緩存可以藉助purger的功能。如果ab測試/個性化需求時應禁用瀏覽器緩存,否則會因為緩存導致誤差。

方式一

方式二 lua+redis動態黑名單(openresty)

配置(/usr/local/openresty/nginx/conf/nginx.conf)

lua腳本編寫(ip_blacklist.lua)

1.根據cookie實現灰度發布

根據cooke查詢version值,根據version跳轉到對應的host,如果沒有匹配上的就跳轉到默認配置。

2.根據來路ip實現灰度發布

⑼ 技術面試會問很多技術問題嗎

筆者其實沒有想到去面試,只是在智聯上更新了一下簡歷,就陸陸續續接到很多獵頭的郵件和電話,實在是沒准備好要去面試,就推掉了幾家公司的面試了。正因為筆者也很久沒有面試了,筆者也想去面試學習一下,閑話少說,下面就分享給大家筆者在2018年1月4號上午10點30分的面試經歷:

首先,獵頭或者公司人資會把公司的介紹及崗位要求發到你郵箱(或者QQ、微信),下面這份是獵頭發給我的崗位說明,為了職業道德操守,公司的介紹和面試通知信息我就不貼出來了,我就把崗位要求貼出來:

職位描述:

1、 負責應用伺服器的安裝、配置、優化與維護;

2、 負責應用系統的日誌信息備份、管理、維護與分析;

3、 負責應用系統的日常監測於維護、故障處理、性能分析與優化;

4、 負責應用部署系統、環境配置系統、監控系統的開發、部署、升級與維護,建設高性能的運維平台。

崗位要求:

1、 熟悉Linux操作系統的基礎知識,熟練使用Linux常用操作命令;

2、 熟練配置Nginx、HAproxy 等應用相關軟體的部署、配置與優化維護;

3、 熟悉網路基礎知識、熟悉TCP/IP的工作原理,會配交換機或路由器,能熟練的對網路情況進行分析

4、 熟悉shell/perl/python中的一種或多種進行運維程序的開發;

5、 熟悉Nagios,Ganglia等監控軟體

看著上面的要求大家是不是覺得要求也不高啊,你要細看就會發現,這家公司要求的還挺多,不僅要會網路知識(熟悉TCP/IP好像是每家單位的都會寫這樣的要求),還要會開發技能。相信很多做運維的兄弟在網路這一塊是個頭疼的事情,都對交換機和路由器不怎麼會配置和管理。

然後,筆者詳細了解他們公司,了解崗位要求,在突擊復習一下可能會問到的知識點和技術點。到了面試的這天時間,早早的起床,把牙一定要刷干凈,特別是有口臭的兄弟,最好准備點口香糖,到達面試公司前嚼塊口香糖,以免因為口氣的原因熏到面試官,讓你在面試官心裡減分。早點要記得吃,如果你是下午面試的話也要吃午飯,吃早點了精氣神就有了。還要注意,帶上你的簡歷和一支筆,雖然他們那邊也會有你的簡歷,為了以防萬一還是准備好簡歷。

最後,關鍵點來了,就是和面試官溝通了,有筆試的公司會讓你做些面試題,沒有筆試就直接和面試官聊了,下面是我和面試官溝通完之後記住的一些問題,分享給大家看一下,筆者一共記住了7個問題,好像還有兩個問題實在想不起來了,如果大家有更恰當的回答一定要貼出來一起探討和進步:

1、介紹下自己?(幾乎每家公司首先都會讓你做個自我介紹,好像是必修課一樣)

筆者回答:此處省略筆者的自我介紹,筆者建議介紹自己的時間不宜過長,3-4分鍾為宜,說多了面試官會覺得你太啰嗦了。說太少了也不行,那樣會讓人感覺你的經歷太簡單了、太空了。正常情況下,一般你在做自我介紹的同時,面試官這個時候在看你的簡歷,他需要一邊看簡歷、一邊聽你介紹自己,如果你說個幾句話就把自己介紹完了,他肯定還沒緩過神來,對你的映像會減分的。在介紹的同時思維要清晰,邏輯要清楚,最好是根據你簡歷上寫的經歷來介紹,這樣可以把面試官的思路帶到你這里來,讓他思路跟著你走。不要東扯一句,西扯一句。竟量少介紹自己的性格、愛好(最好能不說就不說),你可以簡單羅列干過幾家公司(最多羅列3家公司/也包含目前所在的公司,注意順序不要亂),都在那幾家公司負責什麼工作,都用過什麼技術,在著重介紹一下你目前所在的公司是負責哪些工作的,可以稍微詳細一點介紹,不要讓面試官聽著暈頭轉向的感覺。

2、灰度發布如何實現?

筆者回答:其實對這個問題筆者也答的不好,就不寫出來誤導大家了。大家有好的方法可以共享出來。不過筆事後在知呼上看到了一位網友的建議覺得不錯,大家可以參考看一下 :https://www.hu.com/question/20584476

3、Mongodb熟悉嗎,一般部署幾台?

筆者回答:部署過,沒有深入研究過,一般mongodb部署主從、或者mongodb分片集群;建議3台或5台伺服器來部署。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若乾片裡面,每個片只負責總數據的一部分。 對於客戶端來說,無需知道數據被拆分了,也無需知道服務端哪個分片對應哪些數據。數據在分片之前需要運行一個路由進程,進程名為mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關系。對客戶端來說,它僅知道連接了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關系,路由到目標數據所在的片上,如果請求有了回應,路由器將其收集起來回送給客戶端。

4、如何發布和回滾,用jenkins又是怎麼實現?

筆者回答:發布:jenkins配置好代碼路徑(SVN或GIT),然後拉代碼,打tag。需要編譯就編譯,編譯之後推送到發布伺服器(jenkins裡面可以調腳本),然後從分發伺服器往下分發到業務伺服器上。

回滾:按照版本號到發布伺服器找到對應的版本推送

5、Tomcat工作模式?

筆者回答:Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。

進入Tomcat的請求可以根據Tomcat的工作模式分為如下兩類:

Tomcat作為應用程序伺服器:請求來自於前端的web伺服器,這可能是Apache, IIS, Nginx等;

Tomcat作為獨立伺服器:請求來自於web瀏覽器;

6、監控用什麼實現的?

筆者回答:現在公司的業務都跑在阿里雲上,我們首選的監控就是用阿里雲監控,阿里雲監控自帶了ECS、RDS等服務的監控模板,可結合自定義報警規則來觸發監控項。上家公司的業務是託管在IDC,用的是zabbix監控方案,zabbix圖形界面豐富,也自帶很多監控模板,特別是多個分區、多個網卡等自動發現並進行監控做得非常不錯,不過需要在每台客戶機(被監控端)安裝zabbix agent。

7、你是怎麼備份數據的,包括資料庫備份?

筆者回答:在生產環境下,不管是應用數據、還是資料庫數據首先在部署的時候就會有主從架構、或者集群,這本身就是屬於數據的熱備份;其實考慮冷備份,用專門一台伺服器做為備份伺服器,比如可以用rsync+inotify配合計劃任務來實現數據的冷備份,如果是發版的包備份,正常情況下有台發布伺服器,每次發版都會保存好發版的包。

總結

總結一下面試注意幾點事項,可能筆者也說得不太對,為了我們運維工作的兄弟們都能拿到高薪,大家一定要指證出來一起進步、一起探討:

第一,你要對自己的簡歷很熟悉,簡歷上的寫的技能自己一定要能說出個一二,因為面試官的很多問題都會挑你簡歷上寫的問。比如你簡歷上寫了這么一條技能「熟悉mysql資料庫的部署安裝及原理」。你即然寫了這么一條技能,你在怎麼不熟悉你也要了解mysql的原理,能說出個大概意思。萬一面試官問到了你寫的這一條,你都答不上來,那在他心裡你又減分了,基本上這次面試希望不大。

第二,如果面試官問到你不會的問題,你就說這個不太熟悉,沒有具體研究過,千萬別不懂裝懂,還扯一堆沒用的話題來掩飾,這樣只會讓面試官反感你。

第三,准備充分,竟可能多的記住原理性的知識,一般面試問的多的就是原理。很少問具體的配置文件是怎麼配置的。面試前也要了解清楚「職位描述」和「崗位要求」,雖然有時候大多數不會問到崗位要求的問題,但也要了解和熟悉。

第四,面試完後一定要總結,盡量記住面試官問的每一個問題,回去記錄下來,如果問到不會的問題,事後要立馬查網路或者找朋友搞清楚、弄明白,這樣你才能記勞,下次面試說不定又問到同樣的問題。

問完之後,面試官就跟我聊薪資待遇了,問我多少錢能達到自己的要求,我就不便透露了,可以私聊,哈哈,後續筆者會陸陸續續更新以前面試的經歷和問題,有需要的朋友可以轉載或者收藏起來一起討論。

基於大家熱情高昂的氣氛,筆者又花了一個下午的時間回憶並整理在2017年2月24號筆者在東三環邊上(快到東四環了,沒有地鐵過去,到了四惠還要轉公交車)的一家傳媒公司的面試經歷,還好筆者有做筆記的習慣,把之前面試的問題都記錄在案,這一次的面試筆者可是記憶猶新,因為這次這家公司都跟筆者發offer了,實在是真心不想去這家公司就找原因推掉了,大家可別學我這么不靠譜。下面是這家公司中的崗位要求說明:

崗位職責:
1、負責公司產品的版本控制、構建和發布管理;
2、負責公司統一配置庫管理工作,許可權管理與分配准確及時,定期完成配置備份;
3、負責公司內部開發/測試伺服器的運行管理工作;
4、負責Linux操作系統的安裝、配置、監控和維護、問題處理、軟體升級、 數據備份、應急響應、故障排除等、保證線上環境的穩定運行;
5、負責支撐平台24×7穩定運行,並進行前瞻性容量規劃;
6、負責公司機房伺服器日常維護及網路系統安裝、部署、維護工作。

崗位要求:
1、計算機相關專業本科及以上學歷,2年以上運維或配置管理工作經驗;
2、至少熟悉一種監控系統搭建,如Nagios/Zabbix/等;
3、至少熟悉一種集群管理工具,如Ansible/SaltStack等;
4、有使用集成發布工具發布構建經驗優先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系統,熟悉Weblogic/tomcat等中間件,能夠編寫shell腳本,熟悉軟體開發過程及過程產品,有一定的網路基礎;
6、熟悉rsyslog, flume等日誌收集和處理系統;
7、具有強烈的安全意識及較強的溝通協調和學習能力,良好的團隊合作精神,工作積極主動。

過去之後,前台美眉把我帶到他們公司的地下室,我掃視了一下周圍的環境,貌似旁邊就是機房,因為我聽到伺服器的聲音。等了幾分鍾,面試官下來了,面試官目測比較瘦,看著跟我身材差不多(應該不到120),他說他是負責運維部的,然後開始就叫我先自我介紹,都是一個套路,免不了介紹的,所以兄弟們一定要把自我介紹練好。然後開始問我問題了,跟面試官聊得還行,問我應該有不下10個以上的問題,我記住了下面有10個問題:

1、LVS負載的原理,和Nginx負載有啥區別?

筆者回答:這個問題我覺得面試官司沒問好,正常都會這么問「LVS有哪些負載均衡技術和調度演算法?"。我回答就是按我說的這種問法回答的,反正他也頻繁點頭,當然,筆者回答的可能沒有下面我整理出來的那麼詳細,大概意思我都說明白了。

LVS是Liunx虛擬伺服器的簡稱,利用LVS提供的負載均衡技術和linux操作系統可實現高性能、高可用的伺服器集群,一般LVS都是位於整個集群系統的最前端,由一台或者多台負載調度器(Director Server)組成,分發給應用伺服器(Real Server)。它是工作在4層(也就是TCP/IP中的傳輸層),LVS是基於IP負載均衡技術的IPVS模塊來實現的,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:

 VS/NAT: 即(Virtual Server via Network Address Translation)

也就是網路地址翻譯技術實現虛擬伺服器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源埠改成虛擬IP地址和相應埠,然後把數據發送給用戶,完成整個負載調度過程。

可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。

 VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技術實現虛擬伺服器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。

 VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技術實現虛擬伺服器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。

回答負載調度演算法,IPVS實現在八種負載調度演算法,我們常用的有四種調度演算法(輪叫調度、加權輪叫調度、最少鏈接調度、加權最少鏈接調度)。一般說了這四種就夠了,也不會需要你詳細解釋這四種演算法的。你只要把上面3種負載均衡技術講明白面試官就對這道問題很滿意了。接下來你在簡單說下與nginx的區別:

LVS的優點:

抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;

工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;

應用范圍比較廣,可以對所有應用做負載均衡;

配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。

LVS的缺點:

軟體本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。

如果網站應用比較龐大,LVS/DR+Keepalived就比較復雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單一點

Nginx的優點:

工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;

Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;

Nginx安裝和配置比較簡單,測試起來比較方便;

可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;

Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;

Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高並發方面相對apache有優勢;

Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作為反向代理加速器;

Nginx的缺點:

Nginx不支持url來檢測。

Nginx僅能支持http和Email,這個它的弱勢。

Nginx的Session的保持,Cookie的引導能力相對欠缺。

2、redis集群的原理,redis分片是怎麼實現的,你們公司redis用在了哪些環境?

筆者回答:reids集群原理:

其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支持集群的,官方推薦最大的節點數量為1000,至少需要3(Master)+3(Slave)才能建立集群,是無中心的分布式存儲架構,可以在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。集群可以將數據自動切分(split)到多個節點,當集群中的某一個節點故障時,redis還可以繼續處理客戶端的請求。

redis分片:

分片(partitioning)就是將你的數據拆分到多個 Redis 實例的過程,這樣每個實例將只包含所有鍵的子集。當數據量大的時候,把數據分散存入多個資料庫中,減少單節點的連接壓力,實現海量數據存儲。分片部署方式一般分為以下三種:

(1)在客戶端做分片;這種方式在客戶端確定要連接的redis實例,然後直接訪問相應的redis實例;

(2)在代理中做分片;這種方式中,客戶端並不直接訪問redis實例,它也不知道自己要訪問的具體是哪個redis實例,而是由代理轉發請求和結果;其工作過程為:客戶端先將請求發送給代理,代理通過分片演算法確定要訪問的是哪個redis實例,然後將請求發送給相應的redis實例,redis實例將結果返回給代理,代理最後將結果返回給客戶端。

(3)在redis伺服器端做分片;這種方式被稱為「查詢路由」,在這種方式中客戶端隨機選擇一個redis實例發送請求,如果所請求的內容不再當前redis實例中它會負責將請求轉交給正確的redis實例,也有的實現中,redis實例不會轉發請求,而是將正確redis的信息發給客戶端,由客戶端再去向正確的redis實例發送請求。

redis用在了哪些環境:

java、php環境用到了redis,主要緩存有登錄用戶信息數據、設備詳情數據、會員簽到數據等

3、你會怎麼統計當前訪問的IP,並排序?

筆者回答:統計用戶的訪問IP,用awk結合uniq、sort過濾access.log日誌就能統計並排序好。一般這么回答就夠了,當然你還可以說出其它方式來統計,這都是你的加分項。

4、你會使用哪些虛擬化技術?

筆者回答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,幾本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬體上運行。kvm屬於寄居架構的虛擬化技術,它是依託在系統之上運行。vmware vcenter

管理上比較方便,圖形管理界面功能很強大,穩定性強,一般比較適合企業使用。KVM管理界面稍差點,需要管理人員花費點時間學習它的維護管理技術。

5、假如有人反應,調取後端介面時特別慢,你會如何排查?

筆者回答:其實這種問題都沒有具體答案,只是看你回答的內容與面試官契合度有多高,能不能說到他想要的點上,主要是看你排查問題的思路。我是這么說的:問清楚反應的人哪個服務應用或者頁面調取哪個介面慢,叫他把頁面或相關的URL發給你,首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內容過慢(DNS解析、網路載入、大圖片、還是某個文件內容等),如果有,就對症下葯去解決(圖片慢就優化圖片、網路慢就查看內網情況等)。其次,看後端服務的日誌,其實大多數的問題看相關日誌是最有效分析,最好用tail -f 跟蹤一下日誌,當然你也要點擊測試來訪問介面日誌才會打出來。最後,排除sql,,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。數據量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,找到耗時的地方改造,優化邏輯。

6、mysql資料庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?

筆者回答:這個問題筆者覺得回答的不太好,對mysql比較在行的朋友希望能給點建議。以解決問題為前提條件,先添加從庫數量,臨時把問題給解決,然後抓取slow log ,分析sql語句,該優化就優化處理。慢要不就是硬體跟不上,需要升級;要不就是軟體需要調試優化,等問題解決在細化。

7、cpu單核和多核有啥區別?

筆者回答:很少有面試官會問這樣的問題,即然問到了,也要老實回答。還好筆者之前了解過CPU,我是這么說的:雙核CPU就是能處理多份任務,順序排成隊列來處理。單核CPU一次處理一份任務,輪流處理每個程序任務。雙核的優勢不是頻率,而是對付同時處理多件事情。單核同時只能幹一件事,比如你同時在後台BT下載,前台一邊看電影一邊拷貝文件一邊QQ。

8、機械磁碟和固態硬碟有啥區別?

筆者回答:我擦,啥年代了,還問磁碟的問題,這面試官有點逗啊。那也要回答啊:

HDD代表機械硬碟,SSD代表固態硬碟。首先,從性能方面來說,固態硬碟幾乎完勝機械硬碟,固態硬碟的讀寫速度肯定要快機械硬碟,因為固態硬碟和機械硬碟的構造是完全不同的(具體的構造就沒必要解釋了)。其次,固態盤幾乎沒有噪音、而機械盤噪音比較大。還有就是,以目前的市場情況來看,一般機械盤容量大,價格低;固態盤容量小,價格偏高。但是企業還是首選固態盤。

9、說一下用過哪些監控系統?

筆者回答:這個監控的問題又問到了,筆者在2018年1月4號也被問到類似這樣的問題,筆者曾經用過zabbix、nagios、 cacit等。但是在這次面試中只說用過zabbix和nagios。說完了之後,面試官就讓我說一下這兩個監控有啥區別:

從web功能及畫圖來講:

Nagios簡單直觀,報警與數據都在同一頁面, 紅色即為問題項。Nagios web端不要做任何配置。 Nagios需要額外安裝插件,且插件畫圖不夠美觀。

Zabbix監控數據與報警是分開的,查看問題項需要看觸發器,查看數據在最新數據查看。而且zabbix有很多其它配置項, zabbix攜帶畫圖功能,且能手動把多個監控項集在一個圖中展示。

從監控服務來講:

Nagios自帶的監控項很少。對一些變動的如多個分區、多個網卡進行監控時需要手動配置。

Zabbix自帶了很多監控內容,感覺zabbix一開始就為你做了很多事,特別是對多個分區、多個網卡等自動發現並進行監控時,那一瞬間很驚喜,很省心的感覺。

從批量配置和報警來講:

Nagios對於批量監控主機,需要用腳本在server端新增host,並拷貝service文件。 Nagios用腳本來修改所有主機的services文件,加入新增服務。

Zabbix在server端配置自動注冊規則,配置好規則後,後續新增client端不需要對server端進行操作。 Zabbix只需手動在模板中新增一監控項即可。

總體來講:

Nagios要花很多時間寫插件,Zabbix要花很多時間探索功能。

Nagios更易上手,Nagios兩天弄會,Zabbix兩周弄會。

Zabbix畫圖功能比Nagios更強大

Zabbix對於批量監控與服務更改,操作更簡潔;Nagios如果寫好自動化腳本後,也很簡單,問題在於寫自動化腳本很費神。

10、給你一套環境,你會如何設計高可用、高並發的架構?

筆者回答:如果這套環境是部署在雲端(比如阿里雲),你就不用去考慮硬體設計的問題。可直接上阿里雲的SLB+ECS+RDS這套標準的高可用、高並發的架構。對外服務直接上SLB負載均衡技術,由阿里的SLB分發到後端的ECS主機;ECS主機部署多台,應用拆分在不同的ECS主機上,盡量細分服務。資料庫用RDS高可用版本(一主一備的經典高可用架構)、或者用RDS金融版(一主兩備的三節點架構)。在結合阿里其它的服務就完全OK,業務量上來了,主機不夠用了,直橫向擴容ECS主機搞定。

如果這套環境託管在IDC,那麼你就要從硬體、軟體(應用服務)雙面去考慮了。硬體要達到高可用、高並發公司必須買多套網路硬體設備(比如負載設備F5、防火牆、核心層交換、接入層交換)都必須要冗餘,由其是在網路設計上,設備之間都必須有雙線連接。設備如果都是跑的單機,其中一個設備掛了,你整個網路都癱瘓了,就談不上高可用、高並發了。其次在是考慮應用服務了,對外服務我會採用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,緩存層可以考慮redis集群及Mongodb集群,中間件等其它服務可以用kafka、zookeeper,圖片存儲可以用fastDFS或MFS,如果數據量大、又非常多,那麼可採用hadoop這一套方案。後端資料庫可採用 「主從+MHA」。這樣一套環境下來是絕對滿足高可用、高並發的架構

⑽ 對於緩存在redis中且不會改變的數據並發讀為什麼還會出現QPS的瓶頸

相對於熟讀官方文檔,更重要的是要把框架環境搭起來。零、環境介紹操作系統:centOS資料庫:mysql5/installerphpmvcomposer.phar/usr/local/bin/composer安裝完成,使用以下命令看是否安裝成功composer-V出現版本號,即說明安裝成功三、安裝Laravel按照Laravel的官方文檔說明即可,建議使用【通過Laravel安裝工具】,沒什麼坑,這里略過提示:由於Laravel還依賴於一些的PHP擴展,所以使用yum安裝sudoinstallyumphp-mysqlphp-mcryptphp-mbstringphp-tokenizerphp-openssl安裝完成後,在Nginx的配置文件(一般是/etc/nginx/conf.d/default.conf)最下方添加如下配置location/{try_files$uri$uri//index.php?$query_string;}來到你的laravel工程目錄下,看到storage和vendor文件夾,使用以下命令修改其文件讀寫許可權,讓Nginx用戶能讀寫它sudochmod-R766storagesudochmod-R766vendor四、讓MVC跑起來!在此之前,你應該讀一下官方文檔路由、控制器、資料庫使用基礎、EloquentORM至此,可以開始coding,開發一個MVC的demo了,此demo的功能是將資料庫表tbl_item從資料庫里讀出來,並以json格式響應給瀏覽器。假設你已經通過laravelnewdemo來初始化你的webapp。資料庫里建庫(demo)、建表(tbl_item),(欄位隨意定)配置配置文件config/database.php直接操作資料庫,往tbl_item里插入一條數據開始codingdemo/app/http/routes.php底部添加如下代碼:Route::get('/item/{id}','ItemController@showItem');demo/app/http/controllers/目錄新添文件ItemController.php,代碼如下:model=newItem();}publicfunctionshowItem($id){$users=$this->model->fetchAll();echojson_encode($users);Log::info('獲取用戶列表,通過msyql');}}demo/app/目錄下新增文件Item.php代碼如下all()->toJson();return$items;}}使用瀏覽器訪問yourIp/item/1,即可列出所有的item數據五、Laravel結合Redis直連DB是不夠的,很快資料庫訪問就會成為系統的瓶頸。我們引入緩存Redis。還是一樣的思路,先讓系統跑起來。1、安裝啟動Redis安裝$wgetdownload.redis.io/releases/redis-3.0.1.tar.gz$tarxzfredis-3.0.1.tar.gz$cdredis-3.0.1$make啟動$src/redis-server查看官方下載和安裝文檔,只需要幾個命令即可2、安裝PHPPRedisPRedis是PHP訪問redis的擴展包,只需要下載原碼即可,不需要安裝PHP擴展(如php-redis.so)。但在這之前要介紹一個composer,因為laravel通過它來安裝第三方程序包(管理依賴關系)。cd到你的App所在路徑,修改composer.json,在require欄位里,添加"predis/predis":"~1.0.1",然後當前目錄下sudocomposerupdate,此時就會自動下載包需要的擴展包,這些擴展包將會被放在vendor目錄下。如果出現內存不夠這些報錯,現在看來是內存分配不夠的原因,重啟一下伺服器即可,徹底解決的法要修改伺服器配置,但我不清楚改哪裡,後續再補配置相關配置,查看官方文檔即可。主要是配置config/database.php'redis'=>array('cluster'=>false,'default'=>array('host'=>'127.0.0.1','port'=>6379))3、codingmodel=newUser();}/***Show**@returnResponse*/publicfunctionshowUser($id){$redis=Redis::connection('default');$cacheUsers=$redis->get('userList');if($cacheUsers){$users=$cacheUsers;print_r($users);Log::info('獲取用戶列表,通過redis');}else{$users=$this->model->fetchAll();$redis->set('userList',$users);print_r($users);Log::info('獲取用戶列表,通過msyql');}}}

熱點內容
2013年二級c語言真題 發布:2024-10-08 10:44:47 瀏覽:242
linux的locale 發布:2024-10-08 10:44:36 瀏覽:91
2rsa演算法 發布:2024-10-08 10:29:53 瀏覽:542
南京社保密碼多少 發布:2024-10-08 10:21:01 瀏覽:472
國內的少兒編程 發布:2024-10-08 10:21:00 瀏覽:520
vscode編譯調試閃退 發布:2024-10-08 10:19:27 瀏覽:671
oracle資料庫用戶許可權 發布:2024-10-08 09:46:00 瀏覽:708
立方的演算法口訣 發布:2024-10-08 09:44:30 瀏覽:820
python輸入到excel表格 發布:2024-10-08 09:36:31 瀏覽:285
腳本拒絕訪問閃退 發布:2024-10-08 09:34:55 瀏覽:939