淺談我在.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)....
給我的感覺就是啥優秀的框架都可以往里面集成

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

 

Consul也提供圖形化界面,我這里是注冊了三個服務,可以體驗一下: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.穩


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM