天天看點

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

軟體開發的核心原則

此處所說的是軟體開發應該遵循的一些核心原則:

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
Don't Repeat Yourself: 這是軟體開發的一個基礎原則,即不要做重複性勞動。也是現在所說的“極客文化”的一種。代碼重複、工作重複在軟體開發中都是不合理的存在。利用各種手段消除這些重複是軟體開發的一個核心工作準則。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
Keep it simple stupid:即KISS原則。在做軟體設計的工作中,很多時候都不要想得過于複雜,也不要過度設計和過早優化,用最簡單且行之有效的方案也就避免了複雜方案帶來的各種額外成本。既有利于後續的維護,也利于進一步的擴充。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
You Ain’t Gonna Need It: 即YAGNI原則。隻需要将應用程式必需的功能包含進來,而不要試圖添加任何其他你認為可能需要的功能。因為在一個軟體中,往往80%的請求都花費在20%的功能上。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
Done is better than perfect: 在面對一個開發任務時,最佳的一個思路就是先把東西做出來,再去疊代優化。如果一開始就面面俱到,考慮到各種細節,那麼很容易陷入牛角尖而延誤項目進度。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Choose the most suitable things: 這是在做方案選擇、技術選型時候的一個很重要的原則。在面對許多技術方案、開源實作的時候,務必做到的是不能盲目求新,要選擇最合适的而非被吹得天花亂墜的。

軟體過程

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
一個軟體的生命周期中,除了開發還有很多其他步驟,也都是需要掌握的一些技術。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

項目管理:項目管理對于一個軟體的開發是非常重要的,能夠保證項目進度有條不紊地進行,在可控的時間内以一定的品質傳遞。瀑布開發模型、螺旋開發模型是傳統的項目管理模型。

在網際網路的開發工作中,靈活開發則是比較受推崇的開發方式。所謂靈活開發即快速實作原型,然後快速疊代。Scrum是目前普遍流行的靈活開發方式之一。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
測試驅動開發:在平時的開發過程中,目前比較流行也是行之有效的一種方式就是Test Driven Develop,即測試驅動開發。此種方式的核心就是編寫單元測試。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
簡單來講,就是先完成某一個功能的單元測試用例,然後在逐漸消除測試用例的編譯錯誤的過程中完成功能的開發。
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
持續內建:某一個軟體功能完成開發之後,後續還有測試、預釋出、部署等過程。整個過程稱之為內建,而持續內建指的是無需人工幹預可以不斷地進行這個過程。Jenkins、Quick Build都是比較典型的持續內建工具。

日常開發

日常開發指的是一些日常需要掌握的技能、工具等。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

編輯器:開發中現在用的比較多的編輯器包括Emacs、Vim和SublimeText。筆者用的最多的就是SublimeText,基本能夠滿足自己的開發需求,包括編寫腳本代碼、檢視代碼檔案等。

Vim和Emacs這兩款編輯器相對SublimeText來說需要記住很多指令,有一定的上手門檻。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

源碼版本管理:代碼的版本管理工具由CVS到SVN再到現在的Git,已經在事實上形成了以分布式版本管理為主的版本管理方案。基于Git,可以采用Git Flow做為源碼管理模型。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

項目工具:Github是一個第三方Git中央倉庫,目前是世界最大的開源代碼庫,也能夠做為私人的代碼管理軟體;

Facebook開源的Phabrictor提供了非常強大的任務管理、Bug管理、測試、代碼管理等,但其上手門檻相對較高;

禅道是國人開發的一款項目管理工具,但是其免費版功能有限;

以Tower.im為代表的第三方項目管理服務也是一個可選擇的方案,風險在于資料都不再是私有的。

運作環境

