Tag: 微服务

Heroku负载平衡器与Netflix zuul

根据这个答案https://stackoverflow.com/a/41811770/2849613我想获得有关Heroku的微服务的最佳做法的一些信息。 问题是哪种方法更好? 安装每个服务作为独立的应用程序,并使用其中之一作为REST“代理”(例如Netflix Eureka)? 要么 创build基于Docker的方法,例如Netflix Zuul作为负载均衡器? 就我自己而言,我已经看到两种方法的优点和缺点: 优点 :更好的可扩展性(易于创build更大的负载的新机器)。 缺点 :服务之间的通信是“在heroku之外”换句话说:因为heroku应用程序有公共地址,所有人都可以直接连接到服务(不用扔尤里卡),因为每个服务都需要提供一些authentication方法,并在每个服务之间共享其他 – 我认为这是风险。 优点 :易于复制testing和开发的生产环境(docker图像),服务之间的通信是“内部”完成的(图像到图像而不是应用程序到应用程序)。 缺点 :难以扩展(我认为Heroku应用程序和Docker镜像之间的负载平衡有一点点负担)。 哪种方法更好? 也许我可以把它们混合在一起? 或者也许有一些不同的,更好的解决scheme? 老实说,我相信唯一的事情是,我想用rabbitMQ作为消息队列…

以编程方式将服务添加到泊坞窗撰写项目

我有一个基于Docker的组件,并用docker-compose编排的项目。 其中一些是可选的,可以在运行时添加。 我可以考虑两种方法来实现这一点: 创build一个新的serviceA.yml撰写文件并将其作为单独的项目运行 添加serviceA到我的基础compose.yml并再次运行 有什么更好的select呢? 我也看到你可以将docker-compose文件和extend关键字结合起来,但是我不认为这可以适用,因为我可以在运行时添加可变数量的服务。

存储微型服务子模块,但仍然使用叉子

我被困在这里。 很多这已经到位,它只是我无法弄清楚的包装。 我们有一个微服务架构,有许多独立的存储库。 我们正在使用Docker和Docker Compose来构build和运行开发环境,这非常适用。 我有这个问题,是如何打包存储库的主要集合。 所以如果我有像这样的文件夹结构: \ service1 .git Dockerfile service2 .git Dockerfile service3 .git Dockerfile docker-compose.yml README.md …在哪里service1,service2,service3都是他们自己的git仓库。 我的第一个想法是使用git子模块,这将工作,但是我们强制执行政策,要求开发人员叉存储库,而不是由于持续集成约束和代码审查的主要存储库。 即使在我想到这个警告之前,我对于使用git子模块也不是过于兴奋,所以可选的解决scheme将是更受欢迎的。 目前我只能认为编写脚本来存储一个仓库列表; 为每个查询运行一个查询,以查看login的开发人员是否拥有各自的分支,如果不是,则创build一个分支,然后拉入主文件夹; 然后启动docker-compose。 这似乎是一个可怕的解决scheme,但足以让我只需要写文档,告诉开发人员如何手动执行此过程… 思考? 谢谢你的时间 :)

如何为微服务创build公用密钥存储?

我在Docker环境中实现了一套微服务。 而且这些服务中的每一个都使用JWT令牌相互通信。 当服务A呼叫服务B时 服务A,使用他的私钥签署令牌,并传递给服务B. 服务B,从公钥存储获取ServiceA的公钥并validation令牌 公钥/私钥生成过程由微服务本身完成,然后将公钥传递给公钥存储。 所以公钥存储唯一要做的事情是, 存储由服务发送的公钥 根据请求发送正确的公钥给服务 我所要做的与图中所显示的相似。 我从以下图片获得: https : //www.youtube.com/watch?v=dBdZrw2pPvc&t=462s 所以我的问题是,这种公共密钥存储的标准实现吗? 如果是的话,他们是什么?

Kubernetes和Amazon ECS有什么不同?

Amazon ECS和Kubernetes实施体系结构有什么区别? 我需要决定select一种云中的容器pipe理技术。 select这些技术时决定的因素是什么? 我正在使用Docker来创build和执行容器。

