成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對一個“老”架構(gòu)的重新思考

J4ck_Chan / 2122人閱讀

摘要:常見的就是,它是一個完整的目錄。的特點(diǎn)是簡單,使用一個中央版本庫。當(dāng)初公司的日均均超過,所以采用的是方案雙機(jī)熱備集群優(yōu)化架構(gòu)圖上是兩主兩從。

前言

五年前,我在CNBLOG寫的一篇文章,《php+mysql下,對網(wǎng)站架構(gòu)方面的一些認(rèn)識(以我維護(hù)的站點(diǎn)為例)》,當(dāng)然,整套架構(gòu)不是做的,而是配合當(dāng)初的運(yùn)維部門,共同完成。那個時候我從入行PHP兩年,對所謂的“架構(gòu)”也是懵懂。只覺得很深奧,很高大上。那時候,架構(gòu)師,那簡直就是神一般的職位。

當(dāng)時,這篇文章被很多站點(diǎn)收錄,諸如:51CTO、CSDN等這樣的大站,也有很多小站。不過文章中,我已經(jīng)去掉了很多的配圖,因?yàn)榭赡苌婕暗桨踩蛩?。在?dāng)時看,架構(gòu)還是蠻不錯的。但是也存在較多問題。

放眼現(xiàn)在,我們可以重新整理這套架構(gòu)

找到可以優(yōu)化的地方

找到替代的方案

需要思考地方

我們先來看下架構(gòu)圖:

從上圖,我們分兩大部分,分析:

左側(cè)的程序代碼同步

右側(cè)的架構(gòu)

如何優(yōu)化

現(xiàn)有做法:

從版本管理工具拉取最新代碼,除去.svn標(biāo)記等文件,同步到生產(chǎn)環(huán)境

svn拉取最新代碼 -> 測試服務(wù)器 -->rsync同步--> 生產(chǎn)環(huán)境

存在的問題:

1、采用svn進(jìn)行版本管理,不利于團(tuán)隊(duì)協(xié)作開發(fā);經(jīng)常會出現(xiàn)修改的文件又被之前的覆蓋了,白做了

2、在項(xiàng)目較大的情況下,所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個類似.svn,這個.svn文件會巨大,
svn是按照文件進(jìn)行比較的,會占用很大資源

進(jìn)一步優(yōu)化:

使用SVN進(jìn)行版本管理,和程序發(fā)布,不方便進(jìn)行測試環(huán)境和生產(chǎn)環(huán)境的代碼區(qū)分,麻煩點(diǎn),可以解決

trunk->tag

trunk的發(fā)布到測試環(huán)境

tag的發(fā)布到生產(chǎn)環(huán)境

tag的程序均是經(jīng)過測試通過的,由trunk合并過來的

最優(yōu)方案:

采用git版本管理工具

svn 與 git 的區(qū)別

最核心的區(qū)別Git是分布式的,而Svn不是分布的。svn必須聯(lián)網(wǎng)進(jìn)行操作。好處是跟其他同事不會有太多的沖突,自己寫的代碼放在自己電腦上,一段時間后再提交、合并,也可以不用聯(lián)網(wǎng)在本地提交。

GIT把內(nèi)容按元數(shù)據(jù)方式存儲,而SVN是按文件。你會發(fā)現(xiàn)有個.svn 這個文件會越來越大。

GIT分支和SVN的分支不同。分支在svn中并不突出。常見的就是branch,它是一個完整的目錄。而git的特征就是分支。

SVN的特點(diǎn)是簡單,使用一個中央版本庫。

Git的對分支和合并有更好的支持,這是開發(fā)者最關(guān)心的。

具體做法:

1、建立兩個分支:master 和 develop
2、master用于生產(chǎn)環(huán)境,develop用戶測試環(huán)境。
3、master分支禁止被提交(commit、push),只準(zhǔn)從develop或hotfix(線上bug)合并而來。
4、服務(wù)器上寫一個shell腳本,用來做兩件事,一是拉取最新代碼,而是rsync同步代碼

剩下的是團(tuán)隊(duì)成員開發(fā)協(xié)作、以及發(fā)布流程相關(guān)問題。

1、如何協(xié)作開發(fā)?參考這篇文章 Git 在團(tuán)隊(duì)中的最佳實(shí)踐--如何正確使用Git Flow,寫的很不錯。很多公司在此基礎(chǔ)上進(jìn)行優(yōu)化和改進(jìn)

2、發(fā)布流程,我這里草擬了一份,增加了一個pre_product預(yù)發(fā)布分支??赡茉谀愎揪筒贿m合,請酌情調(diào)整。

我們用的是Teambition項(xiàng)目管理工具,可以新建個TAB,如:opend、working on、pull request、review、

merged、done。任務(wù)有技術(shù)負(fù)責(zé)人下發(fā),成員認(rèn)領(lǐng)開發(fā)。

代碼審查

你Google一下Code Reivew這個關(guān)鍵詞,你就會發(fā)現(xiàn)Code Review的好處基本上是不存在爭議的,有很多很多的文章和博文都在說Code Review的重要性,怎么做會更好,而且很多公司在面試過程中會加入“Code Review”的問題。

但是,我們經(jīng)常會遇到這種情況:

1)工期壓得太緊,時間連coding都不夠,以上線為目的,

2)需求老變,代碼的生命周期太短。所以,寫好的代碼沒有任何意義,爛就爛吧,反正與績效無關(guān)。

其實(shí),我認(rèn)為這是很不負(fù)責(zé)任的。后面,我們會用大量時間來解決之前本不該發(fā)生的問題。

架構(gòu)優(yōu)化