後端應用開發完成之後是需要部署到伺服器上對外提供服務的。從最開始的直接在實體機上部署服務到後來的虛拟環境、雲環境再到現在火熱的容器,直至最近興起的無伺服器技術。都是為了讓服務的運作環境能夠更加便于建立、更容易維護、更容易擴充。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Linux: 說到後端伺服器肯定繞不過Linux。至少現在網際網路的後端服務絕大多數都是部署在Linux的各種伺服器版本中的。其中CentOS、Ubuntu以及Debian是用的比較多的版本。

對于Linux,需要熟練掌握的就是很多常用Shell指令如ps、netstat、lsof、ss、df、dh等等。此外,很多性能分析指令如top、vmstat、iostat、sar等也需要熟練使用。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

應用伺服器:就Java來講,很多時候開發的都是Web應用,以HTTP協定對外提供服務。除了對性能要求比較苛刻的情況下會自己建構HTTP服務之外,大部分情況是需要依賴于支援Java程式的應用伺服器的。目前最為常用的有:Tomcat、Jetty。

嚴格來講,這兩者隻是Servlet容器,真正的JavaEE應用伺服器如Jboss、Weblogic在網際網路領域很少使用。當然,這些軟體并沒有提供URL重寫、請求委托等Web伺服器功能,還不足以擔當完整Web伺服器的角色。Nginx則是目前最為流行的Web伺服器。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

負載均衡:在高并發流量環境下,後端服務會以叢集的模式對外提供服務。在叢集的前面,需要負載均衡器将請求配置設定到叢集的各個結點上。LVS是最為流行的四層負載均衡軟體,HAProxy是另一個即支援四層又支援七層負載均衡的軟體,Nginx則是七層負載均衡最為流行的解決方案。

當然,性能最為好的負載均衡方案是以F5為代表的硬體負載均衡,但由于其昂貴的成本是以在網際網路團隊中很少使用。此外,這裡需要補充的是為了保證同等角色的服務的高可用,如LVS經常作為流量的入口,是以會部署多個LVS結點互為主備防止一個挂掉的時候造成服務不可用。而實作互為主備的技術目前用的最多的就是Keepalived。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

虛拟化:虛拟化技術是前幾年經常用來做私有雲的一種技術。即将自己的實體主機通過虛拟化技術分裂為多個虛拟主機,能夠隔離資源。其中,VPS(虛拟專用伺服器)的代表技術包括:微軟的Virtual Server、VMware的ESX Server、SWsoft的Virtuozzo。

此外,OpenStack提供的建構私有IIAS的功能、Cloud Foundry提供的建構私有平台運作環境以及Docker帶來的容器服務都是虛拟化技術的一種。

第三方服務

雖然從根本上講所有的軟體服務都是可以自己開發的或者部署到自己伺服器上的。但是受限于成本、周期或者其他客觀因素,很多服務還是需要使用第三方的。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

IAAS:Infrastructure As A Service, 是雲計算最開始的一種模式,現在基本上所有的雲服務商都有IAAS的服務。其中,全球最強大的雲服務提供商是亞馬遜的AWS,國内的則當屬阿裡雲。

就目前來看,即使是強如AWS也會出現一些運維故障,是以國内的這些雲計算提供商很多時候的服務健壯性、運維響應更是經常被人吐糟。就筆者自己的經曆來看。2010年左右,盛大雲的雲服務其實做的還不錯,但後來由于種種原因現在基本已經沒啥份額了。

國内除了阿裡雲,UCloud算是專注做雲計算的一個比較靠譜的公司了。此外,還有一個青雲,做的東西略顯高大上,也是一個不錯的選擇。當然,現在這些雲服務商早就不僅僅是IAAS了,也做了很多PAAS的服務。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

PAAS:Platform As A Service,即隻需要送出代碼到指定的運作環境,其他的諸如代碼打包、部署、IP綁定都由平台完成。

除了可以使用Cloud Foundry建構自己的PAAS平台以外,現在最為流行的第三方PAAS服務有:新浪的SAE、百度的BAE以及Google的GAE。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

