這很技術丨3分鐘了解Web架構小知識
很多初創的小團隊并沒有架構師,而且就算有,人家講話的時候你一臉懵逼也不合適啊。
一開始你只是參與一個小項目,架構好像對你來說并不是什么重要的事,大家討論下就馬上開發,一臺服務器輕松搞定操作系統+開發語言+應用程序+數據庫。可是,突然有一天你的項目突然由于什么不可知的原因你的項目收到廣泛專注?。?!使用人數激增!??!
于是就很容易涌現各種性能問題、負載問題,如果處理不當也許就錯失風投良機了。。。(就快要成為下一個facebook了?。?/p>
所以,你說架構重不重要!
但是你也許會說,我只是一只產品狗子,做架構有架構師啊~~但是,我要說的是,很多初創的小團隊并沒有架構師,而且就算有,人家講話的時候你一臉懵逼也不合適啊。。。
既然這樣,快點來看看架構的小知識?。?!
(這里講的架構并非傳統產品經理喜歡研究的那種信息架構或者業務架構)
web前端
運行環境:
其實就是提供程序運行環境的Web服務器,可以向瀏覽器等Web客戶端提供文檔文件讓全世界瀏覽和下載。使用最多的 web服務器軟件有兩個:微軟的信息服務器(iis),和Apache。
Facebook采用的技術架構LAMP(Linux、Apache、MySQL、PHP),其中就有Apache。Apache是目前世界使用排名第一的Web服務器軟件,它可以運行在幾乎所有廣泛使用的計算機平臺上。
編碼開發:
這個很容易引起 “哪種編程語言是最好的?”世界之爭。。。大家可以直接看2016編程語言排行榜,但并不代表本主編立場。
值得一提的是,Facebook作為開源第一大廠,自家開發并且開源了HipHop for PHP,(yoyoyo很嘻哈么)這是一個PHP到C++的轉換程序,目的是旨在加速和優化PHP,HipHop for PHP 比純PHP有高一倍的效能,從而大大減少了服務器的需求,流弊啊。。。
類庫框架:
類庫解決代碼或者是模塊級別的復用或者對復雜度的封裝問題??蚣軇t是對模式級別的復用和對程序組織的規范。常用的框架有,Spring Framework (Java開源 J2EE框架)Struts (Java開源 Web框架)Hibernate (Java開源 持久層框架)。
而facebook使用的是Thrift框架,對了,也是他們自己開發的。。。thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 可以在這些編程語言間無縫結合、高效的服務。
負載均衡
硬件負載均衡:
是一種把網絡請求分散到一個服務器集群中的可用服務器上去,通過管理進入的Web數據流量和增加有效的網絡帶寬的硬件設備。能夠直接通過智能交換機實現,處理能力更強,但問題就是:貴!如圖傳說中的f5
軟件負載均衡:
價格低,甚至有免費開源的負載均衡策略,但效果肯定不如硬件,但一般中型網站夠用。目前使用最為廣泛的負載均衡軟件是Nginx、LVS、HAProxy。
數據庫和緩存
數據庫方案:
選擇數據庫需要考慮數據的量級、計算場景和處理數據的頻次來選擇。
facebook使用MySQL、Memcached、Hadoop’s HBase實現持久化。memcached是一套分布式的快取系統通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
分布式存儲服務器
分布式存儲系統,是將數據分散存儲在多臺獨立的設備上。分布式網絡存儲系統采用可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易于擴展。
Facebook用戶所發布的照片數以億計,其存儲由Haystack這個ad-hoc存儲解決方案(由Facebook開發)來處理——包括對其進行低級別優化與只擴展寫入方式。
TAO是Facebook一種用來處理社交圖形信息的分布式數據庫。針對讀取進行優化的數據存儲機制,并以單一地理分布實例的方式部署在Facebook當中。 Tao系統的設計初衷在于為“數PB級別”的龐大數據集提供每秒超過十億次讀取操作。
Facebook擁有超過6萬臺服務器。最近發布的數據中心位于俄勒岡州普賴恩維爾市,硬件完全自行設計,并被歸為Open Compute Project。
源代碼管理和版本控制
源碼管理工具是一種記錄代碼更改歷史,可以無限回溯,用于代碼管理,多個程序員開發協作的工具。幾種常用的有:svn、cvs、hg、git、vss。
作為工程師的天堂(產品經理的火葬場),facebook是這樣做的
- 有非常牢靠的安全體系,以免有人不小心/故意做了些不好的事。
- 每個工程師可以修改facebook的任何代碼,隨時可以遷入。
- 所有的代碼修改都要進行審核(通過一個或多個工程師),但News Feed是個例外,因為太重要了,Zuckerberg會親自review。
- 所有的修改至少要被一個人審核,而且這個系統可以讓任何人很方便地審核其他人的代碼,即使你沒有邀請他。
- 工程師負責測試,代碼修復,和維護自己的項目。
- 運維組是受過嚴格訓練,倍受尊敬,而且有商業意識的。他們的工作包括分析錯誤日志,負載和內存狀態等等。還包括用戶行為。
另外:
- 產品經理與工程師的比例大約為1-7到1-10。
- 濃厚的工程師驅動文化。”產品經理基本可以被忽略”,這是facebook一名員工的話。工程師可以修改流程的細節,重新安排工作任務,隨時植入自己的想法。
- 對于某個特性是否值得開發的爭論,通常是這么解決的:花一個星期的時間完成他,并在小部分人群中(如1%)進行測試。
參考:http://www.yixieshi.com/21053.html
作者:lottelyn江琳。公眾號:這個產品超難用(chaonanyong233),企業級軟件產品經理
本文由 @lottelyn江琳 原創發布于人人都是產品經理。未經許可,禁止轉載。
服務器用什么軟件,服務器硬件,這些都和軟件架構沒關系。
架構師只關注軟件的架構,顧名思義。PM也一樣。
運維有運維的活兒,專業的事交給專業的人員。后端一般不會去涉及運維的。
此外,版本控制是項目經理的事情……
有一些確實是架構的活兒,但有一些沒關系。
分得清楚一點的目的,是至少出了問題,知道去找誰。
你說的這些,說實話沒多大用啊。
知識倒是知識,但感覺不成體系。光是列舉名詞,連我都不知道有什么用處。
而且facebook等等自己研發的框架,沒必要說出來。用戶量少,沒有意義。
說白了,重要的是思想,體系。
MVC框架的內涵是什么?彼此怎么通信,交流?
前后端的連接和通信是怎么通信的,哪些屬于前端,哪些屬于后端,數據庫要怎么設計?
這些才是架構師工作中比較重要的一部分。
而且架構師說白了,也不會負責運營維護這一塊啊。。。。。服務器選擇什么軟件。。這個無所謂啊。架構師不會關注。一般有專業的運維人員。這里真心寫得比較蒙。。。
單獨列舉N多的名詞沒有意義。
產品的火葬場 ?
是不是應該換個題目叫Facebook的XXXX,感覺會誤導人
一臉懵逼啊親
看完真的是一臉懵逼,沒有get到點
什么鬼
EXM??
以為只有我一臉懵逼。
關注了你的公眾號,為什么會講星座學啊。。。。這樣很不專業啊。跟產品有什么關系。。。
一臉懵逼的我。要加油充電了。
只有我是程序轉的產品嗎 ??
產品自學技術+1
求推薦自學材料 ??
產品自學技術+2
求推薦自學材料 ??
網上好多免費視頻,像慕課網,還有實戰訓練的。找正規系統的,從頭看起,跟著裝軟件配環境。先從最簡單的前端看起吧
一臉懵逼的看完了
看不懂
就這也叫web架構?作者你在逗我?
作者只是簡單描述一下 facebook的 基礎架構
咱倆同感,我也是不想一臉懵比,所以買了一本架構的書······于是更是一臉懵比 ??
來點APP的
不是很能看懂………