【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路
學習架構設計思想
以一個網站為例:
網站一開始就是大型的嗎?
我們一開始就設計一個大型網站嗎?
不一定要做到很好,但一定要先做出來。
淘寶發展過程
第一版
一個無名小網站,沒有太多人訪問,一臺服務器就綽綽有余。使用的是Linux+Apache+MySQL+PHP(典型的LAMP)架設普通小型網站,最便捷。一個月完成淘寶第一版。
發展遇到的問題:用戶訪問越來越多,性能越來越差,越來越多的數據導致存儲空間不足。
發展問題一
第一版性能太差,改用java。java核心技術:高并發、網絡編程。應用服務與數據服務分離,拆分成三臺服務器:
應用服務器(處理大量的業務邏輯,需要更快更強大的CPU)
文件服務器(存儲用戶上傳的文件,需要更大的硬盤)
數據庫服務器(數據庫,需要更快的硬盤和更大的內存)
這樣,不同的服務器承擔不同的角色,使得并發處理能力、數據存儲空間得到很大的改善。
發展問題二
隨著用戶逐漸增多,網站有一次挑戰:數據庫壓力太大導致訪問延遲,進而影響整個網站的性能,用戶體驗收到影響。
使用緩存改善性能
應用程序服務器
文件服務器、分布式緩存服務器、數據庫服務器
常用緩存組件:memache,redis
會使用很簡單,要學它的原理,架構,怎樣實現高可用
發展問題三
隨著用戶增多,單一應用服務器能夠處理的請求連接有限。在網站訪問高峰期,應用服務器成為整個網站的瓶頸。
使用服務器集群——改善網站的并發處理能力
負載均衡調度服務器(負責調度) - 應用服務器(本地緩存) - 文件服務器、分布式緩存服務器(遠程分布式緩存)、數據庫服務器
為什么不使用更強的服務器?一臺服務器難以處理。在今天,淘寶的并發量是幾百萬,上千萬。從經濟的角度,使用集群更實惠。
負載均衡的實現方式有哪些?
淘寶用過的技術:
軟件(應用層的負載均衡):Apache Nginx Reverse-proxy pWEB LVS(LVS在IP層,開源免費,性能高于nginx,nginx可處理十萬并發)
硬件:F5
DNS負載均衡(域名到ip地址轉換,一個域名可以對應很多個ip地址)
發展問題4
使用緩存后,大大減輕了數據庫的度壓力,但仍有一部分讀操作(緩存訪問不命中,緩存過期)和全部的寫操作要訪問數據庫,當用戶達到一定規模后,數據庫因為負載壓力過高而成為整個系統的瓶頸。
讀寫分離
將并發壓力分流。
增加數據訪問模塊(自己研發的),也可以在MyBatis中開發插件,或者mycat(服務端代理模式),sharding-jdbc(客戶端模式)
發展問題5
用戶規模越來越大,發布地獄越來越廣,地域網絡環境差別很大,如何保證用戶的訪問體驗,不至于因為訪問慢而流失用戶。
使用反向代理服務器,和CDN服務器。
CDN是內容分發網絡,原理是緩存。各大電信運營商服務器上存放的數據中心。
好處:加快用戶訪問速度,減輕后端服務器壓力。
發展問題6
單文件服務器、單數據服務器存不下日益增長的數據
使用分布式文件系統和分布式數據庫系統(分庫分表)
適合存儲小文件、圖片的分布文件系統LFastDFS,TFS
數據訪問模塊:mycat,sharing-jdbc
發展問題7
隨著業務的發展,數據的存儲需求和檢索需求越來越復雜。存儲的字段差異很大,整張表不是所有的數據都會用到(形成骷髏表),需要復雜的文本檢索。
使用NoSQL數據庫、搜索引擎服務器
搜索引擎用什么?lucene, solr, elasticsearch
NoSQL數據庫用什么?mongodb, elasticsearch
發展問題8
網站越做越好,業務不斷擴大,越來越復雜,應用程序變得無比龐大,迭代周期越來越快,牽一發兒動全身,怎么應對快速的業務發展需要?
進行業務拆分:拆分成很多子系統。
如,淘寶將首頁、商鋪、訂單、買家等拆分成不同的產品線,分歸不同的團隊負責,分成不同的應用,獨立部署。通過連接、MQ、數據存儲系統建立關聯。
消息隊列MQ:RabbitMQ,ActiveMQ,Kafla
一些開源免費的組件不足以滿足業務的需要。
工作會是開發中間件,開發MQ,自己搞一套,而不是寫簡單的業務代碼。
發展問題9
業務規模不斷增大,應用拆分越來越小,越來越多。應用之間的關系越來越復雜、應用中存在大量相同的業務操作。后端的數據庫要背成千上萬太應用服務器連接,數據庫連接資源不足。
分布式服務(服務化)
如何做服務化?
服務框架:Dubbo,SpringCloud
配置中心:zookeeper,SpringCloud config,disconf百度,config-toolkit當當,diamond阿里
發展問題10
數據挖掘、分析、推薦等業務需求,龐大系統的監控、問題分析等需求
大數據技術、監控、日志分析系統
集中式日志分析系統、監控系統服務器、大數據系統服務器
比如,如果出現了bug,去找到所有的日志構成完整的數據鏈;成百上千服務器使用監控系統檢測哪臺出現故障
大數據:hadoop,spark
系統監控:zabbix,Elasticsearch+beats+kibana
集中式日志分析系統:ELK
總結
以上是生活随笔為你收集整理的【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】Effective Py
- 下一篇: Java程序员需要掌握的计算机底层知识(