我的那些年(10)~來到更大的團隊,做了架構(gòu)師
- 又回石景山上班了
- 繼續(xù)使用LINQ+Mvc技術(shù)
- EF被團隊廣泛的使用
- 為項目上了全文檢索
- 研究了微軟的NlayerApp這個領(lǐng)域驅(qū)動框架
- 看了
Microsoft .NET企業(yè)級應(yīng)用架構(gòu)設(shè)計并得到了具體應(yīng)用 - 公司開始上redis高可用集群
- 公司開始上mongodb高可用集群
- 公司開始上moebius sqlserver高可用集群
- 公司項目用了Xamarin
- 公司項目用了node.js
- 公司項目使用了Lind.DDD框架
- 公司項目用了.net core
- 感覺自己是時候離開了
又回石景山上班了
2011年9月,我如愿的收到了xx教育集團的offer,我離開了良鄉(xiāng),去了更大的平臺發(fā)展,石景山對于我來說是個熟悉的地方,我的第一份工作就是在這里,就是計算機培訓(xùn)老師,薪資500,呵呵!轉(zhuǎn)眼已經(jīng)7年過去了,我終于做了程序員,那可是我上學(xué)時的夢想!老師總和我們說,如果你們能去中關(guān)村做個『藍領(lǐng)』,薪資也能到3,5千,那句話對我是多少的誘惑呀!今天終于實現(xiàn)了,可以對著電腦寫代碼了,而且還是為其它人設(shè)計總體架構(gòu),當(dāng)然也是有很大的壓力的,畢竟是第一次做系統(tǒng)架構(gòu),在一個系統(tǒng)開發(fā)過程中,問題總會出現(xiàn),就像墨菲定理一樣,問題只要有可能出現(xiàn),就一定會出現(xiàn)!我始終相信,==出現(xiàn)問題,總有解決的辦法,只是我們還沒有找到==!
繼續(xù)使用LINQ+Mvc技術(shù)
來到新公司后,看了他們的項目,也是使用linq+mvc做的,對我來說是輕車熟路,在開發(fā)過程中有一些比較性能差的寫法,我也都指了出來,像IQueryable和IList的區(qū)別,什么時候用它們等,為項目提供了分頁控器,對seo這塊的優(yōu)化,重寫了一些模塊的路由,為linq提出了倉儲模式的概念,幾年后發(fā)展大部分框架都使用了repository模式,而目前的springboot.jpa也是使用了這種統(tǒng)一的數(shù)據(jù)訪問模式,呵呵。
EF被團隊廣泛的使用
在項目上線后,我們又接了新的項目,這回公司叫我負(fù)責(zé)整個的架構(gòu),我提出了ORM使用ef來代替linq,因為linq2sql這個工具微軟已經(jīng)不更新了,而ef是他們的主流ORM工具,所以新項目用了ef,并且我寫了關(guān)于EF的倉儲實現(xiàn),封裝了curd實體和curd集合的操作,添加了對分頁,排序,動態(tài)查詢的支持,那應(yīng)該是2012年的事,在這一年我的博客已經(jīng)有2年的歷史 了,也有不多粉絲,有時候,博客成為我學(xué)習(xí)的動力!
為項目上了全文檢索
項目在查詢上表現(xiàn)不是很好,對于查詢條件的選擇是多樣的,需要支持like檢索,我們知道數(shù)據(jù)庫使用like是不走索引 的,也就是說不走b-tree,這樣對數(shù)據(jù)庫性能影響很大,基本就是全表掃描,所以我打算上lucene這個全文檢索工具,這個我在上一家單位用過,缺點就是索引文件更新實時性問題,我在網(wǎng)上找了一些資料,發(fā)現(xiàn)他公開了一些api,我于是在后臺管理中添加了對它的支持,當(dāng)后臺有資源更新中,我就出發(fā)lucene的api,讓索引文件按需更新,注意只是更新需要的那部分資源,后來這種技術(shù)在solr里被友好的實現(xiàn)了,哈哈!
lucene是solr的前身,solr只是對lecene進行的二次封裝,以lucene為核心的框架還有elasticsearch。
研究了微軟的NlayerApp這個領(lǐng)域驅(qū)動框架
2013年,在工作之余,我也看了一個微軟官方為DDD設(shè)計的demo,即NlayerApp,這個框架寫的不錯,分層清晰,與傳統(tǒng)N層架構(gòu)有很大區(qū)別,它以領(lǐng)域?qū)ο鬄楹诵模绻愕念I(lǐng)域?qū)ο笮枰獙?shù)據(jù)庫操作,你需要在領(lǐng)域?qū)佣xIRepository接口,然后在數(shù)據(jù)層去實現(xiàn),也就是說,數(shù)據(jù)層是依賴領(lǐng)域?qū)拥?,?shù)據(jù)層只負(fù)責(zé)持久化數(shù)據(jù),一般地,我們在設(shè)計倉儲模式時,有一個統(tǒng)一的泛型對象,程序員只實現(xiàn)自己具體的持久化邏輯就可以了,不需要關(guān)心底層的實現(xiàn)。
領(lǐng)域驅(qū)動設(shè)計的宗旨就是一切于領(lǐng)域模型為核心,一切由它去展開,持久化只是一種工具,它并不是必須的。
看了Microsoft .NET企業(yè)級應(yīng)用架構(gòu)設(shè)計并得到了具體應(yīng)用
在工作之余,我還看了微軟的《Microsoft .NET企業(yè)級應(yīng)用架構(gòu)設(shè)計》這本書,這書可以說對架構(gòu)師的朋友是一個大餐,里面從代碼重構(gòu),設(shè)計模式應(yīng)用到分層設(shè)計原則應(yīng)有盡有,我前后看了好幾篇,自己也把核心的內(nèi)容提取出來,寫在word里了,記得還給同事們講過,確實,一本好書對于程序員來說非常重要,他使你更加快速的成長!
- Microsoft .NET企業(yè)級應(yīng)用架構(gòu)設(shè)計
- 代碼大全
- 重構(gòu),改善即有代碼的設(shè)計
- 代碼之美
- 代碼之殤
- 你必須知道的.NET
公司開始上redis高可用集群
2013年,公司在自己的服務(wù)上搭建了redis,開始只是單點模式,之后發(fā)展到了高可用集群模式,我們使用redis時還沒有cluster,所以集群用的是Sentinel+Twemproxy實現(xiàn)的,Twemproxy就是代理,程序端直接與它通訊,而sentinel負(fù)責(zé)與redis db通訊,當(dāng)db宕機時,它會通訊sentinel,然后sentinel會把最新的redis master告訴Twemproxy,這有一個好處就是程序端不需要關(guān)心真實的redis db,而如果你的項目比較小,也可以直接用sentinel就可以實現(xiàn)高可用,我的lind.ddd.nosql里對 redis進行了二次封裝,已經(jīng)完全支持這種哨兵集群了。
redis sentinal會封閉一些指令,只公開幾個需要的指令,這是一種安全的考慮
公司開始上mongodb高可用集群
在2014年時,公司有了java部門,負(fù)責(zé)另一個項目,而他們的經(jīng)理要求上mongodb,說它是個文檔數(shù)據(jù)庫,對日志這種數(shù)據(jù) 支持的很好,而且支持復(fù)雜的查詢,而且本身就可以實現(xiàn)高可用,分片,復(fù)本等模式,于是CTO同意上mongodb了,這以后的項目里,像考題,留言,投訴等非關(guān)鍵數(shù)據(jù)都存儲到了mongodb上,我做為和運維走的很近的人,也和運維一起搭建起了mongodb集群,做為.net團隊的架構(gòu)師負(fù)責(zé)新技術(shù)的研究工作。
mongodb的集群配置需要注意,為了讓選舉有效,需要集群節(jié)點為奇數(shù)個
公司開始上moebius sqlserver高可用集群
公司的sqlserver數(shù)據(jù)庫一直是單節(jié)的,而在業(yè)務(wù)和數(shù)據(jù)量上來之后,單點是靠不住的,所以我們考慮為sqlserver上集群,它本身沒有什么好的方案,所以我們選擇了第三方moebius來做這事,它是一個高可用集群方案,有一個主節(jié)點和若干個從節(jié)點,主節(jié)點負(fù)責(zé)寫數(shù)據(jù),然后實時同步到從節(jié)點,當(dāng)你的請求是select時,它會走讀節(jié)點,當(dāng)你的請求是update,delete,insert,transaction時會走寫節(jié)點,由于moebius采用了實時同步方案,所以需要用到msdtc,即分布式事務(wù),這對于多點數(shù)據(jù)同步來說是有負(fù)作用的,所以你的讀節(jié)點不要太多,太多反而對寫影響比較大。
moebius一般設(shè)置一個主,兩個從,然后它對外暴露的是vip,程序端直接連接vip地址,然后它會對sql語句進行攔截,將對應(yīng)的語句進行轉(zhuǎn)發(fā)
公司項目用了Xamarin
公司開發(fā)了一個手機的h5網(wǎng)站,希望開發(fā)一個app,然后登陸這塊用原生的,然后頁面用h5網(wǎng)站即可,原生的我們使用了微軟的xamarin來實現(xiàn),我主要做的是一個基于安卓環(huán)境的app,比較簡單,但確實可以實現(xiàn),打包之后體積比較大,兼容性給它滿分!
公司項目用了node.js
在2015年公司打算用node.js做高并發(fā)項目的入口,然后在node.js項目里再進行二次轉(zhuǎn)發(fā),node.js由于自己的特點,它是單線程的,使用方法回調(diào)實現(xiàn)異常,它是非阻塞的產(chǎn)品,與現(xiàn)在比較火的go類似,只不過后者是多線程的,它們最大優(yōu)勢就在于高吞吐量的支持上,我們的node.js運行在centos上面,之后把它部署到了docker里運行,當(dāng)然這已經(jīng)是2017年的事 情了,docker我主要在下一家單位用的比較多,后面也會講到。
公司項目使用了Lind.DDD框架
在公司6年時間里,自己貢獻了lind框架,主要用在底層框架上面,把它發(fā)布到nuget之后,公司的新項目可以使用使用,而且我還把后臺模塊進行了封裝,使得他可以在幾分鐘內(nèi)完成一個后臺管理系統(tǒng)的搭建工作。
lind框架主要包括了對很多第三方組件的二次封裝,統(tǒng)一進行了配置和封裝,讓開發(fā)人員更方便的使用,像cache,redis,mongodb,solr,ef,dapper,domain,logger都進行了統(tǒng)一的配置
公司項目用了.net core
2016年底,公司打算在一個小項目中使用.net core,當(dāng)時它才出來沒多久,只是記得是.net core1.1吧,自己也學(xué)習(xí)了一下,不過沒有更深入的研究,只是對efcore進行了設(shè)計,但也出現(xiàn)很多問題,估計這些東西要到.net core2.0才能解決了
工作之余愛上了踢毽子
工作之余,我同事們也到天臺上踢踢毽子,鍛煉一下身體,一天總坐著肯定是不行的,大家在一起還打了比賽,每兩個人一組,中間一個大網(wǎng),像是打網(wǎng)球,只不過我們用腳來完成!
感覺自己是時候離開了
在2017年,我感覺自己在公司也沒什么發(fā)展了,想出去看看,于是開始找工作了,事實上,我這個年紀(jì)找工作不是一件容易的事,需要公司對我非常了解,然后非常需要我這種對.net框架比較有經(jīng)驗,對技術(shù)比較有追求的人才會錄用我,這一點我自己也很清楚,因為咱們學(xué)歷不高,不太會說話,要的薪資也不低,所以只能相互碰了!
每個人都應(yīng)該對自己的未來有個規(guī)劃,走技術(shù),還是走管理,自己心里要有明確的答案!