1 个不稳定版本

0.0.1 2021年4月21日

#150 in #微服务

MIT 许可证

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