域名:有個可以提供服務的應用後,那麼域名也是一個必須的基礎設施。一個好的域名不僅僅代表企業的形象,也能夠更加友善使用者的記憶與傳播。目前購買域名可以通過國外的name.com、godaddy以及國内的萬網等。

有了域名之後下一步就得進行備案,域名提供商一般都提供了配套服務或者去找一些代理也可以辦下來。此外,對于域名的解析,域名提供商一般會内置解析功能,也可以使用獨立的DNS服務,如dnspod。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

CDN: 内容分發網絡,即就近請求的一種技術實作。服務提供方将會被大量通路的内容在全國的多個結點都做緩存,這樣當使用者通路時就能夠就近選擇,進而減少網絡傳輸延時,提高通路速度。

國内目前七牛和又拍都提供了不錯的cdn服務,當然像阿裡雲、UCloud這種綜合雲服務商也都有cdn服務。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

郵件發送:這個主要需要依賴郵件伺服器,然後通過SMTP協定就可以實作發送。可以選擇自己搭建,也可以選擇諸如騰訊郵箱、網易郵箱等。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

短信發送:使用短信發送驗證碼、營銷短信是很常見的應用場景。由于短信是需要營運商支援的,是以這一塊基本上都是需要依賴第三方代理的。市面上也有很多短信網關代理。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

消息推送:在移動應用上,推送已經成為一個标配功能。目前個推應該是第三方推送服務中的佼佼者,而且由于其客戶很多,在聯盟喚醒上有很大的優勢。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

開放平台:通過開放平台,可以使用OAuth等協定擷取使用者在第三方平台上的資訊實作第三方平台登入等。目前,微網誌、微信、QQ是最常見的第三方登入方式,基本上都是使用OAuth協定為第三方開發者提供服務的。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

支付接口:支付接口是很多内置購買功能軟體的必備元件。目前,接入最多的無非是支付寶和微信,都提供了開放平台供商家接入。當然,也有直接綁定銀行卡支付的,此時需要走的就是銀行或者銀聯的網關接口。

計算機基礎科學知識

對于像資料結構、算法、計算機網絡、作業系統、計算機組成原理這些計算機科學基礎知識,不管是後端還是其他領域都是必須的技能,也是所有軟體開發的基礎。紮實的計算機科學基礎才能讓你在學習、使用某種技術開發軟體、調試軟體、排查問題時能夠心裡有底、有據可循。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

資料結構:資料結構是組成程式的基礎。經典的資料結構包括:字元串、數組、連結清單、哈希表、樹(二叉樹、平衡樹、紅黑樹、B樹)、堆棧、隊列、圖。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

算法: 經典的排序和查找算法在平時的開發工作中經常會用到,如:冒泡排序、插入排序、選擇排序、歸并排序、快速排序、希爾排序、堆排序以及二分查找等。

此外,在函數/方法的算法實作中要注意遞歸和疊代各自的優缺點。而衡量算法性能無外乎空間複雜度和時間複雜度。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

業務相關算法:除了上面的基本算法之外,業務中還會經常涉及到一些更為複雜的算法,如:壓縮算法、LRU緩存算法、緩存一緻性、編譯原理中的狀态機等。

此外,目前越來越火的機器學習中有很多算法也是在很多業務場景中有很大用途的,如:用于文本分詞的結巴分詞和中科院ICTCLAS;用于關鍵詞提取的TF-IDF和TextRank;用于計算文本相似度的主題模型、Word2Vec、餘弦相似度以及歐幾裡得距離;用于文本分類的樸素貝葉斯;用于推薦的聚類、協同過濾、使用者畫像、隐語義模型等。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

計算機網絡: TCP/IP協定是網絡最根本的協定,其七層/四層協定棧的設計都是非常精華的東西,連接配接的建立、斷開以及連接配接的各種狀态的轉換都是排查、解決網絡問題的根本依據。

