1. 程式人生 > >阿里P8架構師深度概述分散式架構

阿里P8架構師深度概述分散式架構

簡介

作為一名架構師,我們要專業,要能看懂程式碼,及時光著臂膀去機房,也能獨擋一面!及時同事搞不定問題,或者撂挑子,你也能給老大一個堅定的眼神:不怕,有我在!還能在會議室上滔滔不絕,如若無人,讓不懂技術的妹子看你時眼神迷離,就好想落霞與孤鶩齊飛!

分散式架構是一個非常複雜的體系,任何技術都不是孤立的存在,任何技術都無法適應所有場景。作為一名分散式系統架構或者資深研發人員,我們必須儘可能多的學習與之相關的各種知識,掌握各種技術的演進路線,正式從一名碼農蛻變成為架構師

什麼是分散式?

網際網路應用的特點是:高併發,海量資料。網際網路應用的使用者數是沒有上限的(取決於其開放特性),這也是和傳統應用的本質區別。高併發指系統單位時間內收到的請求數量(取決於使用的使用者數),沒有上限。海量資料包括:海量資料的儲存和海量資料的處理。這兩個工程難題都可以使用分散式系統來解決。

簡單理解,分散式系統就是把一些計算機通過網路連線起來,然後協同工作。協同工作需要解決兩個問題:

1)任務分解

把一個問題拆解成若干個獨立任務,每個任務在一臺節點上執行,實現多工的併發執行。

2)節點通訊

節點之間互相通訊,需要設計特定的通訊協議來實現。協議可以採用RPC或Message Queue等方式。

 

 

 

 

分散式和叢集的關係

分散式:一個業務分拆多個子業務,部署在不同的伺服器上

叢集:同一個業務,部署在多個伺服器上

計算機發展歷史

1946年情人節(2.14) , 世界上第一臺電子數字計算機誕生在美國賓夕法尼亞大學大學,它的名字是:ENIAC; 這臺計算機佔地170平米、重達30噸,每秒可進行5000次加法運算。

第一臺電子計算機誕生以後,意味著一個日新月異的IT時代的到來。一方面單臺計算機的效能每年都在提升:從最早的8位CPU到現在的64位CPU;從早期的MB級記憶體到現在的GB級別記憶體;從慢速的機械儲存到現在的固態SSD硬碟儲存。

|

tips: 電子計算機的問世,最重要的奠基人是英國科學家艾蘭· 圖靈(Alan Turing)和美籍匈牙利科學家馮· 諾依曼(John Von· Neumann)。圖靈的貢獻是建立了圖靈機的理論模型,奠定了人工智慧的基礎。而馮· 諾依曼則是首先提出了計算機體系結構的設想。

經典理論-馮.諾依曼體系:計算機硬體由運算器、控制器、儲存器、輸入裝置、輸出裝置五大部分組成。直到今天,計算機仍沒有跳出該體系的範疇。

 

 

 

 

ENIAC之後,電子計算機便進入了IBM主導的大型機時代,IBM大型機之父吉恩.阿姆達爾被認為是有史以來最偉大的計算機設計師之一。1964年4月7日,在阿姆達爾的帶領下,歷時三年,耗費50億美元,第一臺IBM大型機SYSTEM/360誕生。這使得IBM在20實際50~60年代統治整個大型計算機工業,奠定了IBM計算機帝國的江山。

2.1 IBM大型機曾支撐美國航天登月計劃

2.2 IBM主機一直服務於金融等核心行業的關鍵領域

由於高可靠性和超強的計算能力,幾遍在X86和雲端計算飛速發展的情況下,IBM的大型機依然牢牢佔據著一定的高階市場份額

20世紀80年代,在大型機霸主的時代,計算機架構同時向兩個方向發展

以X86 CPU為架構的價格便宜的面向個人的PC

以RISC CPU為架構的價格昂貴的面向企業的小型UNIX伺服器

