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