1. 程式人生 > >淺談我在.net core一年裡的收穫

淺談我在.net core一年裡的收穫

 

前言:以前一直在winserver的環境裡從事web工作,安裝一個sqlserver,iis,把專案部署上面就OK了,簡單輕鬆
一.結緣nginx
以前一直聽說nginx這個反向代理的web伺服器,當玩nginx時才知道,iis為我們做了兩件事
1.應用程式伺服器(nfx),解析動態程式,例如aspx
2.反向代理,將解析後的資源或靜態資源,代理出去
.net core使用iis做反向代理與用nginx有區別呢(只說手感,手感你懂的)
nginx 配置可簡單,可靈活,可負載,可叢集,可過濾,方便查閱日誌.........更多牛逼的功能就沒有用到了

簡單配置(把本地7711埠代理到8852埠)

1 server {
2 listen 8852;
3 server_name localhost;
4 location / {
5 proxy_pass http://localhost:7711;
6 index /project1/toIndex;
7 }
8 }
View Code

簡單命令

service nginx start
service nginx restart
service nginx stop

iis 沒啥優點,工程使用iis跑出錯後,我就統一改成控制檯了,在linux上穩的一逼

二.supervisor
這是幹嘛的呢,就是守護你的程式的
你可能在想,我程式好好的,要它守護個雞毛
就你這臭脾氣,也就只有winserve慣著你,當你伺服器重啟的時候,winserver的iis會自動啟動站點,sqlserver的服務設定自動的,也會自動啟動
linux可就不慣著你了,當伺服器重啟的時候,那你得手動一個個start你的服務
為了解決這個麻煩,supervisor閃亮登陸,只要在supervisor裡配置你要守護的服務,伺服器每次啟動的時候,它都會去給你啟動服務,並且記錄了你服務控制檯的日誌,不光如此,它還提供了圖形化管理介面,你可以手動啟動關閉你的服務

 

每個服務新增一個配置檔案

配置如下(看的懂配置,其它的服務都是照著copy,簡單的很)

1 [program:Tibos.Api]
2 command=/bin/bash -c "dotnet Tibos.Api.dll"
3 directory=/home/wwwroot/NH.Core/Tibos.Api/PublishOutput/
4 autorestart=true
5 stderr_logfile=/var/log/Tibos.Api.err.log
6 stdout_logfile=/var/log/Tibos.Api.out.log
7 environment=ASPNETCORE_ENVIRONMENT=Production
8 user=root 9 stopsignal=INT
View Code

介紹了上面這對黃金搭檔,接下來介紹另一對黃金搭檔

三.Ocelot
這是.net core裡常用的一個APIGateway,園子裡資料已經非常多了,功能簡單的來說就是代理下游的服務,並暴露給消費者,裡面集成了負載均衡,統一授權驗證(IdentityServer4)....
給我的感覺就是啥優秀的框架都可以往裡面整合

四.Consol
這是一個玩服務註冊與服務發現的玩意,啥子意思呢
這就要從Ocelot做負載均衡來說起,我們來講一個小故事,老王管理著三個工人,地主從老王這裡拉工人去工地裡幹活
那麼就存在幾個問題
1.新人來了怎麼辦?
2.工人生病了怎麼辦?
這裡老王就是Consol,新人來了,首先要到老王這裡申請成為工人(服務註冊),這裡是工人主動申請的,可不是老王強迫的哦
這裡地主就是Ocelot,老王會定期給工人檢查健康(心跳包),並給它們安排職務,地主去老王那裡拉人(服務發現),然後幹活
當然這裡還有一個情況,就工人偶爾抽風,這裡可以使用Polly去處理,因為我還沒有用過Polly這裡就不做介紹

 

Consol也提供圖形化介面,我這裡是註冊了三個服務,可以體驗一下:http://193.112.104.103:9000/api/values

它會負載輸出三個服務的值,如果我使用supervisor停止了某個服務,也不會影響成像的正常執行,輕鬆實現熱更新