分散式架構發展的里程碑

大型主機的出現。憑藉著大型機超強的計算和I/O處理能力、穩定性、安全性等,在很長一段時間內,大型機引領了計算機行業及商業計算領域的發展。

而集中式的計算機系統架構也成為了主流。

隨著計算機的發展,這種架構越來越難以適應人們的需求,比如說

由於大型主機的複雜性,導致培養一個能夠熟練運維大型主機的人的成本很高

大型主機很貴,一般只有土豪(政府、金融、電信)才能用得起

單點問題,一臺大型主機出現故障,那麼整個系統將處於不可用狀態。而對於大型機的使用群體來說,這種不可用導致的損失是非常大的

科技在進步,技術在進步。PC機效能不斷提升,很多企業放棄大型機改用小型機及普通PC來搭建系統架構

阿里巴巴在2009年發起了一項"去IOE"運動

當初指的是IBM小型機、Oracle資料庫、EMC的高階儲存

2009年“去IOE”戰略透露,到2013年5月17日最後一臺IBM小型機在支付寶下線。

為什麼要去IOE?

阿里巴巴過去一直採用的是Oracle資料庫,並利用小型機和高階儲存裝置提供高效能的資料處理和儲存服務。隨著業務的不斷髮展,資料量和業務量呈爆發性增長,傳統的集中式Oracle資料庫架構在擴充套件性方面遭遇瓶頸。

傳統的商業資料庫軟體(Oracle,DB2),多以集中式架構為主,這些傳統資料庫軟體的最大特點就是將所有的資料都集中在一個數據庫中,依靠大型高階裝置來提供高處理能力和擴充套件性。集中式資料庫的擴充套件性主要採用向上擴充套件(Scale up)的方式,通過增加CPU,記憶體,磁碟等方式提高處理能力。這種集中式資料庫的架構,使得資料庫成為了整個系統的瓶頸,已經越來越不適應海量資料對計算能力的巨大需求

架構的發展演變過程

一個成熟的大型網站系統架構並不是一開始就設計的非常完美,也不是一開始就具備高效能、高可用、安全性等特性,而是隨著使用者量的增加、業務功能的擴充套件逐步完善演變過來的。在這個過程中,開發模式、技術架構等都會發生非常大的變化。而針對不同業務特徵的系統,會有各自的側重點,比如像淘寶這類的網站,要解決的是海量商品搜尋、下單、支付等問題;像騰訊,要解決的是數億級別使用者的實時訊息傳輸;百度所要解決的是海量資料的搜尋。每一個種類的業務都有自己不同的系統架構。我們簡單模擬一個架構演變過程。

什麼是大型網站

如何定義一個網站是不是大型網站,一般我們會從兩個緯度去考衡,訪問量以及資料量,二者缺一不可。

我們以javaweb為例,來搭建一個簡單的電商系統,從這個系統中來看系統的演變歷史;要注意的是,接下來的演示模型,關注的是資料量、訪問量提升,網站結構發生的變化, 而不是具體關注業務功能點。其次,這個過程是為了讓大家更好的瞭解網站演進過程中的一些問題和應對策略。

假如我們系統具備以下功能:

使用者模組:使用者註冊和管理

商品模組:商品展示和管理

交易模組:建立交易及支付結算

階段一 , 單應用架構

 

 

 


給大家推薦一個程式設計師學習群:863621962。群裡有分享的視訊,還有思維導圖
群公告有視訊,都是乾貨的,你可以下載來看。主要分享分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊。

網站的初期也可以認為是網際網路發展的早起,我們經常會在單機上跑我們所有的程式和軟體。

把所有軟體和應用都部署在一臺機器上,這樣就完成一個簡單系統的搭建,這個時候的講究的是效率

階段二,應用伺服器和資料庫伺服器分離

