麻雀虽小,五脏俱全
入職三年, 除了參與公司核心產品研發外,另外負責了一個2C的小項目:調用API拿到解析結果 & 計費。
?項目最初是.NetCore 1.0-Preview+sqlite部署在IIS上,閑來沒事,這個項目已經被我完全重寫,在此記錄一些自認為還比較切合項目實際且平衡成本的開發實踐。
?用例圖如下:
改造歷程
改造是個持續迭代的過程,期間深刻思考并應用了ASP.NET Core框架、TPL Dataflow、 Redis支撐消息隊列、容器化、CI相關的知識點;
與此同時,為了適應更現代化的部署方式,項目歷經單體程序-->容器化-->DockerCompose部署-->DockerSwarm部署。
當前部署圖如下:
業務重寫
業務1
核心業務: C端請求--->請求百度云API---->記錄解析結果,并發布到Redis訂閱, 我使用Actor模型來達成目的。
數據流圖:
TPL Dataflow 流水線組件應對高并發,低延遲場景 相當巴適
HttpClientFactory的套路,你知多少?
業務2:
利用redis hash存儲白名單租戶的配額、記錄配額消費,每次消費使用redis HINCRBY myhash field -1命令;
間隔30s將消費次數同步到sqlite.
[同步租戶白名單] ASP.NET Core+Quartz.Net實現web定時任務
[C# Redis客戶端] DotNetCore三大Redis客戶端對比和使用心得
[數據持久化] EFCore批量操作,你真的清楚嗎?
業務3:認證和安全
解析結果以ASP.NET Core靜態文件服務器的形式提供給Etl訪問, 這里給這個靜態文件服務器訪問地址加上了基礎身份驗證;
項目后期添加了HTTPS證書、HTHS安全策略
ASP.NET Core 實現基本認證
白話文解讀HTTPS原理, 結合.NET Core聊一聊HTTPS應用方式
HTTP Strict Transport Security (HSTS) in ASP.NET Core
技術改造
分布式
在早期以單體程序部署的瞬間(服務不可用)會有少量流量無法處理;更糟糕的情況下,迭代部署的這個版本有問題,上線后無法運作, 更多的流量沒有得到處理。
引入Redis List數據結構實現了一個簡易版的消息隊列,解耦數據接收和 數據處理。
ASP.Net Core結合Redis實踐消息隊列,從此放心安全迭代
Quartz.NET對集群的支持
面向Linux的部署
底層的技術棧是ASP.NET Core,推動項目從windows平臺遷移到Linux平臺部署
1.?ASP.NTE Core跨平臺技術內幕
2. ASP.NET Core在Centos上的最小化部署實踐
容器化部署
Docker-compose是個好東西,越用越香
誰說docker-compose不能水平擴展容器、服務多實例?
ASP.NET Core暴露端點對接Docker健康檢查
Gitlab CI/CD的實踐
深度解讀Docker Swarm
總結
重寫是個演進的過程,引入了很多先進的輪子,也付諸了一些思考實踐。
在寫公號的過程中,偶爾會發現之前寫的文章有勘誤,所以這對「認知」而言,也是一個持續演進的過程。
這駕馬車隨著我的改造,已經最大化壓縮公司成本,SLA越來越高,我也不知道這架馬車什么時候會被公司戰略放棄,但是只要還在,定會進化不止。
關注我們
更多干貨及潮流技術
請關注Dotnet Plus公眾號
▲
▲
“閱讀全文,體驗更佳”
總結
                            
                        - 上一篇: 使用 kind 快速搭建一个 Kuber
 - 下一篇: 内存迟迟下不去,可能你就差一个GC.Co