從TCP/IP往上,HTTP協定是現在絕大多數後端應用對外提供的協定,發展到現在已經将要步入HTTP2.0時代,帶來了持久連接配接、連接配接複用等令人振奮的新特性。

此外,基于HTTP的HTTPS協定由于其安全性在逐漸的成為後端服務對外開放的主流協定。業務層面,基于HTTP協定的RESTful規範正成為對外接口的主流規範,而OAuth2.0協定也在成為開放平台對外的主流協定。除了HTTP之外,SMTP是另一個基于TCP/IP的應用協定,主要用在發送郵件上。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

設計模式: 在軟體開發中,前人的經驗形成了很多經典設計模式供我們使用,能夠使得軟體的實作可服用、可擴充、可維護。經典的工廠模式、簡單工廠模式、單例模式、觀察者模式、代理模式、建築者模式、門面模式、擴充卡模式、裝飾器模式在日常的很多開發場景下都具有很重要的意義。

資料

現在網際網路的所有業務其實都是圍繞資料來進行的。而資料傳輸、資料存儲、資料分析處理都是關鍵的部分。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

高速緩存:目前用的最為廣泛的緩存軟體Redis能夠支援豐富的資料結構,如:字元串、清單、有序集合等多種資料的存儲。了解緩存實作的原理、記憶體淘汰的政策能夠更好地使用緩存。

此外由于緩存的成本較高,在使用緩存的時候一定要做好量化和存儲優化工作。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

資料庫:掌握資料庫的很大一個關鍵點就在于對索引的使用,可以說,正确地使用索引就基本等于掌握了資料庫的使用。目前絕大多資料庫都是使用B樹做為索引的資料結構,目的就是為了利用磁盤順序讀寫的特性。

不同的資料庫由于本身設計目的的不同,都有一些獨特的優勢,如:MongoDB天然支援sharding,但受限于NoSQL,在重事務、有關聯關系的場景下并不适用;HBase使用LSM作為底層資料結構,犧牲了讀性能來換取高速的寫性能。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

搜尋引擎:搜尋引擎主要應對全文檢索以及多元度查詢的業務場景。掌握搜尋引擎使用的資料結構、叢集方式、配置的關鍵點有助于更好地使用搜尋引擎服務于業務應用。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

消息隊列:消息隊列有兩種角色:生産者和消費者,兩種角色對于消息隊列的需求也不一樣。其中,對于消費者來說,消息消費的方式包括釋出-訂閱和隊列兩種。

消息隊列在語義保證上分為:At Most Once、At Least Once、Exactly Once三種模式,需要更具特定的業務場景選擇合适的語義保證。此外,消息隊列對于高可用、消息安全的保證決定了此消息隊列的可靠性。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

資料存儲和處理:資料存儲下來最終還是要用來做分析和處理的。資料的處理分為離線處理和實時處理。離線處理的優勢在于能夠處理大量資料,但是一般會有T+1的延遲,适用于計算量大但是對于結果允許有延時的場景。

但對于離線資料分析,還有一個很關鍵的就是資料傾斜問題。所謂資料傾斜指的是region資料分布不均,造成有的結點負載很低,而有些卻負載很高,進而影響整體的性能。

是以,處理好資料傾斜問題對于離線資料處理是很關鍵的。而實時處理一般是流式處理方式,适用于資料能夠轉換為資料流,對于結果要求及時性的場景。

對于實時資料分析,需要注意的就是實時資料處理結果寫入存儲的時候,要考慮并發的問題,雖然對于Storm的Bolt程式來說不會有并發的問題,但是寫入的存儲媒體是會面臨多任務同時讀寫的。

通常采用的方案就是采用時間視窗的方式對資料做緩沖後批量寫入。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

資料同步:資料倉庫的資料來源除了直接的日志外還有一個很關鍵的就是業務資料庫。從業務資料庫到資料倉庫的過程稱為資料同步。有基于SQL的同步方案,也有基于MySQL binglog的增量同步方案。

