1 个不稳定版本
0.0.1 | 2021年4月21日 |
---|
#150 in #微服务
13KB
163 行
卡夫克斯
让我们来构建微服务
🚧 正在建设中 🚧
此存储库尚未准备好用于生产!
哲学
卡夫克斯是一个最小化的库,用于构建您自己的去中心化单体微服务应用。
去中心化
不要与加密货币混淆,去中心化的卡夫克斯服务仅运行在您自己的服务器上。去中心化的好处是可以有任意数量的服务器运行您的应用程序,卡夫克斯将自动优化数据流以平衡整个网络上的负载。它还会尝试将特定服务放在最需要的地方,如果您在特定区域有数据库,它将把底层数据处理服务放置在靠近数据库的位置,同时将更多面向用户的服务分散开来。
单体
当使用卡夫克斯构建的应用程序部署到服务器时,所有编译到二进制文件中的服务都会启用。然后卡夫克斯运行时将根据需要切换服务器上运行的服务。服务可以在编译时启用或禁用,服务器不需要拥有所有可用的服务。
微服务
卡夫克斯运行时不断尝试优化运行中的服务,以始终保持速度、冗余和可用性的前沿。同时运行的服务器越多,卡夫克斯能够实现这一点就越好。运行不同大小的服务器可能会有所帮助,因为卡夫克斯可以将多个服务放在同一节点上。这可以降低延迟并减少队列。
示例
这就是创建服务应该这么简单。
struct DoubleNumberService {
number: u32,
}
impl Service for DoubleNumberService {
fn on_message(message: Self, ctx: &ServiceContext) {
let new_number = message.number * 2;
ctx.publish(SaveNumberService {
number: new_number,
});
}
}
fn main() {
App::new()
.add_service::<DoubleNumberService>()
.add_service::<SaveNumberService>()
.run();
}
# On the first node you spin up
$ my-kaffix-app --token=YOUR_TOKEN
Running My Kaffix App on port 12345
# On additional nodes
my-kaffix-app --token=YOUR_TOKEN --peer=145.275.10.324:12345
Running My Kaffix App on port 12345
# Try to use a peer that has a low ping
# A token is just a string of characters used to sign messages and prove that
# the node they are coming from is authorized.
依赖项
~9–22MB
~272K SLoC