我无法弄清楚如何让 Monit 监控服务器上打开/建立的 TCP/IP 连接的数量,以便在打开“太多”时发送警报。你知道如何设置吗?
z8000's questions
假设我在同一个数据中心有两台机器,但不一定在同一个机架中。
在这两台机器之间使用 UDP 发送数据包时,丢包有多常见?
我的假设是,由于机器之间最多只有几个交换机,因此根本不会丢弃数据包。
同一数据中心内的无序数据包到达有多常见?我的假设是 99.9% 的时间只有一条路线,所以这不会发生。
然而,每当我发现自己以绝对的方式思考时,我知道我一定错过了一些东西!
我需要哪些背景信息才能更好地了解何时会丢弃数据包,以及它们可能被丢弃的频率,以及同一数据中心中的机器乱序到达的频率?
最终,当位于同一数据中心的不同 Linode VPS 实例之间进行通信时,我试图在使用多播 UDP 或 PGM 之间做出决定。信息必须按顺序到达。当然,那时 UDP 听起来并不那么好!
但是,如果可以期望在同一个数据中心内实现几乎完美或完美的交付,那就没问题了。但是,我正在测试这个假设。
谢谢。
我正在设计一个客户端连接并保持连接的网络服务——该模型离 IRC 不远,减去 s2s 连接。
我可以使用一些帮助来了解如何进行容量规划,特别是与处理来自/到客户端的消息相关的系统资源成本。
有一篇文章试图让 100 万个客户端连接到同一台服务器 [1]。当然,这些客户端中的大多数在测试中完全处于空闲状态。如果客户端每 5 秒左右发送一条消息,系统肯定会崩溃。
但是......你怎么做的少挥手,你知道,测量这样一个断裂点?
我们谈论的是由客户端通过 TCP 套接字发送到内核并由应用程序读取的消息。数据在内存中从一个缓冲区移动到另一个缓冲区。我是否需要考虑内存吞吐量(“5 GT/s”[2] 等)?
我很确定我有能力测量由于处理消息所需的 TCP/IP 缓冲区、预期带宽和 CPU 资源而导致的基本内存需求。我对我所说的“thoughput”有点模糊。
帮助!
另外,真的有人这样做吗?或者,大多数人会挥手看看现实世界提供了什么,然后做出适当的反应吗?
[1] http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3/
假设您有 2 台服务器,每台服务器都有 8 个 CPU 内核。
每个服务器运行 8 个网络服务,每个服务托管任意数量的长期 TCP/IP 客户端连接。
客户端向服务发送消息。
服务根据消息 执行某些操作,并可能通知 N>1 个客户端状态更改。
当然,这听起来像一个僵尸网络,但事实并非如此。考虑 IRC 如何与 c2s 和 s2s 连接以及 s2s 消息中继一起工作。
- 服务器位于同一个数据中心。
- 服务器可以通过专用 VLAN @1GigE 进行通信。
- 消息的大小小于 1KB。
您将如何协调哪个主机上的哪些服务应该接收消息并将消息中继到连接的客户端以获取状态更改消息?
有无数种方法可以有效地解决这个问题。
- AMQP(RabbitMQ、ZeroMQ 等)
- 传播工具包
- 所有服务之间的 N^2 个连接(坏)
- 哎呀,甚至运行 IRC!
- ...
我正在寻找一个解决方案:
- 也许利用了只有一个小的封闭集群的事实
- 易于管理
- 可以很好地扩展
- 是“愚蠢的”(没有奇怪的边缘情况)
你有什么经验?
你有什么建议吗?
谢谢!
我是处理生产服务部署基础设施的新手。我的直觉告诉我,如果我想让我的服务尽可能地“启动”,但只能负担 2 台专用服务器(启动时间!),我应该让一台服务器成为另一台服务器的冗余副本。然后设置故障转移、复制等。
然而,在阅读了一些案例研究,甚至听说 Stack Overflow 和 OK Cupid 只有一个数据库服务器之后,也许我想多了?
我有点讨厌不得不每月花费 250 美元。在充当备份的租用服务器上以防万一。
这一切都取决于您提供的服务,但是来吧,堆栈溢出必须足够重要,以至于它应该需要一个冗余数据库。
好了,闲话不多说。我错过了什么?帮助!谢谢。
我为下一个项目的数据存储配置了 2 台专用服务器。数据存储配置为主从复制。没有固有的自动故障转移,但我当然想要这个。也就是说,我希望访问主数据存储始终可以正常工作,而无需配置客户端库来检测主数据何时关闭并故障转移到从数据。
我见过基于 Spread Toolkit 的 Wackamole。您为 Wackamole 提供一组 IP 和一堆节点,并且无论任何节点的启动/关闭状态如何,这些 IP 都将保持可用/启动。Wackamole 检测节点何时关闭并 ARP 解析在现在关闭的节点上启动的 IP。它实际上很整洁。
所以,我的想法是使用 Wackamole 保持 2 个虚拟专用 IP 可用/启动。然后,客户端将始终使用相同的私有 IP 来访问主数据存储,并为从属数据存储使用相同但不同的 IP,即使这些 IP 托管在同一个节点上。
我的数据存储服务器通过专用网络访问。我不确定这是否会与 Wackamole 混淆。
这是疯了吗?您通常如何处理数据存储等私有服务的自动故障转移。
FWIW,没关系,但数据存储是 Redis。我不想听到“使用 mySQL”请 :)
谢谢。
为具有单个网络接口的专用服务器提供多个公共 IP 地址有什么意义?我看到很多专用服务器托管服务显示类似“公共 IP:8”。我错过了什么?谢谢!
我已经配置了一个 8 核的服务器,并计划部署网络服务。为了分散请求负载,我想运行 8 个服务实例。这里没有什么令人震惊的。我无权访问硬件负载平衡器。我应该提一下,我目前已经分配了 5 个公共 IP 地址(但我可以获得更多)。
因此,我想听听您对构建软件负载平衡解决方案的建议。
显而易见的选择是:
- 使用 HAProxy;或者
- pre-fork 我的应用程序(就像 Facebook Tornado 和 Unicorn 一样);
- 在此处插入您的想法。
我的目标是:
- 在服务实例之间分散请求负载;和
- 允许滚动重启我的服务(代码升级)。
我应该提一下,这不是一个基于 HTTP 的服务,所以 NGiNX 之类的东西都出来了。
我不喜欢 HAProxy,因为它需要内存;每个客户端连接似乎都需要一个读写缓冲区。因此,我将在内核级别、HAProxy 和我的应用程序中拥有缓冲区。这越来越傻了!也许我在这方面遗漏了一些东西?
谢谢!
我是一名开发人员,在设计网络服务方面有好有坏,这将受到 iPhone 客户端的严重打击。iPhone 应用程序在过去一年的下载量超过了 10MM,现在我让用户在线进行互动。
我想为将托管我的基于 TCP 的网络服务的服务器调整 TCP 实现。发送的每个请求大小将是“小”(例如 < 256 字节)。好吧,你明白了,它是一个游戏服务器(令人震惊!)。
仅供参考,我对这个特定服务的 UDP(或在 ENet 和 RakNet 中看到的 UDP 上的可靠层)不感兴趣,因为游戏不像 Quake;必须可靠地接收所有数据包,这就是 TCP 的设计目的。因此,iPhone 客户端和服务之间的连接将是“长期存在的”(尽可能多地——该死的隧道和电梯!)。
仅供参考,我在运行 Linux 2.6.18-164.9.1.el5 的服务器上以 100Mbps 上行链路运行该服务。
我的目标是同时:
- 保持尽可能低的延迟;和
- 最小化每个连接的客户端使用的内存量。
有大量与 TCP 相关的旋钮需要调整!经过一些基础研究后,似乎大多数人建议保持原样。但是,有许多设置似乎应该针对特定情况进行调整。我知道这有点模糊,这就是我寻求帮助的原因。
考虑调整片状网络上的小请求/响应同时尽可能减少内存的事情可能是:
- TCP/IP 实现可用的内存
- 设置“nodelay”选项(禁用 Nagle 算法,因为这是一个半实时游戏服务器)
- 拥塞控制算法
- 等等(还有什么?)
考虑 TCP拥塞控制算法:
- reno:几乎所有其他操作系统都使用的传统 TCP
- 立方:CUBIC-TCP
- bic:BIC-TCP
- htcp:汉密尔顿 TCP
- 维加斯:TCP 维加斯
- westwood:针对有损网络进行了优化
我的服务器默认使用bic,其“目标是设计一种协议,该协议可以在高速长距离网络上将其性能扩展到每秒数十吉比特,同时保持强大的公平性、稳定性和 TCP 友好性。”
仅从微小的描述来看,Westwood听起来更贴切,因为它“旨在更好地处理大带宽延迟产品路径(大管道),由于传输或其他错误(泄漏管道)而导致潜在的数据包丢失,以及动态负载(动态管道)”。
我是不是太深入了,还是这门课程的标准杆?
你们通常为哪些类型的东西调整 TCP/IP?如何?有哪些经验法则需要了解?
对于我的具体情况,你有什么智慧之言?
非常感谢!