在不同的Docker容器之间使用RabbitMQ进行通信

我希望在存储在不同docker集装箱中的两个应用程序之间进行通讯 我将使用这个消息队列(RabbitMQ) 我应该做一个第三个Docker容器作为我的RabbitMQ服务器运行,然后为这两个特定的容器创build一个通道? 那么以后我可以做更多的渠道,如果我需要例如第三个应用程序需要与其他2沟通? 问候!

如何在基于Docker的微服务中pipe理每个环境的数据?

在微服务体系结构中,我很难掌握如何pipe理环境特定的configuration(例如数据库或消息代理的IP地址和凭证)。 假设您有三个微服务(“A”,“B”和“C”),每个微服务由不同的团队拥有和维护。 每个团队都需要一个团队集成环境…他们在哪里使用他们的微服务的最新快照,以及所有依赖微服务的稳定版本。 当然,你也需要QA /分期/生产环境。 大图的简化视图如下所示: “微服务A”团队环境 微服务A( SNAPSHOT ) 微服务B(STABLE) 微服务C(STABLE) “微服务B”团队环境 微服务A(STABLE) 微服务B( SNAPSHOT ) 微服务C(STABLE) “微服务C”团队环境 微服务A(STABLE) 微服务B(STABLE) 微服务C( SNAPSHOT ) 质量保证/分期/生产 微服务A(稳定,发布等) 微服务B(稳定,发布等) 微服务C(STABLE,RELEASE等) 这是很多的部署,但是这个问题可以通过持续集成服务器来解决,也许可以像Chef / Puppet /等等。 真正困难的部分是每个微服务都需要一些特定的环境数据给每个被部署的地方。 例如,在“A”团队环境中,“A”需要一个地址和一组证书来与“B”交互。 但是,在“B”团队环境中,“A”的部署需要不同的地址和凭证来与“B”的部署进行交互。 而且,当你接近生产时,像这样的环境configuration信息可能需要安全限制(即只有某些人可以修改甚至查看它)。 那么,在微服务体系结构中,如何维护特定于环境的configuration信息并将其提供给应用程序呢? 一些方法浮现在脑海中,尽pipe它们都有问题: 让构build服务器在构build时把它们烧到应用程序中 – 我想你可以创build一个每个环境属性文件或脚本的回购,并且为每个微服务的构build过程伸出并拉入适当的脚本(你也可以有一个单独的,限制访问回购生产的东西)。 不过,你需要大量的脚本。 对于微服务可以部署的每个地方的每一个微服务,基本上都是单独的。 将它们烘焙到每个环境的基础Docker镜像中 – 如果构build服务器将微服务应用程序放入Docker容器中作为构build过程的最后一步,则可以为每个环境创build自定义基础镜像。 基本映像将包含一个shell脚本,用于设置所有您需要的环境variables。 您的Dockerfile将被设置为在启动您的应用程序之前调用此脚本。 这与之前的要点也有类似的挑战,因为现在你正在pipe理大量的Docker镜像。 在运行时从某种registry中提取环境信息 – 最后,可以将你的每个环境configuration存储在Apache ZooKeeper(甚至只是一个普通的数据库)中,然后让你的应用程序代码在运行时将其拉入它启动。 每个微服务应用程序都需要知道它在哪个环境(例如启动参数),以便知道从registry中获取哪一组variables。 这种方法的优点是,现在您可以使用完全相同的构build工件(即应用程序或Docker容器)从团队环境一直到生产。 […]

自动化微服务负载平衡/缩放

现在读几天微服务,我想知道人们如何去实现负载均衡自动化和扩展这些东西? 我有一个特定的想法,我想实现,但不知道是否有可能,或者我正在考虑错误。 所以在这里呢… 假设我有一个名为A,B和C的3个CoreOS机器集群 首先我想要的是透明部署,我可以使用舰队。 然后,我想要检测,当其中一个服务负载巨大,部署另一个实例,并部署了一个和第一个,自动负载平衡的方式,不会中断其他服务正在使用它(stream量从现在起经过负载平衡器)。 另一种方式可能是我手动部署服务的其他版本,然后自动进行负载平衡,并将stream量路由器传输到负载平衡器。 那么最后一个问题,这和Akka集群有什么不同呢?这些与微服务有什么不同呢?