隨著網站的上線,訪問量逐步上升,伺服器的負載慢慢提高,在伺服器還沒有超載的時候,我們應該做好規劃,提升網站的負載能力。假如程式碼層面的優化已經沒辦法繼續提高,在不提高單臺機器的效能,增加機器是一個比較好的方式,投入產出比非常高。這個階段增加機器的主要目的是講web伺服器和資料庫伺服器拆分,這樣不僅提高了單機的負載能力,也提高了容災能力

 

 

 

 

階段三,應用伺服器叢集-應用伺服器負載告警,如何讓應用伺服器走向叢集

隨著訪問量的繼續增加,單臺應用伺服器已經無法滿足需求。在假設資料庫伺服器還沒有遇到效能問題的時候,我們可以增加應用伺服器,通過應用伺服器叢集將使用者請求分流到各個伺服器中,從而繼續提升負載能力。此時多臺應用伺服器之間沒有直接的互動,他們都是依賴資料庫各自對外提供服務

 

 

架構發展到這個階段,各種問題也會慢慢呈現

使用者請求由誰來轉發到具體的應用伺服器

使用者如果每次訪問到的伺服器不一樣,那麼如何維護session

 

 

 

 

階段四,資料庫壓力變大,資料庫讀寫分離

架構演變到這裡,並不是終點。上面我們把應用層的效能拉上來了,但是資料庫的負載也在慢慢增大,那麼怎麼去提高資料庫層面的負載呢?有了前面的思路以後,自然會想到增加伺服器。但是假如我們單純的把資料庫一分為二,然後對於後續資料庫的請求,分別負載到兩臺資料庫伺服器上,那麼一定會造成資料庫不統一的問題。所以我們一般先考慮讀寫分離的方式

 

 

 

 

這個架構的變化會帶來幾個問題

主從資料庫之間的資料同步 ; 可以使用mysql自帶的master-slave方式實現主從複製

對應資料來源的選擇 ; 採用第三方資料庫中介軟體,例如mycat

階段五,使用搜索引擎緩解讀庫的壓力

資料庫做讀庫的話,嚐嚐對模糊查詢效率不是特別好,像電商類的網站,搜尋是非常核心的功能,即便是做了讀寫分離,這個問題也不能有效解決。那麼這個時候就需要引入搜尋引擎了

使用搜索引擎能夠大大提高我們的查詢速度,但是同時也會帶來一些附加的問題,比如維護索引的構建。

 

 

 

 

階段六,引入快取機制緩解資料庫的壓力

隨著訪問量的持續增加,逐漸出現許多使用者訪問統一部分內容的情況,對於這些熱點資料,沒必要每次都從資料庫去讀取,我們可以使用快取技術,比如memcache、redis來作為我們應用層的快取;另外在某些場景下,比如我們對使用者的某些IP的訪問頻率做限制,那這個放記憶體中又不合適,放資料庫又太麻煩,這個時候可以使用Nosql的方式比如mongDB來代替傳統的關係型資料庫

 

 

 

 

階段七,資料庫的水平/垂直拆分

我們的網站演進的變化過程,交易、商品、使用者的資料都還在同一個資料庫中,儘管採取了增加快取,讀寫分離的方式,但是隨著資料庫的壓力持續增加,資料庫的瓶頸仍然是個最大的問題。因此我們可以考慮對資料的垂直拆分和水平拆分

垂直拆分:把資料庫中不同業務資料拆分到不同的資料庫

 

 

 

 

水平拆分:把同一個表中的資料拆分到兩個甚至跟多的資料庫中,水平拆分的原因是某些業務資料量已經達到了單個數據庫的瓶頸,這時可以採取講表拆分到多個數據庫中

階段八,應用的拆分

隨著業務的發展,業務越來越多,應用的壓力越來越大。工程規模也越來越龐大。這個時候就可以考慮講應用拆分,按照領域模型講我們的使用者、商品、交易拆分成多個子系統

 

 

 

 

