涉及到的技術及工具:java,springmvc,ibatis,freemarker,mysql,mongdb,memcached,ehcache,maven。css
一個網站不可能說一開始就是要設計一個可以考慮全部狀況的完美架構,一個成熟的架構都是隨着需求的變化,流量的增高來隨之變化的。html
基本架構:前端
web服務器:ngnix+apache作負載均衡java
技術架構: freemarker+springMVC+ibatis(myIbatis)+memcache+mysqlmysql
這樣的架構通常的網站日均UV在幾萬十幾萬的狀況下,部署個幾臺web機器基本就能夠知足了。程序員
1、隨着流量的增長,首頁想到要優化的就是數據庫web
一、分庫 能夠根據業務模塊的劃分進行分庫,用來減輕單庫壓力。spring
二、分表 對個別數據量很是大的表,進行分表,減小單表數據量,提升查詢速度。sql
三、分庫以後,對於核心數據庫,能夠進行主/從庫處理,將查詢與更新分離,提升插入速度。數據庫
四、梳理業務,對於像動態之類的寫量很是大,寫後並不更新這類特徵的數據,能夠採用mongdb,得到更高的性能和更簡單的業務處理。
數據庫作到這個層面上,基本上就差很少了,新的業務進來,數據庫能夠從容的進行水平擴展。
2、隨着業務漸漸複雜,數據庫又分庫分表,可能有一些業務流程就很是的長,致使應用程序須要去N個庫查詢或者更新N張表,這樣客戶端的響應就很是慢了,這個時候就須要異步登場了。
推薦:JMS,使用activeMQ,這些spring都有很好的實現。
3、緩存服務器,網站有一些基本信息,例如:網站配置信息、登陸用戶信息等等,這類核心數據,差很少每次請求都要去讀取,可是這些數據是不怎麼會變的,每次還要去memcache緩存服務器上去讀取,服務器間通訊也是要時間的,能夠考慮本地緩存。
推薦:EhCach。它是一個純Java的進程內緩存框架,具備快速、精幹等特色。
4、靜態化。網站首頁、還有二級域名首頁等相似首頁性質的頁面,訪問量都比較大,靜態化掉。能夠定時任務幾分鐘生成一次。
推薦:Quartz。開源的做業調度框架。(其實這個一開始就應該集成進去,由於你的網站確定會有相似的定時任務的需求,Quartz是當仁不二的選擇)。
5、靜態文件優化。
一、這個是html和js還有靜態圖片等,這些的優化方案就比較多了,js組件化,按需加載,css sprite等等,前端優化博大精深,這裏就不說了,網上有不少方案,這是一個長期的優化和任務。
二、靜態文件存儲,分佈式文件存儲,開源的解決方案也有不少,MogileFS、HDFS
6、業務解耦。隨着系統愈來愈複雜,它就像一個龐大的機器,全部的功能師都在上面開發,新手,老鳥,不關是誰,除了個別資深程序員和架構師之外,其餘人未必能理解整個系統,很容易形成bug,而發佈就變成了噩夢,只要有我的的功能有問題,整個系統就不能發佈,全部人都得停下來等,形成大量資源浪費,加班嚴重。此階段,必然須要系統拆分,將系統按照業務進行劃分,例如用戶模塊、博客模塊、圖片模塊等等。各個模塊之間經過外部接口進行通信,各個模塊能夠單獨開發單獨部署,互不影響。