1. 程式人生 > >麻雀雖小,五臟俱全

麻雀雖小,五臟俱全

入職三年, 除了參與公司核心產品研發外,另外負責了一個2C的小專案: 呼叫API拿到解析結果 & 計費。 > 專案最初是.NetCore 1.0-Preview+sqlite部署在IIS上,閒來沒事,這個專案已經被我完全重寫,在此記錄一些自認為還比較`切合專案實際且平衡成本`的開發實踐。 用例圖如下: ![](https://imgkr.cn-bj.ufileos.com/30256f45-b24e-4926-a72a-832e19fadca5.png) ### 改造歷程 改造是個`持續迭代`的過程,期間深刻思考並應用了ASP.NET Core框架、TPL Dataflow、 Redis支撐訊息佇列、容器化、CI相關的知識點; 與此同時,為了適應更現代化的部署方式,專案歷經`單體程式--->容器化--->Docker-Compose部署--->DockerSwarm部署`; 當前部署圖如下: ![](https://imgkr.cn-bj.ufileos.com/410ae49f-ac66-48c0-b033-ab629a20576d.png) ## 業務重寫 #### 業務1 核心業務: C端請求--->發起百度雲API呼叫---->記錄解析結果,併發布到Redis訂閱, 我使用了`Actor模型`來達成目的。 資料流圖: ![](https://imgkr.cn-bj.ufileos.com/817425f2-855d-45d8-91d7-a40763fd334f.png) 1. [TPL Dataflow 流水線元件應對高併發,低延遲場景 相當巴適](https://www.cnblogs.com/JulianHuang/p/11177766.html) 2. [HttpClientFactory的套路,你知多少?](https://www.cnblogs.com/JulianHuang/p/12405973.html) #### 業務2: 利用`redis hash`儲存白名單租戶的配額、記錄配額消費,每次消費使用redis `HINCRBY myhash field -1`命令; 間隔30s將消費次數同步到sqlite. 1. [同步租戶白名單] [ASP.NET Core+Quartz.Net實現web定時任務](https://www.cnblogs.com/JulianHuang/p/10361763.html) 2. [C# Redis客戶端] [DotNetCore三大Redis客戶端對比和使用心得](https://www.cnblogs.com/JulianHuang/p/11418881.html) 3. [資料持久化] [EFCore批量操作,你真的清楚嗎?](https://www.cnblogs.com/JulianHuang/p/11897788.html) #### 業務3: 認證和安全 解析結果以ASP.NET Core靜態檔案伺服器的形式提供給Etl訪問, 這裡給這個靜態檔案伺服器訪問地址加上了基礎身份驗證; 專案後期添加了HTTPS證書、HTHS安全策略 1. [ASP.NET Core 實現基本認證](https://www.cnblogs.com/JulianHuang/p/10345365.html) 2. [白話文解讀HTTPS原理, 結合.NET Core聊一聊HTTPS應用方式](https://www.cnblogs.com/JulianHuang/p/11858800.html) 3. [HTTP Strict Transport Security (HSTS) in ASP.NET Core](https://www.cnblogs.com/JulianHuang/p/12156997.html) ## 技術改造 ### 分散式 在早期以單體程式部署的瞬間(服務不可用)會有少量流量無法處理;更糟糕的情況下,迭代部署的這個版本有問題,上線後無法運作, 更多的流量沒有得到處理。 引入`Redis List`資料結構實現了一個簡易版本的訊息佇列,解耦資料接收和 資料處理。 1.[ ASP.Net Core結合Redis實踐訊息佇列,從此放心安全迭代](https://www.cnblogs.com/JulianHuang/p/11314789.html) 2. [Quartz.NET對叢集的支援](https://www.cnblogs.com/JulianHuang/p/12720436.html) ### 面向Linux的部署 底層的技術棧是ASP.NET Core,推動專案從windows平臺遷移到Linux平臺部署 1.[ ASP.NTE Core跨平臺技術內幕](https://www.cnblogs.com/JulianHuang/p/10334506.html) 2.[Linux上最小化部署ASP.NET Core程式](https://www.cnblogs.com/JulianHuang/p/10455644.html) ### 容器化部署 雲原生時代,容器技術大行其道,欲罷不能。 1. [docker-compose是個好東西,越用越香](https://www.cnblogs.com/JulianHuang/p/10919346.html) 2. [ASP.NET Core暴露端點對接Docker健康檢查](https://www.cnblogs.com/JulianHuang/p/10837804.html) 3. [基於Docker-compose的Gitlab CI/CD實踐](https://www.cnblogs.com/JulianHuang/p/11346615.html) 4. [深度解讀Docker Swarm](https://www.cnblogs.com/JulianHuang/p/11641040.html) ## 總結 重寫是個`演進`的過程,引入了很多先進的輪子,也付諸了一些思考實踐。 在寫公眾號的過程中,偶爾會發現之前寫的文章有勘誤,所以這對**認知**而言,也是一個持續演進的過程(請持續關注部落格園原文)。 我始終認為 無論多小的程式,都有值得進化的切入點。 ![](https://imgkr.cn-bj.ufileos.com/92a1cae6-63da-4111-a375-323bf3e367ff.jpg) 這駕馬車隨著我的改造,已經最大化壓縮公司成本,SLA越來越高,我也不知道這架馬車什麼時候會被公司戰略放棄,但是隻要還在,定會進化