今每天氣不錯,咱們來分享一個能讓你技術得到加強的主題: 開發中間件。前端
不少同窗聽到這個主題,可能會說咱們是小公司,沒有機會開發中間件。redis
那你就錯了,咱們這裏說的中間件,並不必定是那些如dubbo之類很牛逼的開源組件,而是,大家公司內部本身使用的公共組件。spring
首先,咱們要刻意培養這方面的能力,其次,咱們要掌握必定的套路來快速地開發一款健壯的公共組件。springboot
下面,咱們就從這兩個方面分享一下個人心得。mybatis
我舉個例子,有的公司可能就只有一個大的單體應用,有的公司可能有不少小項目,有的公司多是很牛逼的微服務,這些項目無疑來講都是徹底不一樣的,可是,他們確定也有一些共同點,好比,他們都須要打印日誌,因此,你是否是能夠把日誌這麼一個很是簡單的東西拿出來作成一個日誌框架呢?框架
日誌這個東西看似比較簡單,大家公司可能用的仍是spring本身啓動時候的日誌,可是,它其實也有不少可能性,或者說可變性,好比,日誌切分,滾動日誌,異步打印日誌,打印到遠程,聚合日誌,日誌脫敏顯示(手機號不顯示全),日誌可追蹤,等等,你看看,我就隨便說說,就能說出這麼多日誌相關的內容,因此,它是很適合作成公共組件的嘛。異步
這樣,公司一旦有新的規範須要修改日誌的時候,就只須要修改這個公共組件就能夠了,全部項目升級個jar包就完事了,節省了大量的工時,同時,別人依賴你,你的影響力也就提高上去了,你就是大家公司日誌這塊的專家了,別人遇到問題都得來請教你,是否是很爽。elasticsearch
即便你是單體應用,也應該培養這樣的能力,保不許你哪天就走了,這個日誌組件是否是能夠帶到下一家公司,是否是可讓你更快速地搭建新項目,是否是可讓你在新的公司創建影響力。微服務
上面只是說到了日誌這麼一個例子,其實,還有不少能夠提取的東西,最簡單的,大家公司用到什麼開源組件,你就提出來,單獨打成一個jar包,讓別人來引用你,而不是去引用那個開源組件。性能
爲何這樣搞呢?由於這樣搞的好處是多多滴,好比,哪天有這麼一些需求,kafka須要帶上用戶上下文,kafka消費者可追蹤,elasticsearch存儲的關鍵數據須要加密,MySQL存儲的關鍵數據須要加密,給前端顯示的手機號須要脫敏,日誌追蹤咱們要換成skywalking,redis咱們要搞集羣,你想象一下,這些修改是否是須要全部項目都跟着修改,即便你只修改一行代碼,加一個攔截器,動全部項目,也會被人打死,可是,你只是讓別人升個版本號,這個別人仍是很容易接受的。
說了這麼多,那麼,要如何快速地開發一個公共組件呢?
其實,很簡單,咱們仍是以日誌爲例。
如今,1.0.0版本你只須要新建一個Maven工程,在resource下面丟一個logback-spring.xml,裏面定義你的日誌格式,通常還要作滾動日誌,按天切分,每10M一個文件,等等,模板不少,網上一搜一大把,我就不細說了。
這樣,一個日誌組件就開發完了,你把它打包到Maven私倉別人就能夠下載到了。
是否是很簡單?!
OK,如今你們都用到了你的日誌組件,可是,有的項目發現同步打印日誌有點影響性能,給你提了個需求,能不能把日誌改爲異步的。
很簡單,你只須要加一個異步的Append就完事了,從新打包成1.0.1版本,告訴他升級一下版本就完事了。
好了,如今有個使用使用微服務的項目給你提了個需求,咱們服務太多了,能不能把日誌打印到一個地方,咱們方便統一查看?並且,咱們想經過一個標識能把一次請求全部的日誌都查出來。
這很複雜嗎?其實,也不難,簡單點,你申請一個elasticsearch,增長一個打印到ES的Append就能夠把全部日誌打印到同一個地方了,查看特別方便,不再用登陸沒臺機器去查看日誌了。
那麼,第二個需求呢?引入sleuth就可讓你的日誌具備可追蹤的效果,在你的Append中引用sleuth的traceid就能夠了,這樣,微服務聚合可追蹤的日誌問題就完美解決了。
甚至,你還能夠作的更過度一點,偷偷的接入調用鏈追蹤框架,好比,zipkin,完美展現調用鏈的過程,幫助快速排查問題,協助改造接口調用性能,等等。
相信有了這麼一套框架,你在大家公司的地位就很穩了,日誌這塊你就是專家。
固然,不少大公司這麼一套東西都是現成的了,可能沒有你發揮的餘地了,可是,不影響你培養這種思惟。
好比,你能夠去封裝kafka,elasticsearch,mybatis,redis,等等,只要你有這種思惟,處處都是機會。
固然,我上面說的很完美,在實際的操做中,可能會遇到各類各樣的問題,有問題纔有價值,最多見的就是版本兼容,jar包衝突等問題,因此,你還須要掌握一些經常使用的技術,好比,springboot的自動裝配,Maven的option,儘可能使用穩定的技術,不引入過多的依賴,等等,多寫多用多體會。
好了,今天的分享就到這裏,上班去了。
最後,我想問,大家公司有哪些封裝得不錯的組件呢?歡迎留言討論。