大型網(wǎng)站架構(gòu)
網(wǎng)站架構(gòu)包括:前端架構(gòu)+應(yīng)用層架構(gòu)+服務(wù)層架構(gòu)+存儲層架構(gòu)+后臺架構(gòu)+數(shù)據(jù)中心機(jī)房架構(gòu)+安全架構(gòu)+數(shù)據(jù)采集與監(jiān)控联四。
前端架構(gòu)
- 瀏覽器優(yōu)化技術(shù)
并不是優(yōu)化瀏覽器辩撑,而是通過優(yōu)化響應(yīng)頁面篮奄,加快瀏覽器頁面的加載和顯示黍檩,常用的有頁面緩存估蹄、合并HTTP 減少請求次數(shù)颂碧、使用頁面壓縮等荠列。 - CDN
內(nèi)容分發(fā)網(wǎng)絡(luò),部署在網(wǎng)絡(luò)運(yùn)營商機(jī)房载城,通過將靜態(tài)頁面內(nèi)容分發(fā)到離用戶最近的CDN 服務(wù)器肌似,使用戶可以通過最短路徑獲取內(nèi)容。 - 動(dòng)靜分離诉瓦,靜態(tài)資源獨(dú)立部署
靜態(tài)資源川队,如JS,CSS 等文件部署在專門的服務(wù)器集群上力细,和Web 應(yīng)用動(dòng)態(tài)內(nèi)容服務(wù)分離,并使用專門的(二級)域名固额。 - 圖片服務(wù)
圖片不是指網(wǎng)站Logo 按鈕圖標(biāo)等眠蚂,這些文件屬于上面提到的靜態(tài)資源,應(yīng)該和JS CSS 部署在一起斗躏。這里的圖片指用戶上傳的圖片逝慧,如產(chǎn)品圖片、用戶頭像等啄糙,圖片服務(wù)同樣使用獨(dú)立部署的圖片服務(wù)器集群笛臣,并使用獨(dú)立(二級)域名。 - 反向代理
部署在網(wǎng)站機(jī)房迈套,在應(yīng)用服務(wù)器捐祠、靜態(tài)資源服務(wù)器、圖片服務(wù)器之前桑李,提供頁面緩存服務(wù)踱蛀。 - DNS
域名服務(wù),將域名解析成IP 地址贵白,利用DNS 可以實(shí)現(xiàn)DNS 負(fù)載均衡率拒,配置CDN也需要修改DNS使域名解析后指向CDN 服務(wù)器。
應(yīng)用層架構(gòu)
應(yīng)用層是處理網(wǎng)站主要業(yè)務(wù)邏輯的地方禁荒。
- 開發(fā)框架
- 頁面渲染
將分別開發(fā)維護(hù)的動(dòng)態(tài)內(nèi)容和靜態(tài)頁面模板集成起來猬膨,組合成最終顯示給用戶的完整頁面。 - 負(fù)載均衡
將多臺應(yīng)用服務(wù)器組成一個(gè)集群呛伴,通過負(fù)載均衡技術(shù)將用戶請求分發(fā)到不同的服務(wù)器上勃痴,以應(yīng)對大量用戶同時(shí)訪問時(shí)產(chǎn)生的高并發(fā)負(fù)載壓力。 - Session 管理
為了實(shí)現(xiàn)高可用的應(yīng)用服務(wù)器集群热康,應(yīng)用服務(wù)器通常設(shè)計(jì)為無狀態(tài)沛申,不保存用戶請求上下文信息,但是網(wǎng)站業(yè)務(wù)通常需要保持用戶會話信息姐军,需要專門的.機(jī)制管理Session
使集群內(nèi)甚至跨集群的應(yīng)用服務(wù)器可以共享Session - 動(dòng)態(tài)頁面靜態(tài)化
對于訪問量特別大而更新又不很頻繁的動(dòng)態(tài)頁面铁材,可以將其靜態(tài)化,即生成一個(gè)靜態(tài)頁面奕锌,利用靜態(tài)頁面的優(yōu)化手段加速用戶訪問著觉,如反向代理、CDN惊暴、 瀏覽器緩存等饼丘。 - 業(yè)務(wù)拆分
將復(fù)雜而又龐大的業(yè)務(wù)拆分開來,形成多個(gè)規(guī)模較小的產(chǎn)品缴守,獨(dú)立開發(fā)葬毫、部署镇辉、維護(hù),除了降低系統(tǒng)耦合度贴捡,也便于數(shù)據(jù)庫業(yè)務(wù)分庫忽肛。按業(yè)務(wù)對關(guān)系數(shù)據(jù)庫進(jìn)行拆分,技術(shù)難度相對較小烂斋,而效果又相對較好屹逛。 - 虛擬化服務(wù)器
將一臺物理服務(wù)器虛擬化成多臺虛擬服務(wù)器,對于并發(fā)訪問較低的業(yè)務(wù)汛骂,更容易用較少的資源構(gòu)建高可用的應(yīng)用服務(wù)器集群罕模。
服務(wù)層架構(gòu)
提供基礎(chǔ)服務(wù),供應(yīng)用層調(diào)用帘瞭,完成網(wǎng)站業(yè)務(wù)淑掌。
- 分布式消息
利用消息隊(duì)列機(jī)制,實(shí)現(xiàn)業(yè)務(wù)和業(yè)務(wù)蝶念、業(yè)務(wù)和服務(wù)之間的異步消息發(fā)送及低耦合的業(yè)務(wù)關(guān)系抛腕。 - 分布式服務(wù)
提供高性能、低耦合媒殉、易復(fù)用担敌、易管理的分布式服務(wù),在網(wǎng)站實(shí)現(xiàn)面向服務(wù)架構(gòu)SOA - 分布式緩存
通過可伸縮的服務(wù)器集群提供大規(guī)模熱點(diǎn)數(shù)據(jù)的緩存服務(wù)廷蓉,是網(wǎng)站性能優(yōu)化的重要手段全封。 - 分布式配置
系統(tǒng)運(yùn)行需要配置許多參數(shù),如果這些參數(shù)需要修改桃犬,比如分布式緩存集群加入新的緩存服務(wù)器刹悴,需要修改應(yīng)用程序客戶端的緩存服務(wù)器列表配置,并重啟應(yīng)用程序服務(wù)器。分布式配置在系統(tǒng)運(yùn)行期提供配置動(dòng)態(tài)推送服務(wù)寺酪,將配置修改實(shí)時(shí)推送到應(yīng)用系統(tǒng),無需重啟服務(wù)器。
存儲層架構(gòu)
分布式文件
網(wǎng)站在線業(yè)務(wù)需要存儲的文件大部分都是圖片、網(wǎng)頁藻雪、視頻等比較小的文件,但是這些文件的數(shù)量非常龐大贩毕,而且通常都在持續(xù)增加刺彩,需要伸縮性設(shè)計(jì)比較好的分布式文件系統(tǒng)。關(guān)系數(shù)據(jù)庫
大部分網(wǎng)站的主要業(yè)務(wù)是基于關(guān)系數(shù)據(jù)庫開發(fā)的躯砰,但是關(guān)系數(shù)據(jù)庫對集群伸縮性的支持比較差每币。通過在應(yīng)用程序的數(shù)據(jù)訪問層增加數(shù)據(jù)庫訪問路由功能,根據(jù)業(yè)務(wù)配置將數(shù)據(jù)庫訪問路由到不同的物理數(shù)據(jù)庫上琢歇,可實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫的分布式訪問NoSQL 數(shù)據(jù)庫
目前各種NoSQL 數(shù)據(jù)庫層出不窮兰怠,在內(nèi)存管理梦鉴、數(shù)據(jù)模型、集群分布式管理等方面各有優(yōu)勢揭保,不過從社區(qū)活躍性角度看肥橙,HBase 無疑是目前最好的。數(shù)據(jù)同步
在支持全球范圍內(nèi)數(shù)據(jù)共享的分布式數(shù)據(jù)庫技術(shù)成熟之前秸侣,擁有多個(gè)數(shù)據(jù)中心的網(wǎng)站必須在多個(gè)數(shù)據(jù)中心之間進(jìn)行數(shù)據(jù)同步存筏,以保證每個(gè)數(shù)據(jù)中心都擁有完整的數(shù)據(jù)。在實(shí)踐中味榛,為了減輕數(shù)據(jù)庫壓力椭坚,將數(shù)據(jù)庫的事務(wù)日志(或者NoSQL 的寫操作Log) 同步到其他數(shù)據(jù)中心,根據(jù)Log 進(jìn)行數(shù)據(jù)重演搏色,實(shí)現(xiàn)數(shù)據(jù)同步善茎。
后臺架構(gòu)
網(wǎng)站應(yīng)用中,除了要處理用戶的實(shí)時(shí)訪問請求外频轿,還有一些后臺非實(shí)時(shí)數(shù)據(jù)分析要處理垂涯。
- 搜索引擎
即使是網(wǎng)站內(nèi)部的搜索引擎,也需要進(jìn)行數(shù)據(jù)增量更新及全量更新略吨、構(gòu)建索引等集币。
這些操作通過后臺系統(tǒng)定時(shí)執(zhí)行。 - 數(shù)據(jù)倉庫
根據(jù)離線數(shù)據(jù)翠忠,提供數(shù)據(jù)分析與數(shù)據(jù)挖掘服務(wù)鞠苟。 - 推薦系統(tǒng)
社交網(wǎng)站及購物網(wǎng)站通過挖掘人和人之間的關(guān)系,人和商品之間的關(guān)系秽之,發(fā)掘潛在的人際關(guān)系和購物興趣当娱,為用戶提供個(gè)性化推薦服務(wù)。
數(shù)據(jù)采集與監(jiān)控
監(jiān)控網(wǎng)站訪問情況與系統(tǒng)運(yùn)行情況考榨,為網(wǎng)站運(yùn)營決策和運(yùn)維管理提供支持保障跨细。
- 瀏覽器數(shù)據(jù)采集
通過在網(wǎng)站頁面中嵌入JS 腳本釆集用戶瀏覽器環(huán)境與操作記錄,分析用戶行為河质。 - 服務(wù)器業(yè)務(wù)數(shù)據(jù)采集
服務(wù)器業(yè)務(wù)數(shù)據(jù)包括兩種冀惭,一種是采集在服務(wù)器端記錄的用戶請求操作日志;一種是釆集應(yīng)用程序運(yùn)行期業(yè)務(wù)數(shù)據(jù)掀鹅,比如待處理消息數(shù)目等散休。 - 服務(wù)器性能數(shù)據(jù)采集
采集服務(wù)器性能數(shù)據(jù),如系統(tǒng)負(fù)載乐尊、內(nèi)存使用率戚丸、網(wǎng)卡流量等。 - 系統(tǒng)監(jiān)控
將前述采集的數(shù)據(jù)以圖表的方式展示扔嵌,以便運(yùn)營和運(yùn)維人員監(jiān)控網(wǎng)站運(yùn)行狀況限府,做
到這一步僅僅是系統(tǒng)監(jiān)視夺颤。更先進(jìn)的做法是根據(jù)釆集的數(shù)據(jù)進(jìn)行自動(dòng)化運(yùn)維,自動(dòng)處理
系統(tǒng)異常狀況胁勺,實(shí)現(xiàn)自動(dòng)化控制世澜。 - 系統(tǒng)報(bào)警
如果采集來的數(shù)據(jù)超過預(yù)設(shè)的正常情況的閾值,比如系統(tǒng)負(fù)載過高姻几,就通過郵件宜狐、
短信、語音電話等方式發(fā)出報(bào)警信號蛇捌,等待工程師干預(yù)抚恒。
安全架構(gòu)
保護(hù)網(wǎng)站免遭攻擊及敏感信息泄露。
- Web 攻擊
以HTTP 請求的方式發(fā)起的攻擊络拌,危害最大的就是XSS 和SQL 注入攻擊俭驮。但是只要
措施得當(dāng),這兩種攻擊都是比較容易防范的春贸。 - 數(shù)據(jù)保護(hù)
敏感信息加密傳輸與存儲混萝,保護(hù)網(wǎng)站和用戶資產(chǎn)。
數(shù)據(jù)中心機(jī)房架構(gòu)
山寨與創(chuàng)新的最大區(qū)別不在于是否抄襲萍恕、是否模仿逸嘀,而在于對問題和需求是否真正理解與把握
在解決問題之前,能夠認(rèn)真思考自己面對的真正問題究竟是什么允粤,有哪些技術(shù)方案可以選擇崭倘,其基本原理是什么。
網(wǎng)站架構(gòu)其實(shí)并不難类垫,真正能解決問題的技術(shù)一定是簡單的司光。
大型網(wǎng)站的特點(diǎn):
高并發(fā)、大流量悉患;高可用残家;海量數(shù)據(jù);用戶分布廣泛且網(wǎng)絡(luò)環(huán)境復(fù)雜售躁;安全環(huán)境惡劣坞淮;需求快速變更,發(fā)布頻繁陪捷;漸進(jìn)式發(fā)展碾盐。
網(wǎng)站系統(tǒng)的演進(jìn):
- 單機(jī)部署
- 數(shù)據(jù)和應(yīng)用分離
- 使用緩存減少數(shù)據(jù)庫壓力
網(wǎng)站訪問特點(diǎn)和現(xiàn)實(shí)世界的財(cái)富分配一樣遵循二八定律:80%的業(yè)務(wù)訪問集中在20%
的數(shù)據(jù)上 - 應(yīng)用服務(wù)器集群化
可擴(kuò)展性,負(fù)載均衡 - 數(shù)據(jù)庫讀寫分離
利用的是數(shù)據(jù)庫的主從熱備揩局。寫主讀從。 - 加速網(wǎng)站訪問速度:CDN和反向代理掀虎。
CDN 和反向代理的基本原理都是緩存凌盯,區(qū)別在于CDN 部署在網(wǎng)絡(luò)提供商的機(jī)房付枫,使
用戶在請求網(wǎng)站服務(wù)時(shí),可以從距離自己最近的網(wǎng)絡(luò)提供商機(jī)房獲取數(shù)據(jù)驰怎;而反向代理
則部署在網(wǎng)站的中心機(jī)房阐滩,當(dāng)用戶請求到達(dá)中心機(jī)房后,首先訪問的服務(wù)器是反向代理
服務(wù)器县忌,如果反向代理服務(wù)器中緩存著用戶請求的資源掂榔,就將其直接返回給用戶。 - 分布式數(shù)據(jù)庫和分布式文件系統(tǒng)
網(wǎng)站更常用的數(shù)據(jù)庫拆分手段是業(yè)務(wù)分庫症杏,將不同業(yè)務(wù)的數(shù)據(jù)
庫部署在不同的物理服務(wù)器上装获。 - 使用NoSQL和搜索引擎
- 業(yè)務(wù)拆分
- 分布式服務(wù)
但事物發(fā)展到一定階段,就會擁有自身的發(fā)展沖動(dòng)厉颤,擺脫其初衷穴豫,向著使自己更強(qiáng)
大的方向發(fā)展。既然大型網(wǎng)站架構(gòu)解決了海量數(shù)據(jù)的管理和高并發(fā)事務(wù)的處理逼友,那么就
可以把這些解決方案應(yīng)用到網(wǎng)站自身以外的業(yè)務(wù)上去精肃。我們看到目前許多大型網(wǎng)站都開
始建設(shè)云計(jì)算平臺,將計(jì)算作為一種基礎(chǔ)資源出售帜乞,中小網(wǎng)站不需要再關(guān)心技術(shù)架構(gòu)問
題司抱,只需要按需付費(fèi),就可以使網(wǎng)站隨著業(yè)務(wù)的增長逐漸獲得更大的存儲空間和更多的
計(jì)算資源黎烈。
這個(gè)世界沒有哪個(gè)網(wǎng)站從誕生起就是大型網(wǎng)站习柠;也沒有哪個(gè)網(wǎng)站第一次發(fā)布就擁有
龐大的用戶,高并發(fā)的訪問怨喘,海量的數(shù)據(jù)津畸;大型網(wǎng)站都是從小型網(wǎng)站發(fā)展而來。網(wǎng)站的
價(jià)值在于它能為用戶提供什么價(jià)值必怜,在于網(wǎng)站能做什么肉拓,而不在于它是怎么做的,所以
在網(wǎng)站還很小的時(shí)候就去追求網(wǎng)站的架構(gòu)是舍本逐末梳庆,得不償失的暖途。小型網(wǎng)站最需要做
的就是為用戶提供好的服務(wù)來創(chuàng)造價(jià)值,得到用戶的認(rèn)可膏执,活下去驻售,野蠻生長。
技術(shù)是用來解決業(yè)務(wù)問題的更米,而業(yè)務(wù)的問題欺栗,也可以通過業(yè)務(wù)的手段去解決。
恩,不要妄圖用技術(shù)解決所有問題迟几。
大型網(wǎng)站架構(gòu)模式
- 分層
單一職責(zé)消请,上層對下層的依賴關(guān)系。 - 分割
業(yè)務(wù)縱向分割类腮,分布式部署臊泰。 - 分布式
分層和分割都是為了便于分布式部署。
常用的分布式方案有:分布式應(yīng)用和服務(wù)蚜枢;分布式靜態(tài)資源缸逃;分布式數(shù)據(jù)和存儲;分布式計(jì)算厂抽。 - 集群
- 緩存
緩存是改善軟件性能的第一手段需频。
使用緩存有兩個(gè)前提條件,一是數(shù)據(jù)訪問熱點(diǎn)不均衡修肠,某些數(shù)據(jù)會被更頻繁的訪問贺辰,
這些數(shù)據(jù)應(yīng)該放在緩存中;二是數(shù)據(jù)在某個(gè)時(shí)間段內(nèi)有效嵌施,不會很快過期饲化,否則緩存的
數(shù)據(jù)就會因已經(jīng)失效而產(chǎn)生臟讀,影響結(jié)果的正確性吗伤。 - 異步
將一個(gè)業(yè)務(wù)操作分成多個(gè)階段吃靠,每個(gè)階段之間通過共享數(shù)據(jù)的方式異步執(zhí)行進(jìn)行協(xié)作。
在分布式系統(tǒng)中足淆,多個(gè)服務(wù)器集群通過分布式消息隊(duì)列實(shí)現(xiàn)異步巢块,分布式消息隊(duì)列可以看作內(nèi)存隊(duì)列的分布式部署。
提高系統(tǒng)可用性巧号。
加快網(wǎng)站響應(yīng)速度族奢。
消除并發(fā)訪問高峰。 - 冗余
架構(gòu)要素
從性能丹鸿、可用性越走、伸縮性、擴(kuò)展性靠欢、安全這五個(gè)要素廊敌。
所謂伸縮性是指通過不斷向集群中加入服務(wù)器的手段來緩解不斷上升的
用戶并發(fā)訪問壓力和不斷增長的數(shù)據(jù)存儲需求。
衡量架構(gòu)伸縮性的主要標(biāo)準(zhǔn)就是是否可以用多臺服務(wù)器構(gòu)建集群门怪,是否容易向集群
中添加新的服務(wù)器骡澈。加入新的服務(wù)器后是否可以提供和原來的服務(wù)器無差別的服務(wù)。集
群中可容納的總的服務(wù)器數(shù)量是否有限制掷空。
關(guān)系數(shù)據(jù)庫雖然支持?jǐn)?shù)據(jù)復(fù)制肋殴,主從熱備等機(jī)制囤锉,但是很難做到大規(guī)模集群的可伸
縮性,因此關(guān)系數(shù)據(jù)庫的集群伸縮性方案必須在數(shù)據(jù)庫之外實(shí)現(xiàn)护锤,通過路由分區(qū)等手段
將部署有多個(gè)數(shù)據(jù)庫的服務(wù)器組成一個(gè)集群
至于大部分NoSQL 數(shù)據(jù)庫產(chǎn)品嚼锄,由于其先天就是為海量數(shù)據(jù)而生,因此其對伸縮性
的支持通常都非常好蔽豺,可以做到在較少運(yùn)維參與的情況下實(shí)現(xiàn)集群規(guī)模的線性伸縮。
擴(kuò)展性是指的功能擴(kuò)展拧粪,伸縮是指性能伸縮修陡。
性能優(yōu)化
System Load 即系統(tǒng)負(fù)載,指當(dāng)前正在被CPU 執(zhí)行和等待被CPU 執(zhí)行的進(jìn)程數(shù)目總和可霎,是反映系統(tǒng)忙閑程度的重要指標(biāo)魄鸦。多核CPU 的情況下,完美情況是所有CPU 都在使用癣朗,沒有進(jìn)程在等待處理拾因,所以Load 的理想值是CPU 的數(shù)目。當(dāng)Load 值低于CPU 數(shù)目的時(shí)候旷余,表示CPU 有空閑绢记,資源存在浪費(fèi);當(dāng)Load 值高于CPU 數(shù)目的時(shí)候正卧,表示進(jìn)程在排隊(duì)等待CPU 調(diào)度蠢熄,表示系統(tǒng)資源不足,影響應(yīng)用程序的執(zhí)行性能炉旷。
在Linux 系統(tǒng)中使用top 命令査看签孔,該值是三個(gè)浮點(diǎn)數(shù),表示最近1 分鐘窘行,10 分鐘饥追,15 分鐘的運(yùn)行隊(duì)列平均進(jìn)程數(shù)。
性能測試是一個(gè)總稱罐盔,具體可細(xì)分為性能測試但绕、負(fù)載測試、壓力測試翘骂、穩(wěn)定性測試壁熄。
排査一個(gè)網(wǎng)站的性能瓶頸和排査一個(gè)程序的性能瓶頸的手法基本相同:檢査請求處
理的各個(gè)環(huán)節(jié)的日志,分析哪個(gè)環(huán)節(jié)響應(yīng)時(shí)間不合理碳竟、超過預(yù)期草丧;然后檢査監(jiān)控?cái)?shù)據(jù),
分析影響性能的主要因素是內(nèi)存莹桅、磁盤昌执、網(wǎng)絡(luò)烛亦、還是cpu? 是代碼問題還是架構(gòu)設(shè)計(jì)不
合理,或者系統(tǒng)資源確實(shí)不足懂拾。
前端性能優(yōu)化
主要優(yōu)化手段有優(yōu)化瀏覽器訪問煤禽、使用反向代理、CDN 等岖赋。
優(yōu)化瀏覽器訪問的措施:
- 減少http請求檬果。
HTTP 協(xié)議是無狀態(tài)的應(yīng)用層協(xié)議,意味著每次HTTP 請求都需要建立通信鏈路唐断、進(jìn)行數(shù)據(jù)傳輸选脊,而在服務(wù)器端,每個(gè)HTTP 都需要啟動(dòng)獨(dú)立的線程去處理脸甘。這些通信和服務(wù)的開銷都很昂貴恳啥,減少HTTP 請求的數(shù)目可有效提高訪問性能。
減少HTTP 的主要手段是合并CSS,合并JavaScript,合并圖片丹诀。將瀏覽器一次訪問需要的JavaScript CSS 合并成一個(gè)文件钝的,這樣瀏覽器就只需要一次請求。圖片也可以合并铆遭,多張圖片合并成一張硝桩,如果每張圖片都有不同的超鏈接,可通過CSS 偏移響應(yīng)鼠標(biāo)點(diǎn)擊操作疚脐,構(gòu)造不同的URL - 使用瀏覽器緩存
對一個(gè)網(wǎng)站而言亿柑,CSS? JavaScript , Logo圖標(biāo)這些靜態(tài)資源文件更新的頻率都比較低,而這些文件又幾乎是每次HTTP 請求都需要的棍弄,如果將這些文件緩存在瀏覽器中望薄,可以極好地改善性能。
通過設(shè)置HTTP 頭中Cache-Control 和Expires 的屬性呼畸,可設(shè)定瀏覽
器緩存痕支,緩存時(shí)間可以是數(shù)天,甚至是幾個(gè)月蛮原。
在某些時(shí)候卧须,靜態(tài)資源文件變化需要及時(shí)應(yīng)用到客戶端瀏覽器,這種情況儒陨,可通改變文件名實(shí)現(xiàn)花嘶,即更新JavaScript 文件并不是更新JavaScript 文件內(nèi)容,而是生成一個(gè)新的JS 文件并更新HTML 文件中的引用蹦漠。
使用瀏覽器緩存策略的網(wǎng)站在更新靜態(tài)資源時(shí)椭员,應(yīng)采用批量更新的方法,比如需要更新10 個(gè)圖標(biāo)文件笛园,不宜把10 個(gè)文件一次全部更新隘击,而是應(yīng)一個(gè)文件一個(gè)文件逐步更
新侍芝,并有一定的間隔時(shí)間,以免用戶瀏覽器突然大量緩存失效埋同,集中更新緩存州叠,造成服
務(wù)器負(fù)載驟增、網(wǎng)絡(luò)堵塞的情況凶赁。 - 啟用壓縮
在服務(wù)器端對文件進(jìn)行壓縮咧栗,在瀏覽器端對文件解壓縮,可有效減少通信傳輸?shù)臄?shù)
據(jù)量虱肄。文本文件的壓縮效率可達(dá)80%以上楼熄,因此HTML? CSS? JavaScript 文件啟用GZip
壓縮可達(dá)到較好的效果。但是壓縮對服務(wù)器和瀏覽器產(chǎn)生一定的壓力浩峡,在通信帶寬良好,
而服務(wù)器資源不足的情況下要權(quán)衡考慮错敢。 - CSS 放在頁面最上面翰灾、JavaScript 放在頁面最下面
但如果頁面解析時(shí)就需要用到JavaScript, 這時(shí)放在底部就不合適了。
5稚茅,減少cookie傳輸
服務(wù)器端性能優(yōu)化
- 分布式緩存
網(wǎng)站性能優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能纸淮。
產(chǎn)品在設(shè)計(jì)之初就需要一個(gè)明確的定位:什么是產(chǎn)品要實(shí)現(xiàn)的功能,什么
不是產(chǎn)品提供的特性亚享。在產(chǎn)品漫長的生命周期中咽块,會有形形色色的困難和誘惑
來改變產(chǎn)品的發(fā)展方向,左右搖擺欺税、什么都想做的產(chǎn)品侈沪,最后有可能成為一個(gè)
失去生命力的四不像。
緩存預(yù)熱
緩存穿透 - 異步
消息隊(duì)列晚凿。需要注意的是亭罪,由于數(shù)據(jù)寫入消息隊(duì)列后立即返回給用戶,數(shù)據(jù)在后續(xù)的業(yè)務(wù)校驗(yàn)歼秽、寫數(shù)據(jù)庫等操作可能失敗应役,因此在使用消息隊(duì)列進(jìn)行業(yè)務(wù)異步處理后,需要適當(dāng)修改業(yè)
務(wù)流程進(jìn)行配合
任何可以晚點(diǎn)做的事情都應(yīng)該晚點(diǎn)做燥筷。 - 使用集群箩祥。
- 代碼優(yōu)化
- 多線程。
啟動(dòng)線程數(shù)= [任務(wù)執(zhí)行時(shí)間/ (任務(wù)執(zhí)行時(shí)間-10 等待時(shí)間)] xCPU 內(nèi)核數(shù)
最佳啟動(dòng)線程數(shù)和CPU 內(nèi)核數(shù)量成正比肆氓,和IO 阻塞時(shí)間成反比袍祖。
如果是計(jì)算型任務(wù),那么線程數(shù)最多不超過CPU 內(nèi)核數(shù)做院,因?yàn)閱?dòng)再多線程盲泛,CPU 也來不及調(diào)度濒持;相反如果是任務(wù)需要等待磁盤操作,網(wǎng)絡(luò)響應(yīng)寺滚,那么多啟動(dòng)線程有助于提高任務(wù)并
發(fā)度柑营,提高系統(tǒng)吞吐能力,改善系統(tǒng)性能村视。 - 對象復(fù)用官套。單例和池技術(shù)。
- 數(shù)據(jù)結(jié)果蚁孔。
- 垃圾回收奶赔。
- 多線程。
存儲性能優(yōu)化
B+樹,關(guān)系型數(shù)據(jù)庫多采用此數(shù)據(jù)結(jié)構(gòu)杠氢。
NoSql產(chǎn)品多采用LSM樹作為主要數(shù)據(jù)結(jié)構(gòu)站刑。
在LSM 樹上進(jìn)行一次數(shù)據(jù)更新不需要磁盤訪問,在內(nèi)存即可完成鼻百,速度遠(yuǎn)快于B+
樹绞旅。當(dāng)數(shù)據(jù)訪問以寫操作為主,而讀操作則集中在最近寫入的數(shù)據(jù)上時(shí)温艇,使用LSM樹可以極大程度地減少磁盤的訪問次數(shù)因悲,加快訪問速度。
RAID勺爱,通過使用RAID 技術(shù)晃琳,實(shí)現(xiàn)數(shù)據(jù)在多塊磁盤上的并發(fā)讀寫和數(shù)據(jù)備份。
RAID 技術(shù)在傳統(tǒng)關(guān)系數(shù)據(jù)庫及文件系統(tǒng)中應(yīng)用比較廣泛琐鲁,但是在大型網(wǎng)站比
較喜歡使用的NoSQL? 以及分布式文件系統(tǒng)中卫旱,RAID 技術(shù)卻遭到冷落。
高可用性優(yōu)化
4個(gè)9也就是一年中大約最多53 分鐘不可用围段。
主要手段是數(shù)據(jù)和服務(wù)的冗余備份及失效轉(zhuǎn)移誊涯。
分級管理,部署隔離蒜撮。
超時(shí)設(shè)置暴构。
異步調(diào)用。
服務(wù)降級段磨。
冪等性設(shè)計(jì)取逾。
CAP 原理認(rèn)為,一個(gè)提供數(shù)據(jù)服務(wù)的存儲系統(tǒng)無法同時(shí)滿足數(shù)據(jù)一致性
(Consistency)苹支、數(shù)據(jù)可用性(Availibility )砾隅、分區(qū)耐受性即可擴(kuò)展性(Patition Tolerance? 系統(tǒng)具有跨網(wǎng)絡(luò)分區(qū)的伸縮性)這三個(gè)條件。
通常我們必須去保證A可用性和P擴(kuò)展性债蜜,某種程度上放棄C一致性晴埂。
數(shù)據(jù)最終一致性究反,這是數(shù)據(jù)一致性中較弱的一種,數(shù)據(jù)可能不一致儒洛,但經(jīng)過一段時(shí)間的自我恢復(fù)和修正精耐,數(shù)據(jù)達(dá)到最終一致。
數(shù)據(jù)備份琅锻,冷備和熱備卦停。熱備又分同步熱備和異步熱備。
失效轉(zhuǎn)移操作由三部分組成:失效確認(rèn)恼蓬、訪問轉(zhuǎn)移惊完、數(shù)據(jù)恢復(fù)。
伸縮性優(yōu)化
實(shí)現(xiàn)負(fù)載均衡的基礎(chǔ)技術(shù):
- HTTP 重定向
這種負(fù)載均衡方案的優(yōu)點(diǎn)是比較簡單处硬。缺點(diǎn)是瀏覽器需要兩次請求服務(wù)器才能完成
一次訪問小槐,性能較差;重定向服務(wù)器自身的處理能力有可能成為瓶頸荷辕,整個(gè)集群的伸縮
性規(guī)模有限本股;使用HTTP302 響應(yīng)碼重定向,有可能使搜索引擎判斷為SEO 作弊桐腌,降低搜
索排名。因此實(shí)踐中使用這種方案進(jìn)行負(fù)載均衡的案例并不多見苟径。 - DNS 域名解析負(fù)載均衡
事實(shí)上案站,大型網(wǎng)站總是部分使用DNS 域名解析,利用域名解析作為第一級負(fù)載均衡
手段棘街,即域名解析得到的一組服務(wù)器并不是實(shí)際提供Web 服務(wù)的物理服務(wù)器蟆盐,而是同樣
提供負(fù)載均衡服務(wù)的內(nèi)部服務(wù)器,這組內(nèi)部負(fù)載均衡服務(wù)器再進(jìn)行負(fù)載均衡遭殉,將請求分
發(fā)到真實(shí)的Web 服務(wù)器上石挂。 - 反向代理負(fù)載均衡
- IP 負(fù)載均衡
- 數(shù)據(jù)鏈路層負(fù)載均衡
這種數(shù)據(jù)傳輸方式又稱作三角傳輸模式,負(fù)載均衡數(shù)據(jù)分發(fā)過程中不修改IP 地址险污,
只修改目的mac 地址痹愚,通過配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬IP 和負(fù)載均衡服務(wù)器
IP 地址一致,從而達(dá)到不修改數(shù)據(jù)包的源地址和目的地址就可以進(jìn)行數(shù)據(jù)分發(fā)的目的
是目前大型網(wǎng)站使用最廣的一種負(fù)載均衡手段蛔糯。在Linux 平臺上最好的鏈路層負(fù)載均衡開源產(chǎn)品是LVS ( Linux Virtual Server )拯腮。
分布式緩存
一致性哈希
計(jì)算機(jī)領(lǐng)域有句話:計(jì)算機(jī)的任何問題都可以通過增加一個(gè)虛擬層來解決。
蚁飒。那么在實(shí)踐中动壤,一臺物理服務(wù)器虛擬為多少個(gè)虛擬服務(wù)器節(jié)點(diǎn)合適呢?太多會影響
性能淮逻,太少又會導(dǎo)致負(fù)載不均衡琼懊,一般說來阁簸,經(jīng)驗(yàn)值是150,當(dāng)然根據(jù)集群規(guī)模和負(fù)載均
衡的精度需求哼丈,這個(gè)值應(yīng)該根據(jù)具體情況具體對待启妹。
關(guān)系型數(shù)據(jù)庫
使用開源中間件,如Cobar削祈。原理是在數(shù)據(jù)庫之上又加了一層翅溺。是一個(gè)分布式數(shù)據(jù)庫的訪問代理。
當(dāng)前分布式數(shù)據(jù)庫無法解決的問題是髓抑,無法跨庫Join咙崎,更無法實(shí)現(xiàn)跨庫事務(wù)。
所以需要從業(yè)務(wù)上避免分布式數(shù)據(jù)庫的缺點(diǎn):避免事務(wù)或者利用事務(wù)補(bǔ)償機(jī)制代替數(shù)據(jù)庫事務(wù)吨拍。分解數(shù)據(jù)訪問邏輯避免Join操作褪猛。
還有一類分布式數(shù)據(jù)庫可以支持JOIN 操作執(zhí)行復(fù)雜
的SQL 査詢,如GreenPlum? 但是這類數(shù)據(jù)庫的訪問延遲比較大(可以想象羹饰,JOIN 操作
需要在服務(wù)器間傳輸大量的數(shù)據(jù))伊滋, 因此一般使用在數(shù)據(jù)倉庫等非實(shí)時(shí)業(yè)務(wù)中。
NoSql
NoSQL數(shù)據(jù)庫產(chǎn)品都放棄了關(guān)系數(shù)據(jù)庫的兩大重要基礎(chǔ):以關(guān)系代數(shù)為基礎(chǔ)的結(jié)構(gòu)化査詢語言
( SQL ) 和事務(wù)一致性保證(ACID )队秩。而強(qiáng)化其他一些大型網(wǎng)站更關(guān)注的特性:高可用性
和可伸縮性笑旺。
可擴(kuò)展性架構(gòu)
設(shè)計(jì)網(wǎng)站可擴(kuò)展架構(gòu)的核心思想是模塊化,并在此基礎(chǔ)之上馍资,降低模塊間的耦合性筒主,
提高模塊的復(fù)用性。
- 利用分布式消息隊(duì)列降低系統(tǒng)耦合性
- 利用分布式服務(wù)框架鸟蟹,如Dubbo
- 搭建開放平臺建設(shè)網(wǎng)站生態(tài)圈
API接口乌妙,協(xié)議轉(zhuǎn)換,安全建钥,審計(jì)藤韵,路由,流程
安全架構(gòu)
常見攻擊
XSS熊经,跨站點(diǎn)腳本攻擊泽艘。惡意腳本執(zhí)行。
防御:消毒(特殊字符轉(zhuǎn)義)
httponly镐依,防止XSS 攻擊者竊取Cookie悉盆。
注入攻擊,消毒馋吗,預(yù)編譯
CSRF焕盟,跨站點(diǎn)請求偽造。其核心是利用了瀏覽器Cookie 或服務(wù)器Session 策略,盜取用戶身份脚翘。
防御:表單Token灼卢,驗(yàn)證碼,referer check(請求來源檢查)
web應(yīng)用防火墻
ModSecurity
加密
- 單項(xiàng)散列加密
常用的單向散列算法有MD5? SHA 等来农。單向散列算法還有一個(gè)特點(diǎn)就是輸入的任何
微小變化都會導(dǎo)致輸出的完全不同鞋真,這個(gè)特性有時(shí)也會被用來生成信息摘要、計(jì)算具有
高離散程度的隨機(jī)數(shù)等用途沃于。 - 對稱加密
常用的對稱加密算法有DES 算發(fā)涩咖、RC 算法等 - 非對稱加密
非對稱加密的常用算法有RSA 算法
信息過濾
- 文本匹配
正則表達(dá)式的效率一般較差,僅適用于短文本及低并發(fā)場景繁莹。
高并發(fā)時(shí)使用的公幵的算法有很多檩互,基本上都是Trie 樹的變種,空間和時(shí)間復(fù)雜度都比較好
的有雙數(shù)組Trie 算法等咨演。
秒殺系統(tǒng)架構(gòu)
網(wǎng)站如果為秒殺時(shí)的最高并發(fā)訪問量進(jìn)行設(shè)計(jì)部署闸昨,就需要比正常運(yùn)營多得多的服務(wù)器,而這些服務(wù)器在絕大部分時(shí)候都是用不著的薄风,浪費(fèi)驚人饵较。所以網(wǎng)站的秒殺業(yè)務(wù)不能使用正常的網(wǎng)站業(yè)務(wù)流程,也不能和正常的網(wǎng)站交易業(yè)務(wù)共用服務(wù)器遭赂,必須設(shè)計(jì)部署專門的秒殺系統(tǒng)循诉,進(jìn)行專門應(yīng)對。
技術(shù)挑戰(zhàn)
- 對現(xiàn)有網(wǎng)站業(yè)務(wù)沖擊撇他。
如果部署在一起茄猫,稍有不慎全業(yè)務(wù)癱瘓。 - 高并發(fā)下的應(yīng)用逆粹、數(shù)據(jù)庫負(fù)載。
- 突然增加的網(wǎng)絡(luò)及服務(wù)器帶寬
- 直接下單
下單頁面也是一個(gè)普通的URL, 如果得到這個(gè)URL炫惩, 不用等到秒殺開始就可以下單了僻弹。
應(yīng)對策略
- 獨(dú)立部署
2衅枫,秒殺產(chǎn)品頁面靜態(tài)化
使其不需要經(jīng)過web服務(wù)器和數(shù)據(jù)庫服務(wù)器房午。
3,租借秒殺活動(dòng)帶寬 - 動(dòng)態(tài)生成隨機(jī)下單頁面URL
為了避免用戶直接訪問下單頁面URL. 需要將該URL 動(dòng)態(tài)化逃魄,即使秒殺系統(tǒng)的開發(fā)
者也無法在秒殺開始前訪問下單頁面的URL. 辦法是在下單頁面URL 加入由服務(wù)器端生
成的隨機(jī)數(shù)作為參數(shù)筋蓖,在秒殺開始的時(shí)候才能得到卸耘。
架構(gòu)設(shè)計(jì)
- 如何控制秒殺按鈕的點(diǎn)亮
解決辦法是使用JavaScript 腳本控制,在秒殺商品靜態(tài)頁面中加入一個(gè)JavaScript 文
件引用粘咖,該JavaScript 文件中加入秒殺是否開始的標(biāo)志和下單頁面URL 的隨機(jī)數(shù)參數(shù)蚣抗,
當(dāng)秒殺開始的時(shí)候生成一個(gè)新的JavaScript 文件并被用戶瀏覽器加載,控制秒殺商品頁面
的展示瓮下。這個(gè)javaScript 文件使用隨機(jī)版本號翰铡,并且不被瀏覽器钝域、CDN 和反向代理服務(wù)
器緩存。
2锭魔,只允許用戶的第一個(gè)下單請求到達(dá)服務(wù)器
并且服務(wù)器接收到的單量超過設(shè)定值后例证,其他的請求直接秒殺結(jié)束。
如果服務(wù)器出錯(cuò)迷捧,直接秒殺結(jié)束頁面织咧。
經(jīng)驗(yàn)教訓(xùn)
寫日志導(dǎo)致磁盤滿
- 控制業(yè)務(wù)日志級別warn
- 某些第三方包也會打太多錯(cuò)誤日志,要關(guān)閉
- 自己的業(yè)務(wù)日志和第三方的日志要分開配置
數(shù)據(jù)庫load高
原因:首頁訪問了數(shù)據(jù)庫
- 首頁訪問頻繁漠秋,不要直接訪問數(shù)據(jù)庫
- 首頁最好應(yīng)該做出靜態(tài)的
高并發(fā)下鎖超時(shí)
- 減小粒度
- 謹(jǐn)慎使用
緩存
緩存服務(wù)器宕機(jī)笙蒙,數(shù)據(jù)庫壓力陡增引發(fā)宕機(jī)。
- 緩存服務(wù)器也很重要膛堤,大家普遍不夠重視
應(yīng)用啟動(dòng)不同步引發(fā)故障
原因:應(yīng)用程序Web 環(huán)境使用Apache+JBoss 的模式手趣,用戶請求通過Apache 轉(zhuǎn)
發(fā)JBoss? 在發(fā)布時(shí),Apache 和JBoss 同時(shí)啟動(dòng)肥荔,由于JBoss 啟動(dòng)時(shí)需要加載很多應(yīng)用并
初始化绿渣,花費(fèi)時(shí)間較長,結(jié)果JBoss 還沒有完全啟動(dòng)燕耿,Apache 就已經(jīng)啟動(dòng)完畢開始接收
用戶請求中符,大量請求阻塞在JBoss 進(jìn)程中,最終導(dǎo)致JBoss 崩潰誉帅。除了這種Apache 和JBoss
啟動(dòng)不同步的情況淀散,網(wǎng)站還有很多類似的場景,都需要后臺服務(wù)準(zhǔn)備好蚜锨,前臺應(yīng)用才能
啟動(dòng)档插,否則就會導(dǎo)致故障。
大文件讀寫?yīng)氄即疟P
有幾個(gè)文件非常大亚再,有數(shù)百兆郭膛,讀寫這些大文件一
次需要幾十秒,這段時(shí)間氛悬,磁盤基本被這個(gè)文件操作獨(dú)占则剃,導(dǎo)致其他用戶的文件操作緩慢。
- 大文件和小文件區(qū)分存儲如捅,區(qū)別對待棍现。
架構(gòu)師
架構(gòu)師作為項(xiàng)目組最資深的專業(yè)技術(shù)人員,是項(xiàng)目組開發(fā)測試工程師的前輩镜遣。從架
構(gòu)師的身上己肮,工程師可以看到自己的未來,因此架構(gòu)師在做人做事方面需要嚴(yán)格要求自
己,做好表率朴肺。
關(guān)注人而不是產(chǎn)品
一定要堅(jiān)信:一群優(yōu)秀的人做一件他們熱愛的事窖剑,一定能取得成功。不管過程多么
曲折戈稿,不管外人看來多么不可思議不靠譜西土。
領(lǐng)導(dǎo)的真諦:尋找一個(gè)值得共同奮斗的目標(biāo),營造一個(gè)讓大家都能最大限度
發(fā)揮自我價(jià)值的工作氛圍鞍盗。
沒有懶惰的員工需了,只有沒被激發(fā)出來的激情。所有強(qiáng)迫員工加班的管理者都應(yīng)該為
自己的無能而羞愧般甲。
發(fā)覺人的優(yōu)秀
是事情成就了人肋乍,而不是人成就了事。指望優(yōu)秀的人來幫自己成事敷存,不如做成一件
事讓自己和參與的人都變得優(yōu)秀墓造。
共享美好藍(lán)圖
架構(gòu)師要和項(xiàng)目組全體成員共同描繪一個(gè)藍(lán)圖,這個(gè)藍(lán)圖是整個(gè)團(tuán)隊(duì)能夠認(rèn)同的锚烦,
是團(tuán)隊(duì)共同奮斗的目標(biāo)觅闽。
藍(lán)圖應(yīng)該是表述清楚的:產(chǎn)品要做什么、不做什么涮俄、要達(dá)到什么業(yè)務(wù)目標(biāo)蛉拙,都需要
描述清楚。
藍(lán)圖應(yīng)該是形象的:產(chǎn)品能為用戶創(chuàng)造什么價(jià)值彻亲、能實(shí)現(xiàn)什么樣的市場目標(biāo)孕锄、產(chǎn)品
最終會長什么樣,都需要形象地想象出來苞尝。
藍(lán)圖應(yīng)該是簡單的:不管內(nèi)部還是外部溝通畸肆,都能一句話說明白:我們在做什么。
藍(lán)圖應(yīng)該寫在軟件架構(gòu)設(shè)計(jì)文檔的扉頁宙址、寫在郵件的簽名檔轴脐、寫在內(nèi)部即時(shí)通信群
的公告上。
在項(xiàng)目過程中曼氛,架構(gòu)師要保持對目標(biāo)藍(lán)圖的關(guān)注豁辉,對任何偏離藍(lán)圖的設(shè)計(jì)和決定保持警惕令野,錯(cuò)誤的偏離要及時(shí)修正舀患,必要的變更要經(jīng)過大家討論,并且需要重新獲得大家
的認(rèn)同气破。
共同參與架構(gòu)
架構(gòu)師需要對系統(tǒng)架構(gòu)負(fù)責(zé)聊浅,但并不是說一定要架構(gòu)師自己完成架構(gòu)設(shè)計(jì),并要項(xiàng)
目團(tuán)隊(duì)嚴(yán)格遵守架構(gòu)決策。
把架構(gòu)和架構(gòu)師凌駕于項(xiàng)目和項(xiàng)目組之上低匙,只會讓架構(gòu)師變成孤家寡人旷痕,讓架構(gòu)曲
局和寡。
- 不要只有架構(gòu)師一個(gè)人擁有架構(gòu)
- 讓其他人維護(hù)框架與架構(gòu)文檔
學(xué)會妥協(xié)
不要企圖在項(xiàng)目中證明自己是正確的顽冶,一定要記住欺抗,你是來做軟件的,不是來當(dāng)老
大的强重。所以不要企圖去證明自己了不起绞呈,永遠(yuǎn)也別干這種浪費(fèi)時(shí)間、傷害感情的事
很多時(shí)候间景,對架構(gòu)和技術(shù)方案的反對意見佃声,其實(shí)意味著架構(gòu)和技術(shù)方案被關(guān)注、被
試圖理解和接受倘要。架構(gòu)師不應(yīng)該對意見過于敏感圾亏,這時(shí)架構(gòu)師應(yīng)該做的是坦率地分享自
己的設(shè)計(jì)思路,讓別人理解自己的想法并努力理解別人的想法封拧,求同存異志鹃。
對于技術(shù)細(xì)節(jié)的爭論應(yīng)該立即驗(yàn)證而不是繼續(xù)討論,當(dāng)討論深入到技術(shù)細(xì)節(jié)的時(shí)候
也意味著問題已經(jīng)收斂哮缺,對于整體架構(gòu)設(shè)計(jì)弄跌,各方意見正趨于一致。
而當(dāng)大家不再討論架構(gòu)的時(shí)候尝苇,表明架構(gòu)已經(jīng)融入到項(xiàng)目铛只、系統(tǒng)和開發(fā)者中了,架
構(gòu)師越早被項(xiàng)目組遺忘糠溜,越表示架構(gòu)非常成功淳玩;項(xiàng)目組越離不開架構(gòu)師,越表示架構(gòu)還
有很多缺陷非竿。
成就他人
架構(gòu)師作為團(tuán)隊(duì)的技術(shù)領(lǐng)導(dǎo)者蜕着,在項(xiàng)目過程中不要去試圖控制什么,帶著一個(gè)彈性
的計(jì)劃和藍(lán)圖推進(jìn)红柱,團(tuán)隊(duì)會管好他們自己承匣。你越是強(qiáng)加禁令,隊(duì)伍就越是沒有紀(jì)律锤悄;你
越是強(qiáng)制韧骗,團(tuán)隊(duì)就越是不能獨(dú)立自主;你越是從外面尋找?guī)椭憔郏蠹揖驮绞菦]有信心袍暴。
發(fā)現(xiàn)問題些侍,尋找突破
其實(shí)即使是在一流的技術(shù)團(tuán)隊(duì)里,也一定有數(shù)不清的問題政模,只是人們習(xí)慣了這些問
題岗宣,以至于無視它們的存在。正所謂“魚是最后一個(gè)看見水的”淋样,天天面對這些問題耗式,反
而不覺得有什么問題。
提出問題趁猴,尋求支持
問題被發(fā)現(xiàn)纽什,它只是問題發(fā)現(xiàn)者的問題,而不是問題擁有者的問題躲叼,如果想要解決一個(gè)問題芦缰,就必須提出這個(gè)問題,讓問題的擁有者知道問題的存在枫慷。
找對關(guān)鍵人
- 把“我的問題”表述成“我們的問題”
- 給上司提封閉式問題让蕾,給下屬提開放式問題
不要問上司“你覺得該怎么辦?”這種沒有建設(shè)性的開放式問題或听,給上司
提問題是希望能夠得到他的支持探孝,而不是帶著一頭霧水等他去指點(diǎn)迷津。公司
付你薪水不是讓你睜著迷茫的眼睛賣萌誉裆。給上司提問應(yīng)該是“你覺得A 和B 兩
個(gè)方案哪個(gè)更好顿颅?”這種封閉式問題。 - 指出問題而不是批評人
如果在合作中出現(xiàn)問題足丢,告訴他問題的存在和緊迫性粱腻,而不是責(zé)問他為什
么出現(xiàn)問題。 - 用贊同的方式提出問題
所謂直言有諱是指想要表達(dá)的意圖要直截了當(dāng)說明白斩跌,不要兜圈子绍些,但是
在表達(dá)方式上要有所避諱,照顧到當(dāng)事人的感受耀鸦。
解決問題柬批,達(dá)成績效
在解決我的問題之前,先解決你的問題
先解決別人的問題有幾個(gè)好處:
你幫別人解決了問題袖订,禮尚往來氮帐,別人也會幫你解決問題。
在幫別人解決問題的過程中洛姑,熟悉了情況上沐,后面解決自己的問題也就得
心應(yīng)手了。
解決別人的問題時(shí)使用的是你的解決方案吏口,這個(gè)方案在你的控制之中奄容,
將來往這個(gè)方案里再塞一些東西解決自己的問題,手到擒來产徊。適當(dāng)?shù)奶颖軉栴}