krepo是一个使用Kotlin编写的maven仓库服务器软件, 前端部分请访问https://next.pkg.rtast.cn 不开放注册
krepo的前身&赘述
krepo的前身是一个名为KMVNRepo的软件,开发这个软件的灵感来自于reposilite,
但由于当时不是很会使用ktor于是写出了很多的垃圾代码,在经过几周之后我将KMVNRepo的代码仓库删除新建了一个krepo的仓库, 这里将这个版本称为Legacy版本,
建立新项目的目的和预期就只有一个点: performance,后端全部使用Kotlin Native开发以便将其编译为原生二进制可执行文件,在磁盘I/O部分使用C编写来最大的优化性能,并使用Kotlin cinterop和C交互.
Legacy版本的krepo性能表现十分不错, 内存仅占用25MB+-, 在使用了几个月后我发现了一些问题,Kotlin native仅支持X64架构的处理器, 在一些32/arm32的老设备上根本无法运行,于是新一代的Next版本随之出现.
Next版本
Next版本的krepo完全运行在Azure functions上使用JVM环境运行, 并且functions支持自动横向拓展(scaling),在一个实例无法满足请求时自动运行新的实例来确保服务可用。
新一代的krepo后端整体以Stateless为理念一次请求不会影响其他的请求, 这使得可以更好的适配functions的serverless环境, 并从JSON序列化/反序列化迁移到protobuf来减少流量发送/接收, 使程序响应速度更快.
前端在Legacy版本的基础上进行了修改并完全删除/重新设计某些页面、添加了更好的动画效果、适配Dark浏览器模式,将原本的前端程序体积从5MB+优化到700kb+-
krepo背后的技术支持
krepo的背后由一个名为kazure的插件作为code-gen,azure 官方sdk完全按照Java用户使用者习惯/风格来设计,使用注解解析function,用反射加载functions.
在Kotlin中这一用法非常臃肿,所以我开发了Kotlin编译器插件用于简化这一流程, 用户无需关心各种Trigger的配置, 只需要添加一个@HttpRouting注解即可创建一个http路由.
KAzure的原理
在这篇文章中简单介绍一下kazure的原理
kazure 是一个gradle plugin + ksp + kcp的总合插件, 在不同阶段处理不同的数据, 最终经处理的数据都由Kotlin compiler plugin编译器插件来生成IR树
尾声
已经几个月没有发文章了, 这几个月发生的事也挺多的。2025 12 07 Sun.