如何将驱动程序从Docker更改为Mocker



我只是有点好奇,是否有一种方法可以将mocker驱动程序与docker驱动程序一起使用或代替它?如果不止一个,fn是如何决定使用哪一个的?原因是,如果可能的话,我可能会尝试为另一个容器引擎实现另一个真正的驱动程序。到目前为止,我设法让mocker以驱动程序的身份出现,但仍然没有找到如何让fn使用它而不是docker。

这里有一个构建带有扩展的fn的示例:https://github.com/fnproject/fn/blob/master/examples/extensions/main.go#L16——对于使用自定义驱动程序进行构建,目前需要使用相同的进程(即,如果不扩展它,就无法在运行时从fn-core的二进制文件中配置另一个驱动程序(。

为了使用mocker之类的替代驱动程序进行构建,用户在创建代理时会使用agent.WithDockerDriver选项来指定驱动程序,本文对此进行了说明https://godoc.org/github.com/fnproject/fn/api/agent#AgentOption样品如下:

func main() {
mocker := mock.New()
// configure logstore, mq
da := agent.NewDirectCallDataAccess(logstore, mq)
magent := agent.New(da, agent.WithDockerDriver(mocker))
fns := server.New(server.WithAgent(magent), /*other options*/)
fns.Start(context.Background())
}

我们需要整理代理接口,使其更容易创建(数据访问的内容很复杂(,但也不算太糟。其中大部分可能会从此文件中被盗https://github.com/fnproject/fn/blob/master/api/server/server.go--我们还需要将其命名为WithDriver:(

假设您正在考虑在后端使用类似rkt或更强大的驱动程序,则可以通过实现驱动程序接口来实现这一点。过去我们曾尝试过,但目前我们没有维护它,因为它不是一个可行的选项(性能问题,可能自那以后有所改善(。如果你能让rkt发挥作用,那就太酷了,很乐意为它做一个公关,并想办法把它放在哪里:(

最新更新