從2021年初到現(xiàn)在,發(fā)生的事情太多了,有種都過了好幾年的錯(cuò)覺。上個(gè)東家因?yàn)槟承┰颍瑢?dǎo)致公司無(wú)以為繼。被迫另謀出路,又因?yàn)闀r(shí)間錯(cuò)不開,導(dǎo)致錯(cuò)失了兩個(gè)offer,但是總體來(lái)說,今年過的還是挺值的。
項(xiàng)目方面
年初
上半年起的項(xiàng)目是一個(gè)客服系統(tǒng)(sass版),技術(shù)架構(gòu)為go-zero、casbin、TiDB、MinIO、Nginx、Redis、ImageProxy、websocket等。
- tidb負(fù)責(zé)數(shù)據(jù)庫(kù)存儲(chǔ),建表的時(shí)候,注意列格式,不同列類型之間可能無(wú)法成功轉(zhuǎn)換。
- go-zero,純國(guó)產(chǎn),安裝goctl工具,根據(jù)編寫的api、rpc文件,自動(dòng)生成代碼;集成了服務(wù)負(fù)載均衡、服務(wù)發(fā)現(xiàn);支持middleware,接口參數(shù)約束;使用protobuf做grpc解析及壓縮;支持swagger集成;自定義代碼模版、命名風(fēng)格等等;內(nèi)部自帶sql和model(我是直接替換成gorm來(lái)操作數(shù)據(jù)庫(kù))生成;緩存如果使用集成的cache,那么redis只能選擇db0,容器部署的話,沒有問題,如果想指定db,需要自行聲明redis及初始化;功能挺完善的,更多功能請(qǐng)參考官方。
- casbin,來(lái)做用戶訪問權(quán)限控制。
- Minio,開源的對(duì)象存儲(chǔ)服務(wù)軟件,我們?cè)?jīng)拿來(lái)部署對(duì)象存儲(chǔ)業(yè)務(wù),所以順手就用這個(gè)了,支持桶的過期策略,文件下載地址簽名。
- Nginx,這個(gè)就不用說了,掛在前邊扛把子的。
- Redis,一些不需要入庫(kù)的信息,就緩存redis里了。
- imageProxy,這個(gè)高級(jí)的很,go編寫的,可以對(duì)請(qǐng)求的圖片進(jìn)行動(dòng)態(tài)尺寸壓縮,然后配置好cache目錄,掛在nginx后邊和minio的前邊,美滋滋的,省去了處理縮略圖的問題,想要多大size,就傳相應(yīng)的寬高。
- websocket,主要是用來(lái)和客服端進(jìn)行消息通信。
- etcd,這個(gè)是go-zero項(xiàng)目集群能夠跑起來(lái)的基礎(chǔ),所有的服務(wù)發(fā)現(xiàn)都是從這里獲取到的,這是一個(gè)高可用的分布式鍵值(key-value)數(shù)據(jù)庫(kù),內(nèi)部是raft協(xié)議作為一致性算法,如果部署集群的話,注意奇數(shù)個(gè)etcd服務(wù);想實(shí)時(shí)看數(shù)據(jù)內(nèi)容的話,推薦使用etcd-keeper。
這個(gè)項(xiàng)目用到的東西還是挺多的,數(shù)據(jù)庫(kù)設(shè)計(jì),項(xiàng)目模塊劃分,組件調(diào)研,全程參與,學(xué)到了很多東西。后來(lái)項(xiàng)目因?yàn)榍岸送系奶珖?yán)重,沒辦法如期交付,雖然當(dāng)時(shí)在公司確實(shí)被“驚”到了,雖然加班很辛苦,但是現(xiàn)在看來(lái),真的是,“不負(fù)韶華,只爭(zhēng)朝夕”,感謝老東家給的機(jī)會(huì)。
年中
年初的公司項(xiàng)目結(jié)束了,又開始尋覓新工作,找來(lái)找去,既不想離家太遠(yuǎn)(嘗試坐地鐵去上了幾天班,來(lái)回3小時(shí)浪費(fèi)在路上,感覺很難接受),也不想到手的米太少,找了一個(gè)離家不太遠(yuǎn)的公司上班,騎自行車20分鐘,時(shí)速8-9公里的樣子。
這項(xiàng)目已經(jīng)搞了一年多了吧(個(gè)人猜測(cè)),來(lái)了之后,主要是做一些功能優(yōu)化、迭代之類的,這里用的websocket做通信的。
- websocket主要是通過http(s)來(lái)進(jìn)行數(shù)據(jù)傳輸,主要遇到的問題,就是個(gè)別情況下,客戶端發(fā)送數(shù)據(jù),服務(wù)端收不到,經(jīng)過多方努力、驗(yàn)證,發(fā)現(xiàn)是tcp非常規(guī)斷開的情況下,客戶端和服務(wù)端都是收不到的斷開的信號(hào)的,所以唯一的辦法就是啟用心跳,心跳間隔短一點(diǎn),如果心跳丟失,主動(dòng)給他下線,但是因?yàn)槟承┰?,心跳功能還是沒加進(jìn)去。
- 學(xué)了學(xué)vue,做了個(gè)簡(jiǎn)單的網(wǎng)頁(yè)展示數(shù)據(jù)的,感覺上手雖然簡(jiǎn)單,做起來(lái)還是很復(fù)雜,而且用的vue2,router上還要指定低版本,不然路由有bug,axios組件需要開一個(gè)devProxy代理,不然請(qǐng)求會(huì)被cors策略干掉;開發(fā)的話,還是建議chrome做開發(fā),safari各種無(wú)響應(yīng);chrome還有一個(gè)啟動(dòng)參數(shù)來(lái)屏蔽掉安全策略,這個(gè)值得贊揚(yáng)。
- echarts組件多組線條的話,如果有0值線條,有bug,看官方也是這樣的,所以順手提了個(gè)bug,我改為單線條顯示了。
- 消息組件nats,訂閱、發(fā)布、數(shù)據(jù)持久化等
- gorm/gen,一個(gè)基于gorm的model、query代碼生成工具,支持多表,相比于xorm的工具,感覺在導(dǎo)出model這塊,差不多,sql操作這塊,gen對(duì)于query查詢支持更友好,查詢條件這塊可以避免sql拼接,來(lái)防止注入。
感慨,go的項(xiàng)目,代碼組織結(jié)構(gòu)總是各種各樣,沒有一個(gè)統(tǒng)一的風(fēng)格。目前覺得還是cobra來(lái)初始化項(xiàng)目,輔以一些普遍的項(xiàng)目代碼結(jié)構(gòu)風(fēng)格,這樣比較通用易懂。標(biāo)準(zhǔn)庫(kù)感覺用起來(lái)還是差點(diǎn)意思,沒有腳本語(yǔ)言的用起來(lái)舒服,易用性還是差點(diǎn),還需要自己包裝一下。
生活方面
3月份虛“驚”一場(chǎng),大家也沒辦法干活。
4月份因?yàn)檫@個(gè)“驚”,安排了一個(gè)新的辦公場(chǎng)所,但是大家還是忐忑的過了一個(gè)月。
5月份算是剛剛走上軌道,度過了安靜的3個(gè)月。
7月份下旬就特大暴雨,還記得當(dāng)時(shí)一幫同事在辦公室那看著窗外,柏油馬路從潮濕、個(gè)別地方變黃、到最后變成“黃色的河”,也就三四個(gè)小時(shí)。
不時(shí)的擔(dān)心,住的地方怎么樣,有沒有淹到,讓家里人隔一會(huì)兒下去盯一下,還好,住的地方地勢(shì)比較高,小區(qū)的業(yè)主委員會(huì)和物業(yè)也比較好,盡職盡責(zé),及時(shí)堆沙袋和排水,住的地方?jīng)]什么影響。
眼看到下班的點(diǎn)了,雨還是不停,打傘?還是算了,有風(fēng)也有雨,直接淋著回去吧??粗畹摹按篑R路”,湍急的洪流,我和另外一個(gè)1米8個(gè)頭的精壯同事,一起攙扶著,一步一步的從洪水中挪回去的,走了一小半,遇到積水深的地方,直接漫到脖子,沒辦法,我們又折返回去,換另外一條道。因?yàn)榭床坏剿旅娴目油莺驼系K物,差點(diǎn)崴在洪流中,沿途趴窩的、水里漂起來(lái)的車子更是數(shù)不勝數(shù),地勢(shì)高的地方,車主們都把車輛直接停到那里。3公里的路程,6點(diǎn)半出發(fā),走到8點(diǎn)半才到屋。第二天才知道洪水那么嚴(yán)重,地鐵里淹死的,隧道里淹死的,還有各種意外導(dǎo)致的,唉,為逝者默哀。
暴雨過后,大家都去瘋狂囤食物和水,好多地方?jīng)]水沒電,有同事住在16樓,要自己上下樓,想想都可怕,我一男的上下20層,都覺得腿有點(diǎn)軟,這時(shí)候覺得,住房,還是樓層低一點(diǎn)好。
暴雨過后,全國(guó)各地的救援小隊(duì)都開始馳援河南了,辦公樓旁邊的小區(qū),還停著甘肅馳援過來(lái)的發(fā)電車,大愛!感謝大家的捐錢捐物,讓受苦受難的同胞們有吃有喝有住。
這就是今年的回顧了,到過年的時(shí)候再補(bǔ)充。
-------------- 補(bǔ)充
小時(shí)候覺得過年最有吸引力的事情莫過于吃嘴了。
- 花菜,豬肉炒一下,加上豬油的香味、醬油的味道,美極了
- 金針菇、平菇,對(duì)于這種滑滑的美食,炒一下,能吃一碟子
- 豬腸(大腸、小腸),每年快年終的時(shí)候,娘親都會(huì)買一副大腸小腸,自己收拾趕緊,洗干凈,過年的時(shí)候,炒個(gè)熱菜,香的順嘴流油,這個(gè)只有過年的時(shí)候才會(huì)弄
- 大燴菜,各種菜色炒一大鍋,燜上粉條,初一的時(shí)候,弄上一大碗,爽的一匹
這些菜肴在小時(shí)候,都是過年了才有的,平時(shí)都是菜園子里的家常菜(白菜青菜蘿卜茄子韭菜之類),偶爾有老板來(lái)了,炒的菜也很豐盛,我也能跟上,過過嘴癮。
雖然不用上課了,但是寒假作業(yè)還是要寫的,有時(shí)候,寒假作業(yè)能推到走完親戚了還在寫,小時(shí)候比較傻,不知道學(xué)習(xí)的重要性。
農(nóng)村的年,從廿十三(小年)就開始了,廿十三烙火燒,廿十四掃房子,廿十五磨豆腐,廿十六去割豬肉,廿十七殺雞,廿十八把面發(fā),廿十九蒸饅頭,從年頭忙到年尾。
烙火燒需要一些器具,早些年沒有平底鍋,要么是買人烙好的,要么就得自己拿鋁之類的東西,找人融了,鑄一個(gè)平底的鍋,放在煤爐子上攤、炕。
掃房子是件很認(rèn)真的事情,從房頂、房檐、到院子廁所,都要認(rèn)證的清掃一遍,上一年門貼的,院里貼的,都要在廿十四當(dāng)天弄下來(lái),清理干凈,門框上的我記得拿著鏟子鏟了好久好久。
磨豆腐,這是個(gè)技術(shù)活,一般人做不來(lái),村里一般也就一個(gè)人會(huì),二十五那天,村里基本都是拿著豆子去找人家給弄,排隊(duì)排號(hào)的,喝過剛出鍋的豆花兒,兌上白糖,比現(xiàn)在的豆腐腦好喝多了,可惜現(xiàn)在沒得地喝了。豆子等人家加工完了,放在高粱桿制作的圓篦子上,靜置一晚上,就好了。
割豬肉,村里一般都會(huì)殺豬,然后大家伙都去買肉,大腸小腸都稱作豬雜,也是這時(shí)候買的。然后殺雞買魚,買回來(lái)后,拔毛刮鱗清理內(nèi)臟,然后鹵煮。
發(fā)面蒸饃,農(nóng)村里的酵子都是蒸饃的時(shí)候剩下的,誰(shuí)家沒有了,去鄰居家弄點(diǎn)過來(lái),然后蒸上白膜,棗花,還要留一部分弄炸油饃、炸果子(面頁(yè)穿個(gè)花,弄的樣子好了,父母表?yè)P(yáng)一下,心里就會(huì)美上好久)。
小時(shí)候和娘親趕年集,也是優(yōu)先顧嘴,甚至覺得買衣服褲子還得試,比較麻煩浪費(fèi)時(shí)間,哈哈,不過娘親也是看見好吃的就優(yōu)先給安排上(白吉饃夾肉沒少吃)。
除了吃,那自然就是玩了,村子里的小朋友們聚齊了一起玩耍,跳皮筋兒,滾鐵環(huán)(小時(shí)候還讓二伯從水桶上卸下來(lái)一個(gè)給我玩),扔沙包,捉迷藏,過家家等好多角色扮演類的,一幫人一窩蜂的一起玩,追來(lái)跑去的,從溝上邊跑到下邊,出得一身汗,還高興的不要不要的。
稍微大一點(diǎn),就更皮了,地上撿的鞭炮,哪里放鞭炮了,我們都是第一時(shí)間沖過去撿沒引燃的,然后收集很多了,再和別的小朋友一起玩,把鞭炮從中間折開,然后排一圈,弄個(gè)火柴,點(diǎn)一個(gè),引燃一圈,看著火藥呲呲的燒起來(lái),心里美的很。然后自己買點(diǎn)擦炮,或者在冰面上弄個(gè)小洞,然后把炮卡在那里,再引燃,或者弄一坨泥巴,把炮樹里邊,或者干脆找一坨??,塞上去,哈哈哈。啤酒瓶玻璃瓶、鐵盒子,反正是怎么玩著新奇,就怎么玩,當(dāng)然也沒少搞破壞,挨打,皮得很。
再后來(lái),知道錢了,就開始上心壓歲錢了,每年初一都要算算掙了多少壓歲錢,那時(shí)候1毛2毛,都要收好,因?yàn)樾r(shí)候就我一個(gè),叔伯們都好幾個(gè)孩子,每次過年,父母都要感嘆一下,掙的沒有發(fā)的多,總是虧。
后來(lái)去讀書了,和家鄉(xiāng)的小伙伴們離的遠(yuǎn)了,平時(shí)都湊不到一起了,每年也就放假能湊一起玩玩,還是一樣玩,不過項(xiàng)目從滾鐵環(huán)升級(jí)了,玩玩跳棋、象棋之類的,不像小時(shí)候那樣好動(dòng)了。
工作了以后,趕年集都趕不上了,衣服之類的,都要提前網(wǎng)上買好,不然過年回去買不到心儀的。收拾家里的事情,也幫不上什么忙了,只能回去趕個(gè)現(xiàn)成(雖然之前也幫不上大忙),村里的叔伯們都不怎么見了,一些住的遠(yuǎn)點(diǎn)的村民,都叫不上稱呼和名字了,感覺是越活越倒囊了,但是也沒辦法,腦子裝的和這些八桿子打不著,整日里都是為了”生計(jì)“奔波,過了年初七就要上班,年里廿十九才放假,有時(shí)候真覺得是過得不如父母,一年到頭都是忙,卻又忙不出什么名堂來(lái),總覺得是碌碌無(wú)為,卻又無(wú)可奈何。
所以,過年只是為了給小孩子放開了約束玩嗎。