问题标签 [12factor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
logging - 12因素记录到logstash的方式
12因素说,
十二因素应用程序从不关心其输出流的路由或存储。它不应尝试写入或管理日志文件。相反,每个正在运行的进程都将其事件流(无缓冲)写入stdout。
优点是,我们不必为不同的环境(dev/prod)配置不同的日志记录端点,不会错过写入stderr的未处理异常。
我在 Python 和 Node.js 中有一些脚本已经记录到 stdout/stderr,我不想修改这些脚本以进行集中记录。
那么,如何将这些日志解析为结构化数据并由 logstash 收集(包括多行错误)。
在 AWS 中,来自 Lambda 或 Beanstalk 的 stdout/stderr 由 CloudWatch 捕获。所以,如果这是可能的,那么应该有一种方法可以对 logstash 做同样的事情。
jenkins - 为 12 因子应用程序存储配置的过程是什么?
所以我一直在构建我的应用程序,主要是作为 12 因素应用程序,现在查看配置部分。
目前,我有单独的用于开发和生产的配置文件,并且通过构建过程,我们可以构建开发或生产映像。代码 100% 相同,唯一改变的是配置。
现在我 100% 明白,在 12 因素应用程序中,配置应该来自外部源,例如:环境变量,或者可能是像保险库这样的安全存储......
所以各种文章和博客没有提到配置是如何存储/处理配置的。如果代码在它自己的 git repo 中被分离并且它没有存储配置,那么我们如何处理配置?
我们是否将实际配置值存储在单独的 git 上,然后使用某种触发器通过构建过程在目标环境(Kubernet 配置映射、马拉松 JSON 配置、Vault 等)上合并/推送/执行这些值?
.net-core - .NET 核心中的 OpenTracing,而不依赖于特定的解决方案库
为了登录我们的微服务应用程序,我们只需登录到 stdout/console,docker logging 驱动程序会处理并将这些日志重定向到某个地方,例如 gelf/logstash、fluentd 等。基本上,我们遵循12 个因素的日志记录指南。这意味着开发应用程序代码的开发人员不需要了解底层日志记录解决方案(例如 Elasticsearch、Graylog、Splunk 等)——这完全是一个操作/配置问题。理论上,我们应该能够在不更改任何代码的情况下更改底层日志记录解决方案。
我想要类似的痕迹,我的研究使我找到了 OpenTracing。开发人员不需要了解底层跟踪解决方案(例如 Jaeger、Zipkin、Elastic APM 等)和日志记录;理论上,我们应该能够在不更改任何代码的情况下更改底层跟踪解决方案。
我已经使用opentracing/opentracing-csharp和jaegertracing/jaeger-client-csharp库成功地获得了一个 .NET 核心 POC 向 Jaeger 发送跟踪信息。
我仍在尝试完全了解 OpenTracing,但我想知道是否有办法将跟踪发送到符合 OpenTracing 的 API,而不必硬依赖 Jaeger 等特定解决方案(即 jaeger-client -csharp 库)。根据我的理解,OpenTracing 只是一个标准。难道我不需要 jaeger-client-csharp 库就可以使用一些采样选项配置 OpenTracing 端点吗?还是 jaeger-client-csharp 实际上不是 Jaeger 特定的,实际上可以将跟踪发送到任何 OpenTracing API?
示例配置如下所示,它使用了 jaeger 客户端库:
java - 微服务中应该使用多线程吗?
如果微服务具有可扩展性,例如部署为 AWS 上的 ECS,是否应该在微服务开发中使用并行编程?
如果是,一个实例消耗更多资源与 N 个实例消耗相同资源有什么好处?
并行编程如何匹配https://12factor.net/
PS更具体-我应该在概念上使用并行流而不是简单流吗?
spring-boot - 使用外部文件系统(卷服务)
在云代工中使用外部文件系统(卷服务)是一种不好的做法?它遵循 12 因素应用模式吗?
testing - 哪些测试工具和方法支持 12 因子应用程序
为了在我的 (Java) 微服务开发中遵循12 要素应用程序,我想构建我的测试基础架构以
- 符合 12 因素应用程序
- 测试/将被测系统推向 12 因子应用程序。
什么是好的测试工具(工具和方法)?
细节:
为了拥有有效的微服务,我想遵循 12 要素应用程序。为了找到尽可能多的错误,我想要一个对 12 因素微服务有效的测试工具——我的不是。
例如,当我开发微服务时,我经常会引入单元测试未捕获的错误——无法捕获,因为它们不是发生在本地逻辑中,而是发生在管道中,即只有在将许多部分(Java 代码、Javascript代码、Helm 图表、Docker 文件、环境变量)。因此,我想加强我的粗粒度测试(集成、组件和验收/端到端测试),这导致我提出与 12 因素应用程序相关的多个问题,例如
- 我应该有更多直接在生产环境中运行的粗粒度测试吗?
- 我可以在我的集成和组件测试中模拟哪些部分而不破坏开发/产品奇偶校验?
- 如何测试我的被测系统是否遵循 12 因素应用程序?
我找到了很多用于测试(Java)微服务的工具和材料,例如
- 《测试 Java 微服务》一书
- https://martinfowler.com/articles/microservice-testing/
- 如何为主要面向服务的应用程序编写有用的单元测试?
- http://arquillian.org/
- https://github.com/SpectoLabs/hoverfly-java
- https://github.com/rest-assured/rest-assured
- https://github.com/DiUS/pact-jvm
- https://www.testcontainers.org/
不幸的是,他们都没有就 12 factor 应用程序提供建议——甚至都没有提到。因此,任何有关支持 12 因素应用程序的测试方法的建议都值得赞赏!
kubernetes - 这些变量从哪里出现在我的 kubernetes 容器中?
我正在部署简单的 hello-world 微服务,它侦听由以下变量给出的端口:
我在没有在容器上配置任何变量的情况下部署它,并希望它在默认的 50001 端口上提供服务,但出现了错误
当我登录容器并检查环境时,我发现环境中充满了不同的变量(其中一些属于其他服务),并且TEST_SERVICE_PORT
变量存在并且绝对不包含端口:
我有以下问题,但无法在文档中找到答案:
是什么创造了这个变量?我可以以某种方式将容器与它们隔离开来吗?还是它们是由 kubernetes 故意设置的,并且用于某些我不知道的目的?我应该如何命名我的配置变量以避免命名冲突?我应该使用该变量而不是使用服务名称作为主机名吗?
有以下文档,但它只解释变量TEST_SERVICE_SERVICE_PORT
和TEST_SERVICE_SERVICE_HOST
. TEST_SERVICE_PORT
那和其他的意思是什么?增加了TEST_SERVICE_SERVICE_PORT_GRPC_API
什么?
我正在使用的集群上还安装了 Istio 和 Ambassador 网关。
docker - 在 Dockerfile 或 docker-compose 中定义环境变量?
在阅读了12 因素应用程序的配置点后,我决定用环境变量覆盖包含默认值的配置文件。
我有 3 个Dockerfile
,一个用于 API,一个用于前端,一个用于工作人员。我有一个docker-compose.yml
来运行这 3 个服务和一个数据库。
现在我想知道是否应该在Dockerfile
s 或中定义环境变量docker-compose.yml
?使用一个而不是另一个有什么区别?
kubernetes - 云原生应用程序的 NFS/网络文件系统支持
有人说在云原生应用架构下不推荐使用 NFS/Network 文件系统。他们建议使用后端服务来实现可扩展性。我很想知道确切的原因。