做中介軟體的這兩年總結(201704 201905)

2022-07-03 21:06:09 字數 3900 閱讀 2115

新的篇章即將拉起,是時候給自己的這兩年來個總結了。

這兩年,從北京來到了杭州。從乙個北漂變成了杭漂,買了房,買了車,養了條柯基,在這座江南城市生了根。父母健康,家庭和睦。日子過得溫馨,感謝父母,感謝媳婦。

這兩年,完成了研究生的課程,通過了研究生的答辯。不枉我們杭州北京來回跑,飛機高鐵臥鋪的來回切換。每次都從南京轉車,一晚臥鋪的臥鋪到北京。飛機取消了好幾次。在學校前面的賓館住了好多次,成了他們的vip。認識了很多其他行業的人,加了很多其他的非技術群,開闊了眼界,不再侷限於技術的小圈子裡。堅定了,只有做實業,才能興國的理念。

這兩年,呆在了一家公司。見證了公司業務的不斷發展,也見證了一些業務的失敗。成功的原因很多,失敗的原因也很多。真實見證了研究生老師所說的「四拍」:拍腦袋做決定、拍胸脯打包票、出了事情拍大腿、最後拍屁股走人。

在來這家公司之前,對做中介軟體還是滿懷憧憬的。當時,做了幾年的業務,被產品、測試各種需求,搞的頭都大了。心想,一定要做技術底層的東西,不要再做這些亂七八糟的需求了。相信很多同學也一定有這樣的想法,覺得做中介軟體可以更加深入技術底層的東西,我可以告訴你,是的,你有時間看更多的原始碼了。不用天天被產品和測試追著,被專案經理追進度了,因為都需要你自己把控。

但是,也有各種煩心事。

這兩年,做了兩年中介軟體。說是做中介軟體,其實中間經歷了各種坎坷,方向也變了不少。說實話,做中介軟體,雖然看起來更加偏技術一些,但是比做業務來說更加心累,承受了更大的壓力。因為中介軟體是為業務負責的,不能出錯,一旦出錯,就是基礎設施出了問題,基本上就是p0的故障了。

做中介軟體,自己就是產品經理、專案經理、測試、開發、運維,得自己去收集需求,去挖掘需求,要有一定的技術前瞻性,能夠對標業界的標桿產品,要能推動中介軟體的推廣。也要能抗事,因為業務方的需求千奇百怪,你得去滿足他們。

做中介軟體很煩,很難有成果,不管大廠小廠都一樣。聽說大廠的中介軟體就是客服,小廠的中介軟體基本就是開源的拿來改改,沒有太大的成就感。

我這兩年,主要做了幾件事。

來的時候,公司的定時任務都是單機quartz的,相當危險。也是因為當時的業務量不大,所以單機也就單機跑著了。進來的第一件事情,就是研究了下elastic-job,讓大家把定時任務都遷移到了這個上面。很可惜的是,由於開發者從噹噹離職了,elastic-job基本上不再維護了。不過穩定性還是能夠得到保證的。這兩年,沒出什麼問題。中間有個小插曲,業務方對elastic-job的分片理解不夠透徹,導致現在很多系統的定時任務分片數還是1,基本上也是單機執行,不過有個故障轉移的能力。因為業務方在原來的基礎上,封裝了一層,裡面寫死了分片數。開源框架裡面的各種概念,還需要不斷地宣貫,業務方才能運用到他們的業務邏輯**中。目前公司所有的定時任務,都已經接入了elastic-job。

這件事,是和elastic-job是同一時間做的,但其實他們是兩件事情。延遲佇列的需求,**於業務方,具體的場景有不少,有興趣的同學可以自己網上搜搜,簡單的基於redis的zset實現了下。後來業務方也自己實現了一套,原理類似。可以看出來,業務方同學也喜歡自己造輪子。

公司的訊息佇列選擇,據說經歷了幾個階段。在初期的時候,有在用rocketmq,後來發現這個占用機器記憶體太高了,而且是阿里維護的,說實話,當時阿里的開源做的很不好,很可能做著做著就沒人維護了(參考當年的dubbo,不過公司還是毅然決然選擇了dubbo)。所以後來,公司決定,採用kafka作為唯一的訊息佇列。

我來了之後,讓我做一些kafka的監控,主要監控kafka中訊息的堆積,在訊息有堆積的時候進行報警。當時公司有kafka-manager,但是kafka-manager是scala寫的,只能看到堆積的數量,沒有監控告警的功能。所以經過調研,我們選擇了kafka-eagle,國人寫的乙個kafka監控工具,改造了內部的一些bug和告警機制,就匆匆上線了,效果也還可以。後來有其他同學接手了mq這塊,他對kafka-eagle做了進一步的一些改造,能夠批量新增告警資訊,能夠釘釘告警,告警的效率也有了提公升。

後來,我們又發現了另一款開源的告警工具-burrow。這款工具,可以對乙個時間視窗的訊息堆積進行告警,也就是能夠補充kafka-eagle的缺失。kafka-eagle只有等訊息堆積到了一定數量的時候才會告警,而且是定時跑的(5分鐘一次),也就是設想這樣的場景,如果某個partition突然間不消費了,但是訊息的數量又不大,kafka-eagle是沒法告警出來的,但是burrow能告警出來,因為它是根據乙個時間視窗的趨勢告警的。也很感謝那位同學的改造,做了一些易用性的改造,同時新增了郵件告警、釘釘告警等。