五.Docker
Docker牛逼,不要問我為啥子牛逼,就是牛逼,誰用誰知道
1.第一難題,解決萌新接觸Linux裝軟體問題
什麼.net core runtim,nginx,mysql......這一堆東西總要裝的吧,裝到哪去了呢,玩壞了怎麼辦?
在win上就遇到個問題,一個朋友裝sqlserver,然後解除安裝了,然後再裝sqlserver就死活裝不上去,清理登錄檔也不行,沒辦法重灌系統了.......
畢竟第一次玩linux,裝軟體肯定要去改配置什麼的,經常不知道裝到哪去了(好在都是預設位置,百度比較好找),怎麼解除安裝....
Docker就很好的解決了這個問題,基本上流行的東西docker hub上都有,拉個映象,建立個容器,在容器裡隨便玩,玩壞了,再建立個容器就好了
2.製作Docker映象
哇,這個可就真牛逼了,把自己的專案做成一個Docker映象,然後丟到Dockerhub(免費的映象倉庫)裡,這樣所有人都可以拉你的這個映象了
我把.net core runtime(200多m) 跟自己的程式一起打包成一個映象,這樣別的伺服器就不用安裝.net core runtime了,開箱即用
大家可以拉取我的映象玩玩(一個示例的webapi) docker pull wmowm/tibos:v1.0

Dockerhub大家也可以去註冊一個賬戶玩玩(映象257M,在倉庫壓縮後106M)

 

這裡我玩docker的一些常用命令

 1 docker images
 2 docker ps
 3 docker ps -a
 4 docker rm [id]
 5 docker logs --since 30m [id]
 6 docker start [id]
 7 docker stop [id]
 8 docker exec -it [id] /bin/bash
 9 docker inspect [id]
10 
11 
12 docker run --name mysq -p 3307:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
13 
14 --Dockerfile
15 
16 FROM microsoft/dotnet:2.1-aspnetcore-runtime
17 WORKDIR /app
18 COPY . .
19 EXPOSE 5101
20 ENTRYPOINT ["dotnet", "Docker.Test.dll"]
21 
22 docker build -t testimage .
23 
24 docker run --name=test -p 7711:5101 -d  testimage
25 
26 
27 --打標籤
28 docker tag [imageid] wmowm/tibos:v1.0
29 
30 --推送
31 docker push wmowm/tibos:v1.0
32 
33 --拉取
34 docker pull wmowm/tibos:v1.0
View Code

六.Jenkins
java寫的一款持續整合軟體,功能強大,對於我們.net core來說,也很方便,建議參考曉晨MM的部落格,直接用docker安裝,就是做多節點坑比較多,多折騰一下也能實現
說說.net core過程
1.資料夾方式打包,上傳到github
2.點選構建,拉取github上的檔案
3.拉取完成後,執行shell
如果一臺伺服器用xftp手動傳就可以了,如果是多臺伺服器,配置好多節點,就非常方便了
我寫的shell比較簡單,拉取到檔案後,把檔案copy到指定位置,然後重啟supervisorctl

 

七..netcore裡的一些優秀框架

1.楊總的CAP,滿星推薦,既可以做EvenBus又是分散式最終一致性的解決方案
2.Autofac,非常優秀的IOC容器
3.AutoMapper
4.NHibernate5.1,好吧,是我強行打了一波廣告,我個人覺得還是非常不錯的,推薦混合Dapper用,這樣CAP也可以用上,喜歡的可以去看看https://github.com/wmowm/nh.core
5.signalr nfx裡就用過了,非常不錯
6.QuartzNet 任務排程
還有好多,這裡就不一一列舉了.......

 

八.Linux,給我一種錯覺,只要你程式部署在Linux上面,就可以利用到Linux上的一切資源,大家就是一家人,也許這就是開源的魅力吧
1.沒有廣告
2.穩