LVS部分可以使用nginx的反向代理去實(shí)現(xiàn),道理與LVS相同。用戶請求到代理服務(wù)器,nginx代理服務(wù)器分發(fā)請求到后端WEB,我找了個圖,方便大家去理解

nginx特點(diǎn)

nginx性能好,承擔(dān)高的負(fù)載壓力且穩(wěn)定,可以負(fù)載超過1萬的并發(fā)。

工作在網(wǎng)絡(luò)的7層之上,可以針對http應(yīng)用做一些分流的策略,比如針對域名、目錄結(jié)構(gòu);

Nginx對網(wǎng)絡(luò)的依賴比較小;

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

Nginx對請求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載;

LVS的特點(diǎn)

抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生;

配置性比較低,這是一個缺點(diǎn)也是一個優(yōu)點(diǎn),因?yàn)闆]有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率;

工作穩(wěn)定,自身有完整的雙機(jī)熱備方案;

無流量,保證了均衡器IO的性能不會收到大流量的影響;

LVS需要向IDC多申請一個IP來做Visual IP,因此需要一定的網(wǎng)絡(luò)知識,所以對操作人的要求比較高;

具體看你的業(yè)務(wù)情況,使用nginx或者lvs。當(dāng)初公司的日均PV均超過100W,所以采用的是LVS方案+雙機(jī)熱備

集群優(yōu)化

架構(gòu)圖上是兩主兩從MMM (Master-Masterreplication manager for MySQL)。其實(shí)很長情況下,是一主三從模式。只有在master1宕機(jī)的情況下,才啟用master2。

主從復(fù)制

MySQL復(fù)制基于主服務(wù)器在二進(jìn)制日志中跟蹤所有對數(shù)據(jù)庫的更改(更新、刪除等等)。因此,要進(jìn)行復(fù)制,必須在主服務(wù)器上啟用二進(jìn)制日志。

每個從服務(wù)器從主服務(wù)器接收主服務(wù)器已經(jīng)記錄到其二進(jìn)制日志的保存的更新,以便從服務(wù)器可以對其數(shù)據(jù)拷貝執(zhí)行相同的更新。

從架構(gòu)圖中我們可以分析,在大并發(fā)量較大的情況下,會出現(xiàn)主從復(fù)制延遲這種問題,如何解決?目前已經(jīng)有了比較成熟的方案。

主從復(fù)制原理圖

步驟1: 所有數(shù)據(jù)更新都會被主庫記錄到主庫的二進(jìn)制日志。

步驟2: 與此同時從庫的IO線程會從主庫上讀取二進(jìn)制日志,寫入到從庫的中繼日志上。

步驟3: 從庫的SQL線程讀取中繼日志上的內(nèi)容來更新從庫。

造成延遲的原因

1、并發(fā)較大的情況下,master產(chǎn)生的DDL和DML數(shù)量大于salve的可接受數(shù)。從庫的Slave_SQL_Running是單線程作業(yè),不能并發(fā)執(zhí)行,所以當(dāng)主庫的TPS并發(fā)較高時,就容易產(chǎn)生延遲。

2、slave將主庫的DDL和DML操作在slave實(shí)施。DML和DDL的IO操作是隨即的,不是順序的,成本高很多,還可能可slave上的其他查詢產(chǎn)生lock爭用,所以一個DDL卡主了,需要執(zhí)行10分鐘,那么所有之后的DDL會等待這個DDL執(zhí)行完才會繼續(xù)執(zhí)行,這就導(dǎo)致了延時

如何解決

1、減少slave同步延時的方案就是在架構(gòu)上做優(yōu)化,盡量讓主庫的DDL快速執(zhí)行

2、主庫寫對數(shù)據(jù)安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設(shè)置,而slave則不需要這么高的數(shù)據(jù)安全,完全可以將sync_binlog設(shè)置為0或者關(guān)閉binlog,innodb_flushlog也可以設(shè)置為0來提高sql的執(zhí)行效率

3、使用比主庫更好的硬件設(shè)備作為slave

4、使用mysql5.7 參看 《MySQL 5.7 并行復(fù)制實(shí)現(xiàn)原理與調(diào)優(yōu)》

分庫分表

這篇文章寫的很好,需要好好拜讀

http://www.cnblogs.com/hackxh...

以上是對幾年前的架構(gòu)進(jìn)行可以優(yōu)化的地方

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22299.html

相關(guān)文章

  • 一個架構(gòu)重新思考

    摘要:常見的就是,它是一個完整的目錄。的特點(diǎn)是簡單,使用一個中央版本庫。當(dāng)初公司的日均均超過,所以采用的是方案雙機(jī)熱備集群優(yōu)化架構(gòu)圖上是兩主兩從。 前言 五年前,我在CNBLOG寫的一篇文章,《php+mysql下,對網(wǎng)站架構(gòu)方面的一些認(rèn)識(以我維護(hù)的站點(diǎn)為例)》,當(dāng)然,整套架構(gòu)不是做的,而是配合當(dāng)初的運(yùn)維部門,共同完成。那個時候我從入行PHP兩年,對所謂的架構(gòu)也是懵懂。只覺得很深奧,很高大...

    Crazy_Coder 評論0 收藏0
  • 從JVM角度思考--如何預(yù)估線上環(huán)境機(jī)器資源大小

    摘要:預(yù)估的方式也很簡單,八種基本類型直接帶入字節(jié)大小,對象類型以基本類型為基礎(chǔ)預(yù)估大小?;旧吓_核的機(jī)器就能滿足這次活動。五總結(jié)預(yù)估之后,并非意味著就完全沒問題了,還需要在上線時備好更多機(jī)器,防止意外發(fā)生。 ...

    Worktile 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<