在公司的資料量不斷累積、公司業務不斷發展壯大的情況下,分庫分表是乙個勢在必行的事情。

在我們決定使用sharding-jdbc之前,我們用過mycat。在一定的歷史時期內,是乙個解決方案,但是僅僅用了一段時間後,就因為他不斷出現的問題,而放棄了。在這說一句,mycat的**質量真的堪憂,可能開源的這批人,想著怎麼去做解決方案,想著去開培訓班賺錢了,**感覺是實習生寫的,**風格不統一,讓人沒法看。

後來,我們一直在跟進sharding-jdbc。當時,這是由噹噹維護的乙個開源專案,後來,負責人去了京東,後來sharding-jdbc改名為sharding-sphere,並在apache孵化。選擇sharding-jdbc的原因,主要有幾個原因:

我們引入sharding-jdbc也分了幾個階段,走了一些彎路。第乙個階段,我們做了個sharding-jdbc的後台頁面,對原始碼進行了一些改造,頁面上進行資料來源配置,並最終同步到zookeeper中。業務方配置namespace和資料來源名稱,在啟動時拿到配置,生成分庫分表資料來源。第二個階段,對分片演算法進行了封裝,提供了簡單的分片演算法,比如hash、mod等,業務方配置演算法,生成最終的演算法。這個階段,對原始碼也有一定的改動。第三個階段,依賴於sharding-jdbc的jar包,封裝演算法,不改原始碼。

這塊前前後後加推廣,做了一段時間,目前公司一些比較核心的業務,已經上了分庫分表,目前穩定性也有一定的保證,當然,推廣的過程中,也遇到了一些坑,這裡不細說。

這段時間的積累,也為後面要做的事情,做了一些鋪墊。

在上分庫分表之前,我們就對資料同步開始了一定的調研。因為業務的分庫分表,勢必會遇到以下幾個問題:

這是兩個典型的場景。

第乙個的解決方案可以使業務方自己去做,也就是業務自己寫定時任務,在低峰期進行資料遷移,寫到分庫分表中;另乙個解決方案就是提供通用的中介軟體來做資料實時同步,這樣對業務方的影響最小。

第二個場景就是,分庫分表後的管理端查詢,查詢條件可能很複雜,這時候不可能通過分庫分表來查,需要把分庫分表的資料聚合到乙個地方,給後端進行查詢。

當然,還有乙個場景,就是資料庫的前後端隔離,前端庫面向外部使用者,後端庫面向管理端。這時候也需要進行同步,當然也可以通過掛從庫的方式來做。

這塊,我們首先調研的是,阿里開源的canal,以及配套的otter。但是otter不支援分庫分表,它支援的是類似drds、mycat的sharding proxy,對於客戶端的sharding,很難支援,我們當時對otter進行了改造。但是效果不好,因為otter本身裡面的一些邏輯複雜,不太可控,而且otter只支援增量同步,不支援全量同步,所以在做了一段時間後,決定自己研發資料同步的元件。

得益於在sharding-jdbc中的積累,我們對分庫分表的實踐經驗還是比較豐富的,所以整個開發的過程中比較順利。我們採用了全量+增量的同步模式,滿足了我們的業務場景。

涉及到資料這塊的中介軟體,細枝末節的東西很多,我們需要和dba緊密配合,同時也需要不斷地實踐,才能做出一些成果出來。所幸,我們有了這樣的機會,感謝公司及領導。

資料同步的元件目前已經服務了很多的業務系統,穩定性和效能也有了一定的提公升,後面還需要做一些優化的工作,一些精細化的事情,當然也有一些更加複雜的業務場景需要滿足(目前公司規模下,還未遇到),這塊留給後來人做吧。

中間還做了一些其他的事情,包括配置中心、配置中心的封裝等。主要工作是看看原始碼,進行業務改造,自不必細說。目前主要還是負責資料中介軟體這塊。

兩年的時間,轉瞬即逝。現在還記得當時從北京過來時的樣子,懵懵懂懂,現在感覺已經看盡了世間繁華,惟願歲月靜好。感恩所有幫助過我的人,感恩家人,嶄新的序幕即將開啟,我將一往無前,繼續前行。

折騰的這兩年多。

從2017年3月開始。我從東莞的南城 08年 3月到17年3月 一直生活的廣東地方,為了換乙個心情環境,也為了換工作轉型,我下定恨心離開了南城。在南城,確認有發生過很多的故事,從到東莞以來,差不多一直生活的地方了,也藉此誕生我兩個寶貝的孩子,在此應該說感謝曾經為付出的她吧!現在在這,也只能用這個稱呼...

與使用者體驗的這兩年

概念理解 使用者體驗 以使用者為中心 互動設計 資訊架構 實踐操作 目標 流程 方法 交付物 產品管理 2005年初,在google搜尋結果裡鏈結到的uigarden第一次看到 使用者體驗 程式設計客棧rdquo 那會兒的真實感受,就是作為網際網路使用者的我們,終於有人關心了。最想做的事情,就是把我...

我的這兩年,從業六年過程的低潮兩年!

也許我的命運非常的好,01年上半年還沒有大學畢業的時候,就進入了大型寬頻通訊企業,從事軟體開發的工作。在我職業生涯的第乙個公司裡面,沒有太大的壓力,同事也非常的熱心,讓我很自然很平和的和社會接上了軌,同時在裡面也學到了不曾接觸的東西,受益匪淺。待了一年後,我跳槽了另乙個公司,在這個公司裡面我做的時間...