首先十分感謝祥哥的建議:
一般剛接觸web挺份,會多建議走廣度经备,了解web技術(shù)的全貌,spring,緩存嘿架,消息隊(duì)列垛耳,分布式等等栅屏。
但是深度也不是不沒用,畢竟深度決定潛力堂鲜。如果想往深度走栈雳,例如把spring吃透,也是很不錯(cuò)的缔莲。
不過從職場的角度哥纫,可能開始走廣度會更有利于以后發(fā)展。
深度可以在某個(gè)時(shí)間段進(jìn)行痴奏,例如你做到架構(gòu)蛀骇,就需要沉淀技術(shù)深度的東西。
項(xiàng)目中使用到的技術(shù)(基于SSM)
- 分布式技術(shù):Dubbo抛虫,Zookeeper
- 數(shù)據(jù)庫存儲:MySQL松靡,Redis,MongoDB(少用到)
- 消息服務(wù):ActiveMq
- 文件存儲FTP建椰,OSS
下面簡單對它們進(jìn)行了解雕欺,了解它們是什么,能有什么作用
Dubbo和Zookeeper
Dubbo是Alibaba的開源框架棉姐,最大的特點(diǎn)是按照分層的方式來架構(gòu)屠列,使用這種技術(shù)可以使各個(gè)層之間解耦。
Dubbo采用的是一種簡單的模型伞矩,要么是提供者提供服務(wù)笛洛,要么是消費(fèi)者消費(fèi)服務(wù),可以抽象出服務(wù)提供者(Provider)和服務(wù)消費(fèi)者(Consumer)乃坤。
下圖是Dubbo框架模型:一共有十層
Dubbo作為一個(gè)分布式服務(wù)框架苛让,主要具有如下幾個(gè)核心的要點(diǎn):
- 服務(wù)定義:
服務(wù)是圍繞服務(wù)提供方和服務(wù)消費(fèi)方的,服務(wù)提供方實(shí)現(xiàn)服務(wù)湿诊,而服務(wù)消費(fèi)方調(diào)用服務(wù)狱杰。 - 服務(wù)注冊
對于服務(wù)提供方,它需要發(fā)布服務(wù)厅须,而且由于應(yīng)用系統(tǒng)的復(fù)雜性仿畸,服務(wù)的數(shù)量、類型也不斷膨脹;對于服務(wù)消費(fèi)方错沽,它最關(guān)心如何獲取到它所需要的服務(wù)簿晓,而面對復(fù)雜的應(yīng)用系統(tǒng),需要管理大量的服務(wù)調(diào)用千埃。而且憔儿,對于服務(wù)提供方和服務(wù)消費(fèi)方來說,他們還有可能兼具這兩種角色放可,即既需要提供服務(wù)皿曲,有需要消費(fèi)服務(wù)。
通過將服務(wù)統(tǒng)一管理起來吴侦,可以有效地優(yōu)化內(nèi)部應(yīng)用對服務(wù)發(fā)布/使用的流程和管理。服務(wù)注冊中心可以通過特定協(xié)議來完成服務(wù)對外的統(tǒng)一坞古。
Dubbo推薦使用Zookeeper注冊中心 - 服務(wù)監(jiān)控
無論是服務(wù)提供方备韧,還是服務(wù)消費(fèi)方,他們都需要對服務(wù)調(diào)用的實(shí)際狀態(tài)進(jìn)行有效的監(jiān)控痪枫,從而改進(jìn)服務(wù)質(zhì)量织堂。 - 服務(wù)調(diào)用
最后簡單介紹一下Dubbo基于RPC層,服務(wù)提供方和服務(wù)消費(fèi)方之間的關(guān)系
上圖中藍(lán)色的表示與業(yè)務(wù)有交互奶陈,綠色的表示只對Dubbo內(nèi)部交互易阳。上述圖所描述的調(diào)用流程如下:
1. 服務(wù)提供方發(fā)布服務(wù)到服務(wù)注冊中心;
2. 服務(wù)消費(fèi)方從服務(wù)注冊中心訂閱服務(wù)吃粒;
3. 服務(wù)消費(fèi)方調(diào)用已經(jīng)注冊的可用服務(wù)潦俺。
更多調(diào)用流程請看這篇文章:Dubbo文章參考
Zookeeper
用來注冊服務(wù)和進(jìn)行負(fù)載均衡,哪一個(gè)服務(wù)由哪一個(gè)機(jī)器來提供必須讓調(diào)用者知道徐勃。
zookeeper通過心跳機(jī)制可以檢測掛掉的機(jī)器并將掛掉機(jī)器的ip和服務(wù)對應(yīng)關(guān)系從列表中刪除事示。
通過添加新的機(jī)器向zookeeper注冊服務(wù),服務(wù)的提供者增加僻肖,能夠服務(wù)的客戶就能增加肖爵。
Zookeeper與Dubbo的關(guān)系
Dubbo的將注冊中心進(jìn)行抽象,是得它可以外接不同的存儲媒介給注冊中心提供服務(wù)臀脏,有ZooKeeper劝堪,Memcached,Redis等揉稚。
引入了ZooKeeper作為存儲媒介秒啦,也就把ZooKeeper的特性引進(jìn)來。首先是負(fù)載均衡窃植,單注冊中心的承載能力是有限的帝蒿,在流量達(dá)到一定程度的時(shí)候就需要分流,負(fù)載均衡就是為了分流而存在的巷怜,一個(gè)ZooKeeper群配合相應(yīng)的Web應(yīng)用就可以很容易達(dá)到負(fù)載均衡葛超;資源同步暴氏,單單有負(fù)載均衡還不夠,節(jié)點(diǎn)之間的數(shù)據(jù)和資源需要同步绣张,ZooKeeper集群就天然具備有這樣的功能答渔;命名服務(wù),將樹狀結(jié)構(gòu)用于維護(hù)全局的服務(wù)地址列表侥涵,服務(wù)提供者在啟動的時(shí)候沼撕,向ZK上的指定節(jié)點(diǎn)/dubbo/${serviceName}/providers目錄下寫入自己的URL地址,這個(gè)操作就完成了服務(wù)的發(fā)布芜飘。其他特性還有Mast選舉务豺,分布式鎖等。
Zookeeper基礎(chǔ)概念了解請看這篇文章: zookeeper基礎(chǔ)了解
Redis
Redis簡介(中文網(wǎng)站):
Redis 是一個(gè)開源(BSD許可)的嗦明,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng)笼沥,它可以用作數(shù)據(jù)庫、緩存和消息中間件娶牌。 它支持多種類型的數(shù)據(jù)結(jié)構(gòu)奔浅,如 字符串(strings), 散列(hashes)诗良, 列表(lists)汹桦, 集合(sets), 有序集合(sorted sets) 與范圍查詢鉴裹, bitmaps舞骆, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內(nèi)置了 復(fù)制(replication)径荔,LUA腳本(Lua scripting)葛作, LRU驅(qū)動事件(LRU eviction),事務(wù)(transactions) 和不同級別的 磁盤持久化(persistence)猖凛, 并通過 Redis哨兵(Sentinel)和自動 分區(qū)(Cluster)提供高可用性(high availability)赂蠢。
Redis 優(yōu)勢:
- 速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中辨泳,類似于HashMap虱岂,HashMap的優(yōu)勢就是查找和操作的時(shí)間復(fù)雜度都是O(1)
- 支持豐富數(shù)據(jù)類型,支持string菠红,list第岖,set,sorted set试溯,hash
- 支持事務(wù)蔑滓,操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行键袱。
- 豐富的特性:可用于緩存燎窘,消息,按key設(shè)置過期時(shí)間蹄咖,過期后將會自動刪除
在Java中使用的是Jedis褐健,可以在Redis官網(wǎng)查看如何使用,常用的套路是使用MySQL存儲需要長久存放的數(shù)據(jù)澜汤,使用Redis進(jìn)行緩存蚜迅,設(shè)置一個(gè)過期時(shí)間,不能讓Redis存儲太多俊抵,不然內(nèi)存占用會升高谁不。
ActiveMq
首先介紹一下MQ:
MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過寫和檢索出入列隊(duì)的針對應(yīng)用程序的數(shù)據(jù)(消息)來通信徽诲,而無需專用連接來鏈接它們拍谐。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過直接調(diào)用彼此來通信馏段,直接調(diào)用通常是用于諸如遠(yuǎn)程過程調(diào)用的技術(shù)。排隊(duì)指的是應(yīng)用程序通過隊(duì)列來通信践瓷。隊(duì)列的使用除去了接收和發(fā)送應(yīng)用程序同時(shí)執(zhí)行的要求院喜。
MQ特點(diǎn):
MQ的消費(fèi)-生產(chǎn)者模型的一個(gè)典型的代表,一端往消息隊(duì)列中不斷的寫入消息晕翠,而另一端則可以讀取或者訂閱隊(duì)列中的消息喷舀。MQ和JMS類似,但不同的是JMS是SUN Java消息中間件服務(wù)的一個(gè)標(biāo)準(zhǔn)和API定義淋肾,而MQ則是遵循了AMQP協(xié)議的具體實(shí)現(xiàn)和產(chǎn)品硫麻。
接著介紹JMS(Java Message Service):
JMS是Java平臺上有關(guān)面向消息中間件(MOM)的技術(shù)規(guī)范,它便于消息系統(tǒng)中的Java應(yīng)用程序進(jìn)行消息交換,并且通過提供標(biāo)準(zhǔn)的產(chǎn)生樊卓、發(fā)送拿愧、接收消息的接口簡化企業(yè)應(yīng)用的開發(fā),翻譯為Java消息服務(wù)碌尔。
ActiveMq優(yōu)點(diǎn):
是一個(gè)快速的開源消息組件(框架)浇辜,支持集群,同等網(wǎng)絡(luò)唾戚,自動檢測柳洋,TCP,SSL叹坦,廣播熊镣,持久化,XA,和J2EE1.4容器無縫結(jié)合绪囱,并且支持輕量級容器和大多數(shù)跨語言客戶端上的Java虛擬機(jī)测蹲。消息異步接受,減少軟件多系統(tǒng)集成的耦合度毕箍。消息可靠接收弛房,確保消息在中間件可靠保存,多個(gè)消息也可以組成原子事務(wù)而柑。
個(gè)人理解是通過發(fā)送消息到隊(duì)列中文捶,不直接調(diào)用服務(wù)處理,而是配置處理器進(jìn)行事件的處理媒咳,異步處理消息用來進(jìn)行應(yīng)用間的解耦粹排,節(jié)省了服務(wù)器的請求響應(yīng)時(shí)間,從而提高了系統(tǒng)的吞吐量涩澡,最后確保最終一致性顽耳。
關(guān)于ActiveMq的了解可以看這篇文章:ActiveMq基礎(chǔ)了解
文件存儲FTP和OSS
網(wǎng)絡(luò)操作中,有很多場景下涉及到文件的操作妙同,這時(shí)就需要使用到ftp和oss射富。
FTP:全稱(File Transfer Protocol)
用于在網(wǎng)絡(luò)上的控制文件的雙向傳輸。我們經(jīng)常使用到的是上傳(upload)和下載(download)粥帚。
在后端中使用胰耗,需要寫好配置文件,在代碼中也需要通過連接ftp服務(wù)器芒涡,將文件轉(zhuǎn)成輸入流上傳到ftp服務(wù)器,拿到ftp服務(wù)器的文件地址费尽,就能將文件下載下來赠群。
OSS:全稱(Object Storage Service)
常用的是阿里的oss,使用它有以下好處:
- OSS服務(wù)可用性不低于99.9%,規(guī)模自動擴(kuò)展旱幼,數(shù)據(jù)持久性不低于99.99999999%查描,數(shù)據(jù)自動多重冗余備份。
- OSS提供企業(yè)級多層次安全防護(hù)和防DDoS攻擊柏卤,自動黑洞清洗叹誉。OSS實(shí)行多用戶資源隔離機(jī)制,支持異地容災(zāi)機(jī)制。
- OSS還提供多種鑒權(quán)和授權(quán)機(jī)制及白名單闷旧、防盜鏈长豁、主子賬號功能。
- OSS性價(jià)比高忙灼,多線BGP骨干網(wǎng)絡(luò)匠襟,無帶寬限制钝侠,上行流量免費(fèi),無需運(yùn)維人員與托管費(fèi)用酸舍,0成本運(yùn)維帅韧。
- OSS還提供圖片處理、音視頻轉(zhuǎn)碼啃勉、內(nèi)容加速分發(fā)忽舟、鑒黃服務(wù)、歸檔服務(wù)等多種數(shù)據(jù)增值服務(wù)淮阐,并在不斷豐富著叮阅。
基于以上優(yōu)點(diǎn),學(xué)習(xí)使用OSS也是很有必要的泣特,官方文檔 的介紹很詳細(xì)了浩姥。