大家好烦周,我是IT修真院鄭州分院第6期的學(xué)員萍启,一枚正直純潔善良的JAVA程序員今天給大家分享一下秋柄,Spring DUBBO的入門
1.背景介紹
什么是Dubbo?
Dubbo是Alibaba開源的分布式服務(wù)框架益涧,它最大的特點(diǎn)是按照分層的方式來架構(gòu)锹杈,
使用這種方式可以使各個(gè)層之間解耦合(或者最大限度地松耦合)两芳。
從服務(wù)模型的角度來看摔寨,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務(wù)怖辆,
要么是消費(fèi)方消費(fèi)服務(wù)是复,所以基于這一點(diǎn)可以抽象出服務(wù)提供方(Provider)和服務(wù)消費(fèi)方(Consumer)兩個(gè)角色。關(guān)于注冊中心竖螃、協(xié)議支持淑廊、服務(wù)監(jiān)控等內(nèi)容
應(yīng)用架構(gòu)進(jìn)化史
單一應(yīng)用架構(gòu):當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用特咆,將所有功能都部署在一起季惩,以減少部署節(jié)點(diǎn)和成本。此時(shí)腻格,用于簡化增刪改查工作量的數(shù)據(jù)訪問框架(ORM)是關(guān)鍵画拾。
垂直應(yīng)用架構(gòu):當(dāng)訪問量逐漸增大,單一應(yīng)用增加機(jī)器帶來的加速度越來越小菜职,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用青抛,以提升效率。此時(shí)酬核,用于加速前端頁面開發(fā)的Web框架(MVC)是關(guān)鍵蜜另。
分布式服務(wù)架構(gòu):當(dāng)垂直應(yīng)用越來越多,應(yīng)用之間交互不可避免嫡意,將核心業(yè)務(wù)抽取出來举瑰,作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心蔬螟,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求嘶居。此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵促煮。
流動計(jì)算架構(gòu):當(dāng)服務(wù)越來越多邮屁,容量的評估,小服務(wù)資源的浪費(fèi)等問題逐漸顯現(xiàn)菠齿,此時(shí)需增加一個(gè)調(diào)度中心基于訪問壓力實(shí)時(shí)管理集群容量佑吝,提高集群利用率。此時(shí)绳匀,用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA)是關(guān)鍵芋忿。
進(jìn)化圖
Dubbo最基本的幾個(gè)需求
當(dāng)服務(wù)越來越多時(shí)炸客,服務(wù) URL 配置管理變得非常困難,F(xiàn)5 硬件負(fù)載均衡器的單點(diǎn)壓力也越來越大戈钢。 此時(shí)需要一個(gè)服務(wù)注冊中心痹仙,動態(tài)的注冊和發(fā)現(xiàn)服務(wù),使服務(wù)的位置透明殉了。并通過在消費(fèi)方獲取服務(wù)提供方地址列表开仰,實(shí)現(xiàn)軟負(fù)載均衡和 Failover,降低對 F5 硬件負(fù)載均衡器的依賴薪铜,也能減少部分成本
當(dāng)進(jìn)一步發(fā)展众弓,服務(wù)間依賴關(guān)系變得錯(cuò)蹤復(fù)雜,甚至分不清哪個(gè)應(yīng)用要在哪個(gè)應(yīng)用之前啟動隔箍,架構(gòu)師都不能完整的描述應(yīng)用的架構(gòu)關(guān)系谓娃。 這時(shí),需要自動畫出應(yīng)用間的依賴關(guān)系圖蜒滩,以幫助架構(gòu)師理清理關(guān)系滨达。
服務(wù)的調(diào)用量越來越大,服務(wù)的容量問題就暴露出來俯艰,這個(gè)服務(wù)需要多少機(jī)器支撐弦悉?什么時(shí)候該加機(jī)器? 為了解決這些問題蟆炊,第一步稽莉,要將服務(wù)現(xiàn)在每天的調(diào)用量,響應(yīng)時(shí)間涩搓,都統(tǒng)計(jì)出來污秆,作為容量規(guī)劃的參考指標(biāo)。
? ? ? ? 其次昧甘,要可以動態(tài)調(diào)整權(quán)重良拼,在線上,將某臺機(jī)器的權(quán)重一直加大充边,并在加大的過程中記錄響應(yīng)時(shí)間的變化庸推,直到響應(yīng)時(shí)間到達(dá)閥值,記錄此時(shí)的訪問量浇冰,再以此訪問量乘以機(jī)器數(shù)反推總?cè)萘俊?/p>
為什么要學(xué)習(xí)Spring Dubbo贬媒?
Dubbo采用全Spring配置方式,透明化接入應(yīng)用肘习,對應(yīng)用沒有任何API侵入际乘,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴(kuò)展進(jìn)行加載漂佩。
最近一段時(shí)間頻繁出現(xiàn)在面試群中脖含,為了面試儲備知識
懶得列舉的一些優(yōu)點(diǎn)
已經(jīng)恢復(fù)維護(hù)
缺點(diǎn)罪塔??养葵?
只支持JAVA語言
2.知識剖析
架構(gòu)
節(jié)點(diǎn)角色說明
Provider:暴露服務(wù)的服務(wù)提供方
Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方
Registry:服務(wù)注冊與發(fā)現(xiàn)的注冊中心
Monitor:統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心
Container:服務(wù)運(yùn)行容器
調(diào)用關(guān)系說明
1.服務(wù)容器負(fù)責(zé)啟動征堪,加載,運(yùn)行服務(wù)提供者
2.服務(wù)提供者在啟動時(shí)关拒,向注冊中心注冊自己提供的服務(wù)
3.服務(wù)消費(fèi)者在啟動時(shí)佃蚜,向注冊中心訂閱自己所需的服務(wù)
4.注冊中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更夏醉,注冊中心將基于長連接推送變更數(shù)據(jù)給消費(fèi)者
5.服務(wù)消費(fèi)者爽锥,從提供者地址列表中涌韩,基于軟負(fù)載均衡算法畔柔,選一臺提供者進(jìn)行調(diào)用,如果調(diào)用失敗臣樱,再選另一臺調(diào)用
6.服務(wù)消費(fèi)者和提供者靶擦,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心
3.常見問題
Zookeeper和DUBBO的關(guān)系
4.解決方案
http://blog.csdn.net/daiqinge/article/details/51282874#reply
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
什么是長連接和心跳機(jī)制雇毫?
網(wǎng)絡(luò)中的接收和發(fā)送數(shù)據(jù)都是使用操作系統(tǒng)中的SOCKET進(jìn)行實(shí)現(xiàn)玄捕。但是如果此套接字已經(jīng)斷開,那發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的時(shí)候就一定會有問題棚放∶墩常可是如何判斷這個(gè)套接字是否還可以使用呢?這個(gè)就需要在系統(tǒng)中創(chuàng)建心跳機(jī)制飘蚯。其實(shí)TCP中已經(jīng)為我們實(shí)現(xiàn)了一個(gè)叫做心跳的機(jī)制馍迄。如果你設(shè)置了心跳,那TCP就會在一定的時(shí)間(比如你設(shè)置的是3秒鐘)內(nèi)發(fā)送你設(shè)置的次數(shù)的心跳(比如說2次)局骤,并且此信息不會影響你自己定義的協(xié)議攀圈。所謂“心跳”就是定時(shí)發(fā)送一個(gè)自定義的結(jié)構(gòu)體(心跳包或心跳幀),讓對方知道自己“在線”峦甩。 以確保鏈接的有效性
7.參考文獻(xiàn)
http://dubbo.io/books/dubbo-user-book/
http://www.baeldung.com/dubbo
http://shiyanjun.cn/archives/325.html
8.更多討論
視頻:
PPT:https://ptteng.github.io/PPT/PPT-java/java-DUBBO-task10.html#/
Q:有沒有什么更進(jìn)階的資料
dubbo管理員指南:http://dubbo.io/books/dubbo-admin-book/
Q:有沒有什么更更進(jìn)階的資料
dubbo開發(fā)者指南:http://dubbo.io/books/dubbo-dev-book/
Q:現(xiàn)在用的公司多嗎赘来?
有不少,在DUBBO的gitter社區(qū)有很多登記了使用了DUBBO的公司
https://github.com/alibaba/dubbo/issues/1012
沒了凯傲。