Java

對于Java方面的技能來說,主要有兩個大的部分,包括Java程式設計和JVM。

先來看一下Java程式設計部分,這也是Java工程師最最基礎的技能。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

IDE: 目前用的最多的Java IDE當屬Eclipse和Intellij IDEA。前者是老牌IDE,逐漸淘汰了Jbuilder以及Netbeans,占領了大部分Java IDE市場。後者則是後起之秀,由于其增量編譯、智能分析代碼等帶來的性能提升,現在已經得到了大規模使用,大有取代Eclipse之勢。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

核心文法:目前用的最多的當屬JDK6的Java文法。而到了Java7引入了try with resource、switch string、diamonds等文法。Java8則又引入了lambda、stream等文法。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

集合類:集合類是Java語言中非常精華的部分,包括:HashMap、ArrayList、LinkedList、HashSet、TreeSet以及線程安全的ConcurrentHashMap、ConcurrentLinkedQueue等線程安全集合。了解他們的實作原理以及查詢、修改的性能以及使用場景是非常必要的。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

工具類:Google Guava、Apache commons、FastJson提供了很多JDK本身沒有的工具類、集合等。此外,ASM位元組碼操作以及CGLIB代碼生成能夠提供更底層的java程式設計功能。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

進階特性:抛開Java核心的基本程式設計,并發程式設計、泛型、網絡程式設計、序列化RPC都屬于java的進階程式設計特性。其中并發程式設計需要掌握Executors提供的各種并發工具、Java7帶來的fork/join架構以及CountDownLatch、Semaphore、CyclicBarrier等同步工具;

網絡程式設計要區分好BIO、NIO以及AIO;序列化中除了JDK自帶的序列化實作之外,Protobuf和Kryo是比較高效的第三方實作;RPC的實作中,Thrift、Hessian、Dubbo以及RMI則是比較常用的幾個協定,其中的Hessian是基于Http協定的,Dubbo是基于TCP協定,而Thrift則同時支援。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

JavaEE: JavaEE現在是Java應用最為普遍的一個領域。Servlet是JavaEE中最根本的元件之一。而Servlet3.0帶來的異步Servlet提高了其處理請求的性能。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

項目建構:目前用的最多的Java項目建構工具包括Maven和Gradle,提供了源碼包依賴管理、編譯、打包、部署等一系列功能。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

程式設計架構:Spring是Java程式設計中避不開的一個架構,發展到現在除了Spring核心的IOC、AOP之外,SpringMvc、Spring Data、Spring Cloud等等都給Java開發者們帶來了開發上的便利,大大提高了開發效率。

除此之外,ORM架構MyBatis也是Java領域比較火的架構之一,實作了資料庫記錄到Java對象的映射操作。此外,Jersey提供了從用戶端到服務端的一整套符合RESTful規範的開發架構。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

測試:測試是任何程式設計都需要的一步。黑盒測試主要指的通常進行的功能測試,白盒測試則主要指的對代碼功能、品質進行的測試。

此外,關鍵的單元測試則是開發工程師需要着重注意的地方,“測試驅動開發”的理念也是值得推崇的開發方式。JUnit是目前Java中實作單元測試的主流方案。

一般來說掌握上面所述的Java程式設計技能是能夠應付大多程式設計工作的。但是如果在代碼層面已經做到最大努力卻還是達不到性能要求的時候,就需要在JVM虛拟機層面做一些努力了。可以說掌握JVM相關技術是Java開發進階的一個關鍵步驟

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

虛拟機實作: Java的虛拟機實作除了我們常用的HotSpot外,還有JRockit、J9以及移動平台的Dalvkit。我們通常鎖描述的JVM優化絕大多是是針對HotSpot虛拟機來說的。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

類加載機制:JVM的類加載機器遵循雙親委派原則,即目前類加載器需要先去請求父加載器去加載目前類,如果無法完成自己才去嘗試進行加載。

