成為架構(gòu)師是絕大部分程序員的夢想,當(dāng)然不敢說絕對,因?yàn)橐徊糠殖绦騿T想轉(zhuǎn)行搬磚還有一部分想往管理層發(fā)展莲绰∨趺可是像我們這樣有這良好的職業(yè)操守的程序員怎么可能三心二意呢观堂,自己選的編程跪著也要把代碼敲完。想要成為架構(gòu)師當(dāng)然首先的知道架構(gòu)師需要知道哪些知識呀忧,先來看看活在網(wǎng)上的大牛是怎么說的:
某平臺的一位大牛給大家的建議:
1. 通信協(xié)議
各個(gè)子系統(tǒng)之間要進(jìn)行通信师痕,必須要選擇一種或多種通信協(xié)議,現(xiàn)代比較常見的都是基于HTTP的協(xié)議而账。更早期胰坟,為了追求性能,有過一些基于TCP協(xié)議的實(shí)現(xiàn)泞辐。建議還了解下CORBA等RPC方式笔横。了解更多協(xié)議對于學(xué)習(xí)安全也有很大幫助竞滓,比如MySQL和PostgreSQL的協(xié)議都有安全的設(shè)計(jì)。
2. 序列化
系統(tǒng)之間通過網(wǎng)絡(luò)傳輸吹缔,或者存儲到文件時(shí)虽界,肯定只有一種格式,就是字符串涛菠。要將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)與字符串之間進(jìn)行轉(zhuǎn)換莉御,就需要用到序列化。簡單的序列化如JSON和XML俗冻,稍微復(fù)雜些的有protobuf礁叔、thrift等。需要了解所有這些序列化方式之間的優(yōu)勢和劣勢迄薄。比如JSON和XML只能用于傳遞數(shù)據(jù)琅关,而protobuf與thrift還可以用來做RPC協(xié)議。至少要確保每種序列化方式都自己嘗試過hello world讥蔽。
3. 數(shù)據(jù)庫
要形成自己的數(shù)據(jù)庫選取風(fēng)格涣易,就需要先對自己常用的數(shù)據(jù)庫有足夠深入的了解。對于關(guān)系式數(shù)據(jù)庫冶伞,除了一般的Create新症、Query、Delete响禽、Update操作外徒爹。還需要能自行建立索引,數(shù)據(jù)庫的平行擴(kuò)展芋类,了解如何進(jìn)行性能調(diào)試隆嗅。以及了解常見查詢操作的性能級別,常見的查詢性能瓶頸點(diǎn)侯繁。一個(gè)較好的例子是 "SELECT COUNT(*) FROM table WHERE dt_create-86400>NOW();" 胖喳。
4. 存儲
存儲分為幾種類型。NAS等各家產(chǎn)品有所不同贮竟,大多是通過NFS來訪問的丽焊,這個(gè)不必多講。問題是NAS的價(jià)格很高坝锰,而且在去IOE的趨勢中很多人也不愿意再用粹懒。所以經(jīng)常會有基于文件系統(tǒng)建立小規(guī)模存儲的需求重付。要關(guān)注的點(diǎn)主要就是每個(gè)目錄下的文件數(shù)不應(yīng)該太多顷级,當(dāng)一個(gè)目錄下文件數(shù)(實(shí)際是inode數(shù)量,包括文件和目錄)超過1000時(shí)确垫,性能就很差了弓颈。所以建議的做法是將一個(gè)系統(tǒng)中要存儲的對象ID做16進(jìn)制帽芽,隨后每2位16進(jìn)制做成一級目錄。這樣可以確保每個(gè)目錄下的文件數(shù)不會超過256個(gè)∠杓剑現(xiàn)代云計(jì)算导街,如Amazon S3已經(jīng)把存儲的問題解決的很好了,如果可能纤子,盡量用好搬瑰。
5. 應(yīng)用框架
此事在各個(gè)語言之間各有選擇,多注意了解自己關(guān)注方向的所有框架的優(yōu)勢和劣勢控硼。至少當(dāng)有個(gè)毛頭孩子問你為什么不選擇某個(gè)最新的框架時(shí)泽论,要有自己的觀點(diǎn)來給出明確的答復(fù)。對于常見的框架卡乾,十分推薦自己重新實(shí)現(xiàn)一個(gè)來當(dāng)作鍛煉翼悴。實(shí)現(xiàn)一個(gè)WEB框架,他用了不到200行代碼就實(shí)現(xiàn)了幔妨。
6. 接口
主要是指接口協(xié)議鹦赎,或者RPC協(xié)議。系統(tǒng)之間進(jìn)行RPC調(diào)用很常見误堡,注意選擇個(gè)自己能熟練使用的古话,并且有所深入研究。并了解其常見的限制锁施。RESTful API就是個(gè)比較常見的選擇煞额,但是性能并不好。要自己對性能等參數(shù)有個(gè)量化的了解沾谜,而不是簡單的一句好或不好膊毁。短連接接口在三次握手時(shí)是串行操作,要了解其為何耗時(shí)基跑。
除了要在如上的各種不可或缺的組成部分中有所了解婚温,還要能清楚的知道一些常用系統(tǒng)模塊的原理,并能夠很深入的玩起來媳否。幾個(gè)值得注意的:
1. HTTP服務(wù)器:常見的無非是nginx栅螟、apache,自己要能進(jìn)行基本配置篱竭,包括靜態(tài)文件力图、fastcgi轉(zhuǎn)發(fā)等
2. 關(guān)系式數(shù)據(jù)庫:常見的如mysql、postgresql掺逼、sqlite吃媒,自己要對每一種都有深入的了解。自己要做一遍常見操作的性能測試,并能牢記于心赘那。比如sqlite雖然并不需要走網(wǎng)絡(luò)刑桑,但是實(shí)際查詢性能是很差的。我2008年就發(fā)現(xiàn)其 "<"和">"共同作用的查詢的例子比走網(wǎng)絡(luò)的mysql還慢了幾十倍募舟。
3. NoSQL數(shù)據(jù)庫:memcache祠斧、redis、mongodb等拱礁,近幾年有很多琢锋,挨個(gè)了解下其實(shí)現(xiàn)原理,以及各種常用操作的性能呢灶。當(dāng)有需要時(shí)吩蔑,要隨時(shí)能拿得出手來用。
4. 云計(jì)算平臺:幾種常見的云計(jì)算平臺的應(yīng)用方式要有了解填抬,如Google的資源方式烛芬,和Amazon的VPS方式,每種云計(jì)算平臺往往還會提供一大堆的附加服務(wù)飒责,比如可靠數(shù)據(jù)庫赘娄,存儲,緩存等宏蛉,也要分別有所了解遣臼。
5. 加密/簽名技術(shù):常見如truecrypt、openssl拾并、gnu pg揍堰、sha1、md5嗅义、scrypt等屏歹,了解各種加密/簽名技術(shù)的安全性,字長等之碗,并都能自己做過hello world蝙眶。
一些網(wǎng)上常見的系統(tǒng)服務(wù)形式的架構(gòu)設(shè)計(jì)也要仔細(xì)了解清楚。一般此類系統(tǒng)的開發(fā)人員褪那,往往會通過個(gè)人博客幽纷,或者一些活動的PPT中進(jìn)行講解。仔細(xì)找找會有不少收獲博敬。值得關(guān)注的常見系統(tǒng)架構(gòu)
1. 博客/論壇:博客和論壇有很多友浸,并且各個(gè)網(wǎng)站也都很常用,了解下其原理偏窝,最好自己寫個(gè)練習(xí)下收恢。
2. 微博:Twitter/weibo等武学,涉及到大量的聯(lián)表查詢,需要用多種辦法來優(yōu)化查詢性能派诬。
3. 云計(jì)算:云計(jì)算的幾個(gè)常見平臺的服務(wù)提供方式劳淆,如Google和Amazon的链沼,如果精力夠用最好了解下OpenStack等搭建私有云的方式默赂,總的來說,這是未來的大方向括勺。
4. 視頻播放:在網(wǎng)頁上播放視頻的技術(shù)缆八,包括基于Flash和HTML5的,各種瀏覽器對視頻的兼容性等疾捍,了解通過ffmpeg將一個(gè)視頻轉(zhuǎn)換為標(biāo)準(zhǔn)mp4(HTML5可以播放的)的方式和參數(shù)
5. CDN:了解應(yīng)用CDN的方式奈辰,包括拆分靜態(tài)文件的域名,靜態(tài)文件版本化乱豆,Cookie拆分等相關(guān)技術(shù)
6. OAuth:與其他網(wǎng)站聯(lián)合認(rèn)證的方式奖恰,有多種,分別了解宛裕。
常見的架構(gòu)設(shè)計(jì)陷阱:
1. 用戶認(rèn)證:一開始就應(yīng)該花大精力設(shè)計(jì)好用戶認(rèn)證系統(tǒng)瑟啃,包括不要明文存儲密碼,包括嚴(yán)格限制Cookie和Session的使用揩尸,包括用戶認(rèn)證信息的緩存等蛹屿。如果需要設(shè)計(jì)一個(gè)長期運(yùn)行的大系統(tǒng),強(qiáng)烈建議使用簽名來保證Cookie的不可偽造岩榆,同時(shí)常見信息直接存儲Cookie错负,這樣可以避免每次Request都訪問數(shù)據(jù)庫。
2. 靜態(tài)文件存儲:如果一開始就將靜態(tài)文件與主站內(nèi)容混雜在一起勇边,未來就是個(gè)災(zāi)難犹撒,具體參考CDN的應(yīng)用方式。
以上的知識看起來比較雜亂無章粒褒,就算知道這些知識我該如何的去學(xué)習(xí)去得到這些個(gè)知識點(diǎn)的方法油航;
下面的一個(gè)課程體系為你總結(jié)了所有的知識點(diǎn),而所有的知識七個(gè)月可以學(xué)完怀浆,我知道你可能工作了兩三年不知道該往那個(gè)方向發(fā)展谊囚,想要提升自己也一直沒有門路,想要跳槽也沒有牢固的知識执赡,要加薪卻始終不敢跟老板提镰踏;那么請你用心看完這個(gè)體系圖;
想學(xué)習(xí)交流HashMap,nginx沙合、dubbo奠伪、Spring MVC,分布式、高性能高可用、redis绊率、jvm谨敛、多線程、netty滤否、kafka脸狸、的對于課程有興趣加群:561614305 同時(shí)也可以免費(fèi)獲得下面分享的視頻資料