- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
最近,我开始使用Microservices,我使用Redis编写了一个用于服务发现的库,用于存储每个服务的url和端口号以及该条目的TTL值。事实证明这是一种昂贵的方法,因为对于任何其他服务的跨服务调用都需要对Redis的调用。缓存似乎不是一个好主意,因为服务不会一直处于启动状态,因此也可能会出现停机。
因此,我想编写一个单独的微服务来处理业务流程部分。为此,我需要找出一个非常底层的网络协议(protocol)来处理心跳的交换(这将帮助我确定是否有任何服务实例不可用)。 ZookeeperClient,redisClient之类的应用程序如何处理心跳?
此外,跨服务 call 行业首选的协议(protocol)是什么?
我一直在通过HTTP调用REST Api,并消除了跨不同集合进行Join的所有可能性。
有一个更好的方法吗?
谢谢。
最佳答案
我认为“编排”一词对您的要求不好。根据我到目前为止在微服务 Realm 遇到的情况,术语“编排”用于涉及复杂业务流程而不用于服务发现的情况。您需要的是Service registry和Load balancer
结合在一起。您可以找到here您需要的所有信息。这是一篇很棒的文章的相关内容:
有两种主要的服务发现模式:客户端发现和服务器端发现。首先让我们看一下客户端发现。
客户端发现模式
使用客户端发现时,客户端负责确定可用服务实例的网络位置,并在它们之间进行负载平衡请求。客户端查询服务注册表,该服务注册表是可用服务实例的数据库。然后,客户端使用负载平衡算法来选择可用的服务实例之一并发出请求。
服务实例的网络位置在启动时会在服务注册表中注册。实例终止时,将从服务注册表中将其删除。通常使用心跳机制定期刷新服务实例的注册。
Netflix OSS提供了客户端发现模式的一个很好的例子。 Netflix Eureka是服务注册表。它提供了一个REST API,用于管理服务实例注册和查询可用实例。 Netflix Ribbon是与Eureka一起使用的IPC客户端,可在可用服务实例之间平衡请求的负载。我们将在本文后面更深入地讨论Eureka。
客户端发现模式具有多种优点和缺点。这种模式相对简单,除服务注册表外,没有其他 Activity 部分。另外,由于客户端知道可用的服务实例,因此它可以做出智能的,特定于应用程序的负载平衡决策,例如一致地使用哈希。这种模式的一个重大缺陷是它将客户端与服务注册表耦合在一起。您必须为服务客户端使用的每种编程语言和框架实现客户端服务发现逻辑。
服务器端发现模式
客户端通过负载平衡器向服务发出请求。负载平衡器查询服务注册表,并将每个请求路由到可用的服务实例。与客户端发现一样,服务实例是通过服务注册表注册和注销的。
AWS Elastic Load Balancer(ELB)是服务器端发现路由器的示例。 ELB通常用于平衡来自Internet的外部流量。但是,您也可以使用ELB负载均衡虚拟私有(private)云(VPC)内部的流量。客户端使用其DNS名称通过ELB发出请求(HTTP或TCP)。 ELB在一组已注册的 flex 计算云(EC2)实例或EC2容器服务(ECS)容器之间平衡流量。没有单独的服务注册表。而是将EC2实例和ECS容器注册到ELB本身。
HTTP服务器和负载均衡器(例如NGINX Plus和NGINX)也可以用作服务器端发现负载均衡器。例如,this blog帖子描述了如何使用Consul Template动态重新配置NGINX反向代理。 Consul Template是一种工具,可从Consul service registry中存储的配置数据中定期重新生成任意配置文件。每当文件更改时,它将运行一个任意的shell命令。在博客文章描述的示例中,Consul模板生成一个nginx.conf文件,该文件配置反向代理,然后运行命令告诉NGINX重新加载配置。更复杂的实现可以使用its HTTP API or DNS动态重新配置NGINX Plus。
诸如Kubernetes和Marathon之类的某些部署环境在集群中的每个主机上运行一个代理。代理充当服务器端发现负载平衡器的角色。为了向服务发出请求,客户端使用主机的IP地址和服务的分配端口通过代理路由请求。然后,代理透明地将请求转发到在群集中某处运行的可用服务实例。
服务器端发现模式具有多个优点和缺点。这种模式的一大好处是发现细节从客户端被抽象出来了。客户只需向负载均衡器发出请求。这样就无需为服务客户端使用的每种编程语言和框架实现发现逻辑。另外,如上所述,某些部署环境免费提供此功能。但是,这种模式也有一些缺点。除非负载平衡器是由部署环境提供的,否则它是您需要设置和管理的又一个高度可用的系统组件。
关于rest - 微服务编排的低层协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095183/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
使用微 Controller 时,通常您必须对寄存器进行写入和读取,为了使代码更具可读性,您需要定义寄存器地址及其位。这有点好,但是当您的寄存器名称彼此非常相似时,它很快就会变得困惑,例如此处所示 #
微 Controller 背景下的“原子操作”是什么? 我正在研究 TI F28027 MCU。 The data sheet says that its operations are atomic
我正在用 PIC 微 Controller 做一个项目。我有一个 ADC 采样并将数据保存到 RAM 存储器,一旦 RAM 被填满,我需要使用 PIC 微 Controller 通过蓝牙发送它。 我的
如何确定微 Controller 中特定程序所需的堆栈内存? 例如,假设我有一个内部可能有许多子例程或线程的程序。在我开始执行程序之前,我想修复这个程序的堆栈大小。我如何标记堆栈的终点。 最佳答案 我
我知道 printf 和 sprintf 之间的基本功能差异。但是,我想知道它们之间一些与时间/延迟相关的差异。显然,我想在我的一个自定义构建 RTOS 的任务中使用它。你怎么看 ?我想知道更多它会如
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我有一个一般性的问题。我在微 Controller 上记录错误。但是微 Controller 的资源比 Windows 计算机更有限。在我的例子中,我将 64 个错误代码保存在一个队列中,由 Free
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
假设我有一个时钟速度为 20 Mhz 的 8 位定时器。计时器在多少时间内可以计数多远而不溢出。或者1秒内溢出多少次?我知道它可以数到 255 并且会溢出 最佳答案 时间和频率之间的关系是t = 1/
我正在开展一个全面的长期 C 编程项目,该项目需要模块化编程方法。作为设计的一部分,将创建库,因此我想确认头文件组织的正确/错误解释: 问题 假设您正在创建一个库。经过深思熟虑,您决定您希望构想的最终
1. #define timers ((dual_timers *)0x03FF6000) 这是 ARM 微 Controller 中使用的内存映射定义 结构定义在哪里 2. struct dua
我购买了 LinkSprite JPEG 彩色相机和 LPC1768 mbed 微 Controller 。通过“LinkSprite”相机,我可以拍摄 jpeg 格式的图像,根据他们提供的教程,我可
我有很多不同的时间来跟踪我的设计,但没有什么是 super 关键的。 10 毫秒 +/- 几毫秒根本不是什么大问题。但是可能有 10 个不同的定时器同时在不同的周期进行计数,显然我没有足够的专用定时器
是否可以通过串行端口与 PIC 单片机通信 Android 应用程序?我可以使用哪些低成本手机?对不起,我是哥伦比亚人。 最佳答案 不确定 PIC,但是 Arduino可能是一个很好的引用点,并且有一
今天我一直在思考以下问题: 在一台普通的 pc 中,当你分配一些内存时,你向操作系统请求它,它会跟踪哪些内存段被占用,哪些内存段没有被占用,并且不要让你弄乱其他程序的内存等。但是微 Controlle
我已经为微 Controller 的键盘开发了一个 c 驱动程序。我想改变它,例如,当我按下 1 时,它会显示 1,直到我按下另一个数字。截至目前,数字只有在我按下数字时才会改变,这意味着一旦我松开键
我有一个在线程之间共享的 volatile unsigned char array LedState[5] 变量。数组中的每个索引表示一个状态。根据每个状态,LED 将以不同的顺序闪烁。一个线程设置数
我有一个项目要对微 Controller PIC18F 进行编程,我必须将一个开关电路连接到微 Controller 板上,这个开关电路有一个电锁和一个蜂鸣器要连接到它。 锁最初是通电的。假设当我发送
我是一名优秀的程序员,十分优秀!