如何pipe理微服务/容器/云环境中的秘密?

微服务和云是一件事情。 每个人都在谈论和写作。 就我个人而言,我正在思考很多关于这个话题:如何从中受益? 什么是可能的挑战? 这怎么能加速日常的发展? 如何pipe理所有的东西? 几天以来困扰我的一个问题是“如何pipe理微服务/云环境中的秘密?”。 设想一家拥有150名软件工程师和各种产品的团队。 每个团队都在创build一个软件,每个服务都需要不同数量的秘密(API密钥,密码,SSH密钥等等)。 “老式”方式是以ini / yaml / txt格式创build一些configuration文件并从中读取。 12因素应用程序说:做每个环境variables。 环境variables可以在每台机器上设置,configuration文件也可以放在那里。 如果你有一堆机器,并且部署由几个系统pipe理员完成,这是有效的。 其中一条规则是:“不要在Git仓库中存储秘密”。 现在,新的世界进来了。永远的团队负责他们自己生产的应用程序。 他们应该由团队部署和运行。 所以我们公司正在转向集装箱和自助服务的方式(如Mesos和Marathon或Kubernetes)。 当然,Dockerfiles也可以设置env vars。 是的,您可以在构build过程中将您的configuration文件添加到Docker容器中。 但是,每个人都可以访问这些秘密(例如来自其他团队)。 没有人知道谁使用这个秘密,做一些危险的事情。 你也想要版本化你的Dockerfiles。 你想在Marathon上运行的应用程序也应该进行版本化(Git或其他)(并由REST API应用)。 那么在哪里存储和pipe理这个容器/应用程序的所有秘密? 因为像Swarm和Machine(Docker)这样的调度器框架,Mesos和Marathon(也可用于Docker)或者Kubernetes你不知道你的应用程序将在哪里运行。 这将安排在几台机器上。 而且大部分工具都没有authentication(默认情况下,这可以通过Nginx代理或其他东西来添加)。 pipe理秘密的一个想法是使用像Vault这样的工具。 但我从来没有在应用程序中看到“原生”的支持。 这同样适用于Blackbox 。 而且我不知道configurationpipe理如何解决这个问题。 我知道厨师支持encryption的数据包,但afaik不可能使用厨师来设置/构buildDocker容器。 你如何在一个多团队的环境中与几个工程师在微服务/容器/云环境中pipe理秘密?

dynamic可扩展和自适应架构

我是一名云计算博士生,我计划使用基于微服务的架构与consul和zeromq进行我的研究项目。 我有几个难以理解的问题。 有人能帮我分享他们的经验。 我们有基于docker的微服务,我们有zeromq,我们有领事。 你能否提一下我们如何将这三者结合起来,形成一个dynamic的适应性环境? 虽然我了解zeromq,docker和consul是个别的,但是我仍然无法清楚地了解它们是如何作为一个整体来运行的。我们有一个在主机上运行微服务的docker容器。 我们使用zeromq在Docker容器之间传输消息(Pub-sub / pipeline)。 这些容器可能运行在相同的主机/数据中心或不同的主机/数据中心上。 然后,我们使用领事进行服务发现。这里我的理解是否正确? 架构如何根据工作负载dynamic扩展/缩小? 说,我有一个情况,我需要更多的工人节点进行特定的计算。 谁旋转了更多的工人节点。 哪个组件决定/做出这个决定? 是否有调度组件? 如果是这样,有人可以简单地解释它是如何发生的或哪个组件执行该function? 那么,领事的主要angular色是什么? 是否仅用于服务发现?是否也可用于configuration。 如果是这样,它的局限性是什么? 我看到,即使是zeromq也有服务发现机制,那么为什么我们需要领事呢? 如何在架构中传播节点信息的失败? 哪个组件负责? 这只是领事吗? 还是zeroMq呢? 请指教。