OSGI架構則打破了此機制,采用了平等的、網狀的類加載機制,以實作子產品化的加載方案。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

運作時記憶體組成: 程式計數器、堆棧、方法區、堆、堆外記憶體,這些一起組成了JVM的運作時記憶體。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Java記憶體模型:Java的主記憶體+線程私有記憶體的模型是線程安全問題産生的根本。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

GC原理和調優:與C、C++這些語言相比,GC是Java的優勢,但因為GC的細節被JVM屏蔽了,在對記憶體、性能要求非常苛刻的情況下難以進行自由控制,某種程度這也是劣勢。

如果想在某些場景下發揮GC的最大性能,能做的就是對GC的各種參數做優化配置,如新生代和老年代的垃圾回收器選擇、各種垃圾回收參數的配置等。

此外,很多時候由于代碼品質或者外部客觀因素,造成了JVM頻繁GC,需要使用相關的工具快速進行問題定位和解決。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

性能調優和監控工具:JDK自帶了很多強大的調優和監控工具,包括jmap、jstack、jcmd、jconsole、jinfo等。

此外,btrace是一款非常強大的線上問題動态排查工具,能夠無須重新開機Java程序,動态的插入一些代碼邏輯,進而攔截代碼執行邏輯列印日志,進而排查問題

系統架構

一個應用從0開始一般會經曆單體應用、垂直應用到分布式服務架構的演化。如下圖所示:

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

單體應用:當應用規模、團隊規模比較小的時候,隻需要一個包括了所有功能的應用即可。減少部署結點,也減少了部署成本。此時,對資料庫的ORM操作是架構實作的關鍵點。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

垂直應用:當應用的使用者規模越來越大,請求量越來越高的時候。單體應用增加結點帶來的資源浪費會凸現出來,因為絕大多數接口請求量并沒有特别大,根本沒必要擴充到多個結點。

此時,就可以将單體應用拆分成互不相關的幾個應用,分别對外提供服務。此時,加速每個應用開發的MVC架構是架構實作的關鍵點。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

分布式服務:當垂直應用越來越多,應用之間的互動不可避免。抽離核心業務單獨部署,逐漸形成穩定的服務中心。而随着團隊規模的相應擴大,服務會随着團隊的增多變得越來越多,粒度也會變得越來越小,也就逐漸形成了分布式服務的架構,而當粒度細到某種程度、服務數量多到一定程度則可以稱之為微服務。

即在設計好業務邊界之後将原來的單體應用分解成一個個細粒度的服務,彼此之間通過某種方式進行通信。微服務架構的關鍵在于如何做好服務的治理、排程、維護工作。目前,Dubbo算是微服務架構中用的比較多的架構,但Dubbo僅僅解決了微服務架構中的一部分問題。Spring Cloud則基本上涵蓋了微服務架構的各個方面。

部署架構

對于Web應用來說,LVS+Nginx+Tomcat+MySQL+Redis即可構成一個簡單通用的部署架構,如下圖所示:

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)
中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

LVS作為最前置的結點,負責在網絡第四層轉發流量、負載均衡。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

多個LVS使用Keepalived互為主備實作高可用。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Nginx作為反向代理,負責在網絡第七層轉發流量、負載均衡。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Tomcat做為業務容器,主要的應用代碼都在這裡面。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

Redis作為緩存,隔離高并發請求和後端資料庫。

中華萬年曆CTO杭建:Java後端技術概覽(贈書福利)

MySQL以主從模式對資料做持久化。

其中,虛線部分是資料庫層,采用的是主從模式。也可以使用Redis Cluster(Codis等)以及MySQL Cluster(Cobar等)來替換。

原文釋出時間為:2018-05-16

本文作者:飒然Hang

本文來自雲栖社群合作夥伴“

中生代技術

”,了解相關資訊可以關注“

”。