跳转到主要内容

Microcosm - 简单的微服务配置

项目描述

简单微服务配置

编写良好的微服务是小型且单功能的;任何非平凡生态系统都将有一系列这样的服务,每个服务执行不同的功能。不可避免地,这些服务将使用共同的代码和结构;这个库提供了一个简单的机制来构建这些共享组件并将它们组合成服务。

Circle CI

术语

  • 一个 微服务 是一个小型软件应用。它由几个更小的软件片段组成,其中许多是可重用的。
  • 一个 组件 是这些(可能可重用)的软件片段之一。
  • 一个 工厂 是用于创建组件的函数;它可能是一个对象的构造函数。
  • 一个 配置字典 是一个嵌套的字符串键字典。它包含工厂用于创建组件的数据。
  • 一个 对象图 是一个可能相互引用(非循环)的组件集合。
  • 一个 绑定 是一个字符串键。它用于在对象图中标识一个组件以及为组件的工厂保留的配置字典的子部分。

基本用法

  1. 组件 定义工厂函数,将它们附加到 绑定 上,并提供(可选)配置 默认值

    from microcosm.api import defaults, binding
    
    @binding("foo")
    @defaults(baz="value")
    def create_foo(graph):
        return dict(
            # factories can reference other components
            bar=graph.bar,
            # factories can reference configuration
            baz=graph.config.foo.baz,
        )
    
    @binding("bar")
    def create_bar(graph):
        return dict()
    

    工厂函数可以访问对象图和,通过它,配置字典。如果提供,默认配置值将预先填充在提供的绑定中;这些值可以从外部源加载数据进行覆盖。

  2. 通过创建一个新的对象图和元数据来连接微服务

    from microcosm.api import create_object_graph
    
    graph = create_object_graph(
        name="myservice",
        debug=False,
        testing=False,
    )
    

    工厂可以通过 graph.metadata 访问服务元数据。这允许实施一些最佳实践

    • 组件可以实现生态系统的广泛约定(例如,用于日志记录或持久性),使用服务名称作为区分器。
    • 组件可以在开发过程中(debug=True)和单元测试中(testing=True)自定义其行为
  3. 通过在 object graph 中引用任何 绑定 来访问相应的 component

    print(graph.foo)
    

    组件是懒加载初始化的。在这个例子中,第一次访问graph.foo时,会自动调用绑定的工厂函数(create_foo())。由于这个工厂函数会进一步访问graph.bar,如果尚未调用,则链中的下一个工厂函数(create_bar())也会被调用。

    不允许存在图环,尽管依赖的组件可能缓存图实例以在初始化完成后访问依赖组件。

  4. 可选地,可以显式初始化微服务的组件。

    graph.use(
        "foo",
        "bar",
    )
    

    虽然通过访问graph.foograph.bar可以达到相同的效果,但这种结构具有优点:它可以在一开始就初始化列出的组件,并且可以尽早触发配置错误。

    然后还可以禁用后续的懒加载初始化,以防止后续操作中的意外初始化。

    graph.lock()
    

假设

这个库受到了pinject项目的影响,但做了一些假设,这使得许多简化成为可能。

  1. 微服务足够小,简单的字符串绑定就足够了。或者换句话说,相同绑定的组件之间的冲突不是问题,不需要显式的作用域。

  2. 微服务使用进程而不是线程进行扩展。因此,线程同步不是目标。

  3. 对象图的模拟(和修补)很重要,并且需要简单易行。单元测试期望使用`unittest.mock`库;应该可以轻松地临时替换组件。

  4. 一些组件将是修改其他组件的函数,而不是需要实例化的对象。

设置

创建一个虚拟环境

python -m venv venv
. ./venv/bin/activate

安装依赖项

pip install -U -e .

测试

运行测试

python setup.py nosetests

代码风格检查

检查代码风格

NAME=microcosm ./entrypoint.sh lint
NAME=microcosm ./entrypoint.sh typehinting

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

microcosm-4.1.0.tar.gz (25.1 kB 查看哈希值)

上传时间

构建分发

microcosm-4.1.0-py3-none-any.whl (30.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面