入职三年, 除了参与公司核心产品研发外,另外负责了一个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愈来愈高,我也不知道这架马车何时会被公司战略放弃,可是只要还在,定会进化不止。