scalability - 扩展基于 TCP/IP 的系统并确保高可用性

标签 scalability distributed high-availability tcp

我有一个基于 TCP/IP 的组件,它与基于 C++ 的系统进行通信。事实上,它从该系统读取原始字节,然后将这些原始字节编码到对象中并将其存储在数据库中。这个基于多线程 tcp/ip 的组件是用 java 编写的,可以部署在双核或四核处理器上(不确定它对我的问题是否重要,但我给出了一个细节)。现在我有几个问题:

  1. 如何扩展这个基于 tcp/ip 的组件。该组件部署在服务器上并监听端口。将来,如果目前设想有更多来自 C++ 系统的数据,我们应该能够扩展这个 java 组件。

  2. 安全性怎么样。我可以做的一件事是在安全套接字上使用这种通信或者可能获取加密数据(我可以在这里使用的任何特定加密?)。还有其他方法可以保证安全吗?

  3. 还需要满足高可用性的要求。我该如何处理?我这里怎么可能有冗余?

是的,我们正在研究产品的系统架构,因此我想知道是否有经验丰富的架构师或设计师可以帮助我。

最佳答案

How can I scale this tcp/ip based component. This component is deployed on a server and is listening to a port. In future if there's more data that is envisaged at this point that comes from the C++ system we should be able to scale this java component.

您通常使用网络负载平衡器在多个服务器之间扩展此类服务。该负载均衡器可以使用各种算法分配负载,例如:

  • CPU 负载(通常使用 snmp 测量)
  • 客户端 IP 地址(如果您在将客户端映射到您的服务时需要持久性)
  • 事件套接字数量
  • 等等

看看HAProxy一个流行的开源负载均衡器。 F5拥有最流行的商业负载均衡器解决方案。

What about security. One thing which I can probably do is employ this communication on secure sockets or probably get encrypted data (any particular encryption that I could use here??). Any other way to take care of security?

  • 如上所述,SSL 是一种选择,但请注意,如果您在执行客户服务的同一硬件上进行加密,这会对您的服务性能造成很大影响。一种选择是使用在硬件中实现 SSL 的商业负载平衡器;然后,该负载平衡器会将未加密的套接字转发到您的 TCP 服务场。
  • 在某些情况下,您可以使用 IPSec网络级加密;通常,这是另一种网络硬件解决方案。通常,您的客户端会下载驻留在其 PC 上的 IPSec 应用程序...然后他们会连接到您的 IPSec 服务器,该服务器在其客户端和您的 IPSec 终止点之间进行加密
  • SSH带端口转发的隧道(低技术解决方案)
  • tcpcrypt作为一项 future 技术看起来很有趣,但我不确定它现在有多成熟。

There is also a requirement of high availability to be satisfied. How do I handle that? How could I possible have redundancy here?

很大程度上取决于您所说的高可用性的含义以及您需要什么样的恢复时间。在较高层面上,您有几个选择:

  • 如果您不需要客户端到套接字映射持久性,则基于 DNS 的 HA 可以工作;如果您使用 DNS,则需要愿意接受典型的 DNS A 记录超时(通常人们不会低于约 5 分钟/300 秒)。这还假设您找到了一种跨多个站点同步数据库的方法。
  • 负载平衡器解决方案。同步后端数据库也有同样的问题

要进行任何类型的 HA,您可能需要聘请一位在实现这些服务方面拥有良好记录的顾问(如果您内部没有此类资源)。

关于scalability - 扩展基于 TCP/IP 的系统并确保高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878635/

相关文章:

Java单播和组播性能

sockets - 每个套接字连接使用一个 actor 的 Scala 方法

heroku - AWS、Heroku 与其他可扩展平台?

hadoop - hadoop 的分布式替代品

Azure 应用程序高可用性

Hadoop Ha namenode java 客户端

node.js - 如何设计分布式 node.js Web 服务器

c++ - 为什么 Erlang 和其他函数编程语言不是原生 c/c++?

julia - @distributed 似乎有效,函数返回很不稳定

java - Spark 还是传统的守护进程来处理流更新?