入職三年, 除了參與公司核心產品研發外,另外負責了一個2C的小項目: 調用API拿到解析結果 & 計費。html
項目最初是.NetCore 1.0-Preview+sqlite部署在IIS上,閒來沒事,這個項目已經被我徹底重寫,在此記錄一些自認爲還比較
切合項目實際且平衡成本
的開發實踐。linux
用例圖以下:web
改造是個持續迭代
的過程,期間深入思考並應用了ASP.NET Core框架、TPL Dataflow、 Redis支撐消息隊列、容器化、CI相關的知識點;
與此同時,爲了適應更現代化的部署方式,項目歷經單體程序--->容器化--->Docker-Compose部署--->DockerSwarm部署
;redis
當前部署圖以下:sql
核心業務: C端請求--->發起百度雲API調用---->記錄解析結果,併發布到Redis訂閱, 我使用了Actor模型
來達成目的。
數據流圖:docker
利用redis hash
存儲白名單租戶的配額、記錄配額消費,每次消費使用redis HINCRBY myhash field -1
命令;
間隔30s將消費次數同步到sqlite.windows
解析結果以ASP.NET Core靜態文件服務器的形式提供給Etl訪問, 這裏給這個靜態文件服務器訪問地址加上了基礎身份驗證;
項目後期添加了HTTPS證書、HTHS安全策略安全
在早期以單體程序部署的瞬間(服務不可用)會有少許流量沒法處理;更糟糕的狀況下,迭代部署的這個版本有問題,上線後沒法運做, 更多的流量沒有獲得處理。
引入Redis List
數據結構實現了一個簡易版本的消息隊列,解耦數據接收和 數據處理。服務器
1. ASP.Net Core結合Redis實踐消息隊列,今後放心安全迭代
2. Quartz.NET對集羣的支持數據結構
底層的技術棧是ASP.NET Core,推進項目從windows平臺遷移到Linux平臺部署
1. ASP.NTE Core跨平臺技術內幕
2.Linux上最小化部署ASP.NET Core程序
雲原生時代,容器技術大行其道,欲罷不能。
重寫是個演進
的過程,引入了不少先進的輪子,也付諸了一些思考實踐。
在寫公衆號的過程當中,偶爾會發現以前寫的文章有勘誤,因此這對認知而言,也是一個持續演進的過程(請持續關注博客園原文)。
我始終認爲 不管多小的程序,都有值得進化的切入點。
這駕馬車隨着個人改造,已經最大化壓縮公司成本,SLA愈來愈高,我也不知道這架馬車何時會被公司戰略放棄,可是隻要還在,定會進化不止。