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