Microcosm - 简单的微服务配置
项目描述
简单微服务配置
编写良好的微服务是小型且单功能的;任何非平凡生态系统都将有一系列这样的服务,每个服务执行不同的功能。不可避免地,这些服务将使用共同的代码和结构;这个库提供了一个简单的机制来构建这些共享组件并将它们组合成服务。
术语
- 一个
微服务
是一个小型软件应用。它由几个更小的软件片段组成,其中许多是可重用的。 - 一个
组件
是这些(可能可重用)的软件片段之一。 - 一个
工厂
是用于创建组件的函数;它可能是一个对象的构造函数。 - 一个
配置字典
是一个嵌套的字符串键字典。它包含工厂用于创建组件的数据。 - 一个
对象图
是一个可能相互引用(非循环)的组件集合。 - 一个
绑定
是一个字符串键。它用于在对象图中标识一个组件以及为组件的工厂保留的配置字典的子部分。
基本用法
-
为
组件
定义工厂函数,将它们附加到绑定
上,并提供(可选)配置默认值
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()
工厂函数可以访问对象图和,通过它,配置字典。如果提供,默认配置值将预先填充在提供的绑定中;这些值可以从外部源加载数据进行覆盖。
-
通过创建一个新的对象图和元数据来连接微服务
from microcosm.api import create_object_graph graph = create_object_graph( name="myservice", debug=False, testing=False, )
工厂可以通过
graph.metadata
访问服务元数据。这允许实施一些最佳实践- 组件可以实现生态系统的广泛约定(例如,用于日志记录或持久性),使用服务名称作为区分器。
- 组件可以在开发过程中(
debug=True
)和单元测试中(testing=True
)自定义其行为
-
通过在
object graph
中引用任何绑定
来访问相应的component
print(graph.foo)
组件是懒加载初始化的。在这个例子中,第一次访问
graph.foo
时,会自动调用绑定的工厂函数(create_foo()
)。由于这个工厂函数会进一步访问graph.bar
,如果尚未调用,则链中的下一个工厂函数(create_bar()
)也会被调用。不允许存在图环,尽管依赖的组件可能缓存图实例以在初始化完成后访问依赖组件。
-
可选地,可以显式初始化微服务的组件。
graph.use( "foo", "bar", )
虽然通过访问
graph.foo
或graph.bar
可以达到相同的效果,但这种结构具有优点:它可以在一开始就初始化列出的组件,并且可以尽早触发配置错误。然后还可以禁用后续的懒加载初始化,以防止后续操作中的意外初始化。
graph.lock()
假设
这个库受到了pinject项目的影响,但做了一些假设,这使得许多简化成为可能。
-
微服务足够小,简单的字符串绑定就足够了。或者换句话说,相同绑定的组件之间的冲突不是问题,不需要显式的作用域。
-
微服务使用进程而不是线程进行扩展。因此,线程同步不是目标。
-
对象图的模拟(和修补)很重要,并且需要简单易行。单元测试期望使用`unittest.mock`库;应该可以轻松地临时替换组件。
-
一些组件将是修改其他组件的函数,而不是需要实例化的对象。
设置
创建一个虚拟环境
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d9297ffdd296d4ca96c81b6c96db6dfe89bf71371d5abf58865a0b699852279 |
|
MD5 | 57fb85d77845bcdadcfa3ef2fb7eefdb |
|
BLAKE2b-256 | 2311f1badbae3dc6ef64316ba6f00481a0a44d7515c3c560546964341eb4235e |
microcosm-4.1.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f85d7f60a388b5a2d59083c0fd5e9c120c44bfb3a779d62d1094f1bc37d6fae0 |
|
MD5 | c649b6faccfbd9a852553e389b7407db |
|
BLAKE2b-256 | 6b469a113fa4b6412a170333c566707db642095c45a60eb2c1ea618e846d4c37 |