日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二十三期:大规模网站架构?你是否熟悉?

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二十三期:大规模网站架构?你是否熟悉? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大規模網站架構

?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)


閱讀目錄(置頂)(長期更新計算機領域知識)https://blog.csdn.net/weixin_43392489/article/details/102380691

閱讀目錄(置頂)(長期更新計算機領域知識)https://blog.csdn.net/weixin_43392489/article/details/102380882

總結

以上是生活随笔為你收集整理的第二十三期:大规模网站架构?你是否熟悉?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。