大規模網站架構?你是否熟悉?

大規模網站架構

PHP

facebook,yahoo

Java

taobao,163

Python

google

.NET

MySpace

語言不是可伸縮性的關鍵,架構纔是關鍵

網站架構的目標

高可用性(High Availability)

可伸縮性(Scalability)

高性能(High Performance)

事務

傳統的事務(ACID)

原子性(Atomicity)

一致性(Consistency)

隔離性(Isolation)

持久性(Durability)

CAP原則

Consistency 一致性

Availability 可用性

Partition Tolerance分區耐受性

在任意時刻,只有兩項能同時成立

不要浪費精力可能突破上面限制

新的事務策略-BASE策略

•避免分佈式事務

基本可用(Basically Available)

軟狀態(Soft state)

選擇最終一致(Eventually consistent

數據庫讀寫分離

MySQL Proxy(數據庫讀寫分離)

load balancing

failover

query analysis

R/W Splitting

數據庫Shard

•水平分區

•垂直分區

Sharding vs Partition

 

Sharding

Partition

存儲依賴

可跨越DB

可跨越物理機器

可跨越表空間,不同的物理屬性

不能跨DB存儲

存儲方式

分佈式

集中式

擴展性

Scale Out(橫向擴展,增加便宜設備)

Scale Up(升級設備)

可用性

無單點

存在單點(DB數據本身)

價格

低廉

適中,甚至昂貴

應用場景

web 2.0網站

多數傳統應用

垂直分區

水平分區

 

DAL(數據訪問層)

對應用透明的使用數據庫的水平分區及垂直分區

DAL Proxy(實現1)

DAL API(實現2)

兩種實現方式

•獨立的DAL Proxy服務器

MySQL: Amoeba

PostgreSQL: PL/Proxy (Skype)

DAL API

Java: Hibernate Shard,Ibatis Shard,HiveDB

Python: Pyshards

shard改變數據庫設計

儘量避免join

數據冗餘/反範式

數據冗餘 for shard

shard before

comment(id,blog_id,content)

shard after

comment(id,blog_id,content,user_id)

數據分區策略

水平分區

2 * N(如定單,購買者與網店各一份)

N / n (按日期或ID範圍分區)

hash(N) % n( 按hash分)

查找表

垂直分區

–按功能分(論壇,博客)

消息隊列(MessageQueue)

程序解耦

隔離

消息的可靠傳輸(物理存儲中轉消息)

消息總線

應用場景

耗時操作

郵件發送/短消息發送

日誌

程序解耦(A掛了,但B繼續可以使用)

MQ產品

開源

RabbitMQ(Erlang)

ActiveMQ(JAVA)

商業

IBM MQ

WebLogic MQ

回顧CAP及BASE

負載均衡

DNS負載均衡

反向代理負載均衡

直接路由

......

failover

DNS負載均衡

簡單

缺少靈活性(DNS緩存)

反向代理負載均衡

nginx

HAProxy

apache httpd

LVS(網絡第四層工作)

F5(硬件,四層/七層)

Linux Virtual Server(LVS)

網絡地址轉換(NAT):VS-NAT

IP隧道方式:VS-TUN

直接路由方式:VS-DR

其它工作模式

•Virtual Server via NAT(VS-NAT)

用地址翻譯實現虛擬服務器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP 地址,能對內部進行僞裝;缺點是效率低,因爲返回給請求方的流量經過轉換器。

•Virtual Server via IP Tunneling (VS-TUN)

用IP隧道技術實現虛擬服務器。這種方式是在集羣的節點不在同一個網段時可用的轉發機制,是將IP包封裝在其他網絡流量中的方法。爲了安全的考慮,應該使用隧道技術中的VPN,也可使用租用專線。 集羣所能提供的服務是基於TCP/IP的Web服務、Mail服務、News服務、DNS服務、Proxy服務器等等.

•Virtual Server via Direct Routing(VS-DR)

用直接路由技術實現虛擬服務器。當參與集羣的計算機和作爲控制管理的計算機在同一個網段時可以用此法,控制管理的計算機接收到請求包時直接送到參與集羣的節點。優點是返回給客戶的流量不經過控制主機,速度快開銷少。

高可用性

使用雙機熱備

故障時切換至備份機

工具(Linux-HA)

heartbeat

緩存

讓數據更靠近用戶

本地緩存

節點有狀態,狀態更新需要同步至其它服務器

可以使用組播方式通知數據改變

需要通知的服務器過多會存在性能問題

比遠程緩存更高性能

慎用,不具備可伸縮性

Share Nothing Architecture

•無共享架構

數據緩存(memchched)

動態內容緩存

瀏覽器緩存

分佈式memchched

基本滿足大部分性能要求

動態內容緩存

頁面片段緩存

靜態化內容

反向代理緩存

squid 巨無霸

Varnish

靜態資源分離

img,js,css使用單獨的服務器處理請求

現實網站圖片存儲分析

圖片服務器的域名不同

多臺機器保存相同的圖片(img3,img2子域名)

同一頁面不同圖片隨機生成不同的子域名進行負載均衡

CDN ?

Content Delivery Network

瀏覽器優化

節省帶寬:js,css的靜態gzip壓縮

http header: Content-Encoding: gzip

瀏覽器緩存

http header: Etag,Last-Modified

小圖片,css,js合併

js混淆工具

JSA(推薦)

js壓縮

多個js合併爲一個

可以與ant集成

Session

•cookie(強烈推薦)

集中式session memcached(推薦)

session複製(過多服務器複製存在性能問題)

分佈式文件系統

MogileFS

Automatic file replication

No single point of failure

自動化

總結

CAP原則

BASE策略

異步(MessageQueue)

•數據庫

  數據的水平切分及垂直切分

  數據庫讀寫分離

  避免分佈式事務

  反範式的數據庫設計

•負載均衡

  DNS負載均衡

  反向代理負載均衡

  LVS

緩存

  數據庫緩存

  服務器緩存/頁面緩存/數據緩存/靜態化

  反向代理緩存

Session/Share Nothing Architecture架構

瀏覽器優化

  瀏覽器緩存/CDN/小圖片合併

分佈式文件系統(MogileFS)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章