這樣拆分以後,可能會有一些相同的程式碼,比如使用者操作,在商品和交易都需要查詢,所以會導致每個系統都會有使用者查詢訪問相關操作。這些相同的操作一定是要抽象出來,否則就會是一個坑。所以通過走服務化路線的方式來解決

 

相關推薦

阿里P8架構深度概述分散式架構

簡介 作為一名架構師,我們要專業,要能看懂程式碼,及時光著臂膀去機房,也能獨擋一面!及時同事搞不定問題,或者撂挑子,你也能給老大一個堅定的眼神:不怕,有我在!還能在會議室上滔滔不絕,如若無人,讓不懂技術的妹子看你時眼神迷離,就好想落霞與孤鶩齊飛! 分散式架構是一個非常複雜的體系,任何技術都不是孤立的存

又出現異常資料?架構深度剖析分散式系統「事務」

關於作者:張帆(Zachary)。堅持用心打磨每一篇高質量原創。本文首發於公眾號:「跨界架構師」

阿里P8架構談:分散式資料庫資料一致性的原理、與技術實現方案!

  背景 可用性(Availability)和一致性(Consistency)是分散式系統的基本問題,先有著名的CAP理論定義過分散式環境下二者不可兼得的關係,又有神祕的Paxos協議號稱是史上最簡單的分散式系統一致性演算法並獲得圖靈獎,再有開源產品ZooKeeper實現的Z

阿里P8架構:推薦高薪架構學習路線

前言: 陳磊,之前在一線名企工作多年,級別P8, 是企業的核心技術開發人員,目前有十三年的開發經驗。從事於Java後端開發,對分散式架構、spring微服務、MySQL、框架、Netty、JVM、效能優化、等技術都有較深的研究30K的薪資,有人說這隻能是大企業或者網際網路企業工程師才能拿到

阿里P7架構經驗總結——Java架構必備技能之少走彎路系統學習

作為程式猿, 在這樣一個網際網路時代背景下,我們是很幸運的,我們能夠拿著比別的職業更高的工資,坐在高檔寫字樓,在冬暖夏涼辦公環境下,在鍵盤上揮舞著手指就能產出一個個成熟的產品提供給上億(吹牛)的使用者使用,那種成就感和滿足感,是讓我們在朝九晚九的情況下,或者一個個通宵的情況下能夠打雞血似得,只為把改

《系統架構》——概述

