新聞中心
今天天氣不錯(cuò),我們來分享一個(gè)能讓你技術(shù)獲得增強(qiáng)的主題: 開發(fā)中間件。

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,先為涵江等服務(wù)建站,涵江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為涵江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
很多同學(xué)聽到這個(gè)主題,可能會(huì)說我們是小公司,沒有機(jī)會(huì)開發(fā)中間件。
那你就錯(cuò)了,我們這里說的中間件,并不一定是那些如dubbo之類很牛逼的開源組件,而是,你們公司內(nèi)部自己使用的公共組件。
首先,我們要刻意培養(yǎng)這方面的能力,其次,我們要掌握一定的套路來快速地開發(fā)一款健壯的公共組件。
下面,我們就從這兩個(gè)方面分享一下我的心得。
我舉個(gè)例子,有的公司可能就只有一個(gè)大的單體應(yīng)用,有的公司可能有很多小項(xiàng)目,有的公司可能是很牛逼的微服務(wù),這些項(xiàng)目無疑來說都是完全不同的,但是,他們肯定也有一些共同點(diǎn),比如,他們都需要打印日志,所以,你是不是可以把日志這么一個(gè)非常簡單的東西拿出來做成一個(gè)日志框架呢?
日志這個(gè)東西看似比較簡單,你們公司可能用的還是spring自己啟動(dòng)時(shí)候的日志,但是,它其實(shí)也有很多可能性,或者說可變性,比如,日志切分,滾動(dòng)日志,異步打印日志,打印到遠(yuǎn)程,聚合日志,日志脫敏顯示(手機(jī)號(hào)不顯示全),日志可追蹤,等等,你看看,我就隨便說說,就能說出這么多日志相關(guān)的內(nèi)容,所以,它是很適合做成公共組件的嘛。
這樣,公司一旦有新的規(guī)范需要修改日志的時(shí)候,就只需要修改這個(gè)公共組件就可以了,所有項(xiàng)目升級(jí)個(gè)jar包就完事了,節(jié)省了大量的工時(shí),同時(shí),別人依賴你,你的影響力也就提升上去了,你就是你們公司日志這塊的專家了,別人遇到問題都得來請(qǐng)教你,是不是很爽。
即使你是單體應(yīng)用,也應(yīng)該培養(yǎng)這樣的能力,保不準(zhǔn)你哪天就走了,這個(gè)日志組件是不是可以帶到下一家公司,是不是可以讓你更快速地搭建新項(xiàng)目,是不是可以讓你在新的公司建立影響力。
上面只是說到了日志這么一個(gè)例子,其實(shí),還有很多可以提取的東西,最簡單的,你們公司用到什么開源組件,你就提出來,單獨(dú)打成一個(gè)jar包,讓別人來引用你,而不是去引用那個(gè)開源組件。
為什么這樣搞呢?因?yàn)檫@樣搞的好處是多多滴,比如,哪天有這么一些需求,kafka需要帶上用戶上下文,kafka消費(fèi)者可追蹤,elasticsearch存儲(chǔ)的關(guān)鍵數(shù)據(jù)需要加密,MySQL存儲(chǔ)的關(guān)鍵數(shù)據(jù)需要加密,給前端顯示的手機(jī)號(hào)需要脫敏,日志追蹤我們要換成skywalking,redis我們要搞集群,你想象一下,這些修改是不是需要所有項(xiàng)目都跟著修改,即使你只修改一行代碼,加一個(gè)攔截器,動(dòng)所有項(xiàng)目,也會(huì)被人打死,但是,你只是讓別人升個(gè)版本號(hào),這個(gè)別人還是很容易接受的。
說了這么多,那么,要如何快速地開發(fā)一個(gè)公共組件呢?
其實(shí),很簡單,我們還是以日志為例。
現(xiàn)在,1.0.0版本你只需要新建一個(gè)Maven工程,在resource下面丟一個(gè)logback-spring.xml,里面定義你的日志格式,一般還要做滾動(dòng)日志,按天切分,每10M一個(gè)文件,等等,模板很多,網(wǎng)上一搜一大把,我就不細(xì)說了。
這樣,一個(gè)日志組件就開發(fā)完了,你把它打包到Maven私倉別人就可以下載到了。
是不是很簡單?!
OK,現(xiàn)在大家都用到了你的日志組件,但是,有的項(xiàng)目發(fā)現(xiàn)同步打印日志有點(diǎn)影響性能,給你提了個(gè)需求,能不能把日志改成異步的。
很簡單,你只需要加一個(gè)異步的Append就完事了,重新打包成1.0.1版本,告訴他升級(jí)一下版本就完事了。
好了,現(xiàn)在有個(gè)使用使用微服務(wù)的項(xiàng)目給你提了個(gè)需求,我們服務(wù)太多了,能不能把日志打印到一個(gè)地方,我們方便統(tǒng)一查看?而且,我們想通過一個(gè)標(biāo)識(shí)能把一次請(qǐng)求所有的日志都查出來。
這很復(fù)雜嗎?其實(shí),也不難,簡單點(diǎn),你申請(qǐng)一個(gè)elasticsearch,增加一個(gè)打印到ES的Append就可以把所有日志打印到同一個(gè)地方了,查看特別方便,再也不用登錄沒臺(tái)機(jī)器去查看日志了。
那么,第二個(gè)需求呢?引入sleuth就可以讓你的日志具有可追蹤的效果,在你的Append中引用sleuth的traceid就可以了,這樣,微服務(wù)聚合可追蹤的日志問題就完美解決了。
甚至,你還可以做的更過分一點(diǎn),偷偷的接入調(diào)用鏈追蹤框架,比如,zipkin,完美展示調(diào)用鏈的過程,幫助快速排查問題,協(xié)助改造接口調(diào)用性能,等等。
相信有了這么一套框架,你在你們公司的地位就很穩(wěn)了,日志這塊你就是專家。
當(dāng)然,很多大公司這么一套東西都是現(xiàn)成的了,可能沒有你發(fā)揮的余地了,但是,不影響你培養(yǎng)這種思維。
比如,你可以去封裝kafka,elasticsearch,mybatis,redis,等等,只要你有這種思維,到處都是機(jī)會(huì)。
當(dāng)然,我上面說的很完美,在實(shí)際的操作中,可能會(huì)遇到各種各樣的問題,有問題才有價(jià)值,最常見的就是版本兼容,jar包沖突等問題,所以,你還需要掌握一些常用的技術(shù),比如,springboot的自動(dòng)裝配,Maven的option,盡量使用穩(wěn)定的技術(shù),不引入過多的依賴,等等,多寫多用多體會(huì)。
好了,今天的分享就到這里,上班去了。
本文轉(zhuǎn)載自微信公眾號(hào)「彤哥讀源碼」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系彤哥讀源碼公眾號(hào)。
本文題目:技術(shù)增強(qiáng):如何更優(yōu)雅地開發(fā)中間件?
文章路徑:http://m.5511xx.com/article/copdepp.html


咨詢
建站咨詢
