联系方式
- Email:
node -e "console.log(atob('bWluZ3lhbmc5MUBxcS5jb20='))" - 微信:
node -e "console.log(atob('bWluZ3lhbmc5MQ=='))"
个人信息
- 工作年限:10 年
- Github:https://github.com/mingyang91
- 期望职位:资深程序员、架构师、Scala 开发、Rust 开发
- 期望城市:上海
- 学校:University of East London - BSc Computer Science
简介
- 精通 Scala 与 TypeScript ,同时熟练使用 Rust 与 Kotlin 。
- 精通 DevOps ,包括 Kubernetes 与 AWS 。
- 精通 Reactive Stream ,异步与并发编程。持续学习现代编程语言与特性,熟练在项目中使用多种语言开发。
- 精通构建云原生系统。
- 有多种项目经验,且近 11 年一直从事一线编码工作。
- 社区分享:2020 年 9 月 Scala Meetup Speaker 《 ZIO 入门分享》。
- 在数学 /计算机科学 /前端 /后端方面基础知识扎实。
- 兴趣:近几年对 PLT / 分布式 / 云原生 / 高性能原生软件 / 函数式编程 / 数学 感兴趣。
项目经历
1. 高校邀请学术项目
检测报告识别软件
受复旦大学放射医学研究所邀请开发基于机器学习的自动文档识别桌面软件,该项目界面使用 Kotlin 开发,可运行在 Windows 、MacOS 、Linux 三大平台; SVM 模型部分使用 Python 开发。可自动识别 PDF 文档页面类别并重新组织检测报告,使其符合国家标准《放射卫生技术服务机构管理办法》。
检测报告生成管理软件
受复旦大学放射医学研究所邀请开发文档管理系统 Web 软件。该项目使用 Scala3 + React 开发,内置公式,可根据录入指标自动完成结果计算和评估是否符合检测标准,并生成国家标准检验检测报告。
体素模型转换软件
受复旦大学放射医学研究所邀请开发模型转换软件。以国际放射防护委员会 (International Commission on Radiological Protection) 所发布的成人计算参考体模( 2009 )和儿科计算参考体模( 2020 )为标准,本软件将以上模型转换为 Monte Carlo 粒子模拟软件 Fluka 所支持的输入格式,以计算不同当量辐射水平下,高能粒子束穿透人体时所产生的粒子衍射范围。
2. 上海穰川信息技术有限公司(麦穗人工智能) ( 2016 年 4 月 ~ 至今 )
基础设施建设
为公司搭建一整套基础设施,包括云端与本地的软硬件平台等,其承载公司所有业务与机器学习的计算、存储、调度、监控任务;同时带领出一支精通 kubernetes 的开发团队。
人才智能平台核心中间件
人才智能平台是穰川的核心对外业务系统,提供人才招聘全流程管理,以及简历收录、解析、企业内人才盘点与流转、人选与职位的相互推荐与搜索等基于 AI 的智能功能。本项目在数据变更时生产事件以驱动下游机器学习流水线完成分析功能。我在项目中:
- 设计基于事件驱动的整套系统架构。
- 指导同事完成用户管理模块、注册、登录、集成第三方登录等功能。
- 技术预研与疑难问题调查,引入 Cassandra 、Knative 、Serverless 等现代技术并跟踪落地到项目中。
- 提供对资源管理的架构设计,防止部分恶意请求高频访问,干扰其他租户正常运行,降低系统成本。
- 带领资深同事完成核心中间件开发。
- 集成各大招聘网站以及北森、谷露等多种数据源渠道。
- 成功交付京东方定制系统项目。
项目业绩:
- 分布式高可用:本项目根据访问压力,可部署超过 100 节点,分布式存储数百亿 K/V 数据,无单点故障,无主节点不需要主从切换。
- 高吞吐低延迟:部署 3 个微型节点即可达到数千 QPS 的吞吐量,数据取回与数据失败变更的延迟极低,近似访问内存。数据变更会将事件持久化至 Cassandra 集群。
- 事件溯源:系统中的数据可回溯至系统建立以来的任意时间点,可永久留存审计日志。
- 关系查询便捷:拥有 GraphQL 的读取端。
技术亮点:
- 完全贯彻 CQRS/Event Sourcing 思想
- 编写解释器,可以根据数据的 Schema ( Open API) 生成 GraphQL 类型定义与关系定义,根据图的节点与关系进行多跳查询。
- 集成 Open Telemetry 分布式全链路追踪,横跨分布式节点通信、Kafka 、Knative 等众多中间件与内部其他服务。
- 开放众多指标供 Prometheus 采集,应用具有非常优秀的可观测性。
招乎招聘自动化系统( Scala 版)
招乎是穰川的上一代核心对外业务系统,实现人才招聘全流程管理与 AI 增强功能。
本项目从 NodeJS 迁移而来,基于 Scala Playframework,是函数式编程、纯异步、面向类型建模(代数数据类型)的落地实践,具有 CPU 占用率低、不依赖反射、业务状态的迁移过程清晰等优点,特别是不会在运行时发生 NullPointException。
团队成员:6
项目业绩:
- 目前这个系统承载三千多个租户。
- 在 100QPS 期间的 CPU 占用仅需 0.5 核心。
技术亮点:
- 从 Future 迁移至 ZIO,替换整个系统的底层异步对象。高峰期 CPU 从 10 核心降低至不到 1 核心,并以此在 Scala 社区做技术分享。
- 基于
[Circe]( http://circe.io/)、[Shapeless]( https://github.com/milessabin/shapeless)的数据结构编解码器。它是 ADT 、Generic 的生产环境应用,不依赖反射,将自动生成编解码器这一过程提前至编译期。与常见fastjson方案相比,大部分 Bug 与漏洞都会被编译器成功拦截。 - Multi-Tenancy:系统同时服务多个租户,且保证租户间数据是物理隔离的。
- Webhook 机制:系统内业务对象变更时,会将事件数据推送至由客户设定的 URL 。同时还记录客户服务器的响应结果,并在客户服务器发生错误时重试发送,避免客户服务器宕机或故障而导致事件数据无法送达。
- 资源上限与计费
- Stream:大量应用 Reactive-Stream 技术
招乎招聘自动化系统( NodeJS 版)
我是 TypeORM、routing-controllers 的早期贡献者。
团队成员:3
项目业绩:承载早期 300 个租户
技术背景:NodeJS 、TypeScript 、全注解 WebFramework
技术亮点:
- 从 TypeScriptCompiler 的 AST 中提取注解,自动生成 OpenAPI 文档,包含
Schema、Validation - 基于
async_hooks重建"异步函数"的上下文:调用栈对开发者定位错误现场非常重要,而 NodeJS 运行时没有记录异步调用的栈,为开发者带来诸多不便。幸运的是 NodeJS 8.1 以后新增特性 async_hooks 有能力构建一个异步调用树,使得异步调用栈可以被恢复出来,为错误跟踪提供极大方便。 - 奠定 Multi-Tenancy 系统数据隔离的架构基础
River
内部 Change Data Capture 中间件,设计为解析 PostgreSQL 的事务预写日志(WAL),写入 ElasticSearch / Kafka 供下游数据服务分析消费。
团队成员:3
技术背景:基于数据库日志原理,使用 Akka Stream 等响应式流技术构建的健壮中间件。
技术亮点:
- Parser: 组合子
[parser combinator]( https://github.com/scala/scala-parser-combinators)解析逻辑日志 - Reactive Stream: 基于 akka stream 流式日志处理,根据下游压力自动反馈上游降速。经过几代演进后,具备强大的错误自恢复能力。
招乎浏览器插件
项目目标为,设计一套客户端插件,在不提供密码的前提下,帮助用户自动从网站收录数据。 具体实现为在插件内实现代理协议,所有客户端组成代理池,达到不会被目标网站基于 IP 、账户的反爬策略误伤的目标。
团队成员:5
技术亮点:
- 使用 TypeScript 类型描述的协议
- RxJS + WebSocket 组成的代理,具有流式实时响应的能力。且代码量少,核心代码 + 注释仅 1k 行。
命令行工具软件
-
解压工具
这是个并行多格式解压工具,它能充分利用多核处理器与 NVMe 硬盘的读写性能。在面数十万压缩包,总体积 1.7TB 的数据时,仅使用 4 小时就解压缩了所有数据包。
以及应用 GraalVM Native Image 技术的二进制分发版,在云原生时代做到毫秒时间启动,缩小资源占用。
-
数据迁移工具
并行 ETL 数据迁移工具,使用 Rust 编写,可以将数据从 RDBMS 迁移至 Cassandra 。
-
事件连接器 Sidecar
使用 Rust 编写的 Kafka 消费者 CLI ,监听 Kafka topic 并转发数据到参数指定的 HTTP 端口。
3. 东软载波 ( 2014 年 9 月 ~ 2016 年 3 月 )
带领前端团队(3 人),实践 NodeJS 大前端
4. 青岛日谷信息技术服务有限公司与海尔软件 ( 2012 年 2 月 ~ 2014 年 8 月 )
学习
- 组合数学 证书
- Structure and Interpretation of Computer Programs ,"SICP"
- 操作系统 rCoreOS on RISC-V
技能词
以下均是我熟练使用的技能
- Backend:NodeJS / Akka / Next.JS / Scala / Prisma
- Language:Scala / Rust / Kotlin / TypeScript / Java
- Framework: Akka Stream / RxJS / React
- Tools: Cats / GraalVM / gRPC / ZIO
- Database:PostgreSQL / Cassandra / Redis / ElasticSearch
- DevOps:AWS / Kubernetes / Telemetry / Prometheus / Kafka / Serverless / Istio