考試大綱:   考試時間:   綜合知識考題分佈:     Gantt(甘特圖)特點:能清晰的描述每個任務從何時開始,到何時結束,以及任務之間的並行關係。但是他不能清晰的反應出各任務的依賴關係。   Pert(專案計劃評審技術

JAVA架構系列課程分散式快取技術Redis權威指南

課程目標 本課程從0基礎開始,對redis的方方面面進行細粒度的講解:包括基礎操作、高階命令、各種叢集模式、動態增減節點,結合lua使用,實現搶紅包等應用場景。 適用人群 java程式設計師、技術主管、架構師、技術總監 課程簡介 基礎部分: 1.x NOSQL(Redis)簡介、Redis安裝部署與

阿里Java架構是如何規劃架構工作的呢?

效能優化 JVM調優 Java程式效能優化 Tomcat Mysql Spring IOC Spring AOP Spring MVC Spring 5新特性 Mybatis   分散式架構 架構核心服務層技術 架構關鍵技術設施 分散

不懂業務創新的工程師,不是好的架構 | 深度

阿里妹導讀:對於高階的工程師來說,光有持續交付價值的能力還不夠,我們必須保證交付的東西是有用的,能帶來真正的價值。持續交付和業務創新是相互關聯,相輔相成的。持續交付是業務創新的基礎,而持續交付的收益最後要落實到業務創新中去。 如何在深刻了解業務的基礎上,完成有效的業務創新?下面為

乾貨曝光(三)| 資深架構深度剖析:基於深度學習的End-to-End

origin: http://www.sohu.com/a/162012646_7956222017-08-03 16:58 作業系統 /百度 7月22日,百度自動駕駛事業部資深架構師、資料平臺專家楊凡,百度自動駕駛

十年阿里架構是如何規劃架構體系的

效能優化 JVM調優 Java程式效能優化 Tomcat Mysql Spring IOC Spring AOP Spring MVC Spring 5新特性 Mybatis 分散式架構 架構核心服務層技術 架構關鍵技術設施 分散式訊息通訊 非同

阿里P7架構告訴你Java架構必須知道的 6 大設計原則

開發十年,就只剩下這套架構體系了! >>>   

阿裏P8架構淺析秒殺架構設計實踐思路

架構師 操作數 架構 開關 防止 阿裏 用戶 tps 分享圖片 一、前言 一提到秒殺,都會想到高性能、高並發、高可用、大流量…。在電商體系中,交易系統占據了環節中的半壁江山。比如裏面特別迷人的秒殺系統,那秒殺涉及到什麽架構設計?會涉及到什麽業務? 泥瓦匠自言自語:秒殺這個東

邁向大數據架構 - 架構轉型方法與架構設計理論

架構師邁向大數據架構師 - 架構師轉型方法與架構設計理論課程學習地址:http://www.xuetuwuyou.com/course/233課程出自學途無憂網:http://www.xuetuwuyou.com課程摘自《大數據系統架構分析師成長之路》:http://www.xuetuwuyou.com/co

資深架構:推薦高薪架構學習路線

區域 模式 高並發 大牛 netty 下一個 推薦 競爭 級別 前言: 陳磊,之前在一線名企工作多年,級別P8, 是企業的核心技術開發人員,目前有十三年的開發經驗。從事於Java後端開發,對分布式架構、spring微服務、MySQL、框架、Netty、JVM、性能優化、

優秀架構必須掌握的架構思維

怎麽 秋季 生產 人在 combine 向上 有一個 很多 計時 一、抽象思維 如果要問軟件研發/系統架構中最重要的能力是什麽,我會毫不猶豫回答是抽象能力。抽象(abstraction)這個詞大家經常聽到,但是真正理解和能講清楚什麽是抽象的人少之又少。抽象其實是這樣定義的:

Java架構,微服務架構設計,並發編程,java8新特性,P2P金融項目,高並發,分布式

環境 span acc 要掌握 system 精益 app 擴展 ant 微服務架構設計 微服務 軟件架構是一個包含各種組織的系統組織,這些組件包括 Web服務器, 應用服務器, 數據庫,存儲, 通訊層), 它們彼此或和環境存在關系。系統架構的目標是解決利益

如何成為一名Android架構,乃至高階架構,文末有路線圖

很多Android的小夥伴在做了多年的開發之後,始終搞不清楚達到Android架構師需要何種技能,我們對比著Android高階工程師來說明。 我們先來看一下Android高階工程師的招聘要求 職位描述: Responsibility Android平臺功能模組的設計與開發 移動端開發框

P7架構經驗之談:Java架構必備技能

作為程式猿, 在這樣一個網際網路時代背景下,我們是很幸運的,我們能夠拿著比別的職業更高的工資,坐在高檔寫字樓,在冬暖夏涼辦公環境下,在鍵盤上揮舞著手指就能產出一個個成熟的產品提供給上億(吹牛)的使用者使用,那種成就感和滿足感,是讓我們在朝九晚九的情況下,或者一個個通宵的情況下能夠打雞血似得,只為把改

架構必須知道的架構設計原則

不管你是新手程式設計師、職場老司機,還是資深架構師,這篇文章對你來說應該都有裨益。雖然仍是假期,但也建議你多花點時間讀一讀這些真言。   寫在前面   如果一個技術已經存在 2 年,比如現在很火的前端技術 react 和 vue 等,那麼我能預估這個技術大致還有