我有一个在Solaris上混合使用Java和C++的应用程序.代码的Java方面运行Web UI并在我们正在与之交谈的设备上建立状态,并且C++代码实时处理从设备返回的数据.共享内存用于将设备状态和上下文信息从Java代码传递到C++代码.Java代码使用PostgreSQL数据库来保持其状态.
我们遇到了一些相当严重的性能瓶颈,而现在我们可以扩展的唯一方法就是增加内存和CPU数量.由于共享内存设计,我们被困在一个物理盒子上.
这里真正受到重创的是C++代码.Web界面相当轻松地用于配置设备; 我们真正苦苦挣扎的是处理设备配置后提供的数据量.
我们从设备返回的每一段数据都有一个标识符,指向设备上下文,我们需要查看它.现在有一系列共享内存对象由Java/UI代码维护并由C++代码引用,这就是瓶颈.由于该架构,我们无法将C++数据处理移动到另一台机器上.我们需要能够扩展,以便不同的机器可以处理各种设备子集,但是我们失去了进行上下文查找的能力,这就是我要解决的问题:如何卸载真实的时间数据处理到其他框,同时仍然能够引用设备上下文.
我应该注意到,我们无法控制设备本身使用的协议,并且情况不可能发生变化.
我们知道我们需要摆脱这种情况,以便能够通过向群集中添加更多计算机来扩展,并且我正处于确定如何执行此操作的早期阶段.
现在我正在将Terracotta看作是一种扩展Java代码的方法,但我还没有找到如何扩展C++来匹配的方法.
除了扩展性能之外,我们还需要考虑高可用性.应用程序需要几乎一直可用 - 不是绝对100%,这不符合成本效益,但我们需要做一个合理的工作来度过机器停机.
如果你必须承担我已经获得的任务,你会做什么?
编辑:基于@john channing提供的数据,我正在看GigaSpaces和Gemstone.Oracle Coherence和IBM ObjectGrid似乎只是java.
对于像stackoverflow这样的高流量网站,数据库设计和规范化的最佳实践是什么?
是否应该使用标准化数据库进行记录保存或标准化技术或两者的组合?
将规范化数据库设计为记录保存的主数据库以减少冗余并同时维护数据库的另一种非规范化形式以便快速搜索是否合理?
要么
主数据库是否应该非规范化,但在应用程序级别使用标准化视图来进行快速数据库操作?
或其他一些方法?
performance database-design high-availability denormalization database-normalization
LMAX Disruptor通常使用以下方法实现:

在此示例中,Replicator负责将输入事件\命令复制到从属节点.复制一组节点需要我们应用一致性算法,以防我们希望系统在出现网络故障,主故障和从站故障时可用.
我正在考虑将RAFT一致性算法应用于此问题.一个观察结果是:"RAFT要求在复制期间将输入事件\命令存储到磁盘(持久存储)"(参考此链接)
这种观察实质上意味着我们无法执行内存中复制.因此,似乎我们可能必须结合复制器和记者的功能才能成功地将RAFT算法应用于LMAX.
有两种方法可以做到这一点:
选项1:使用复制日志作为输入事件队列

我认为这个选项的缺点与我们做一个额外的数据复制步骤(接收器到事件队列而不是环形缓冲区)这一事实有关.
选项2:使用Replicator将输入事件\命令推送到从属的输入日志文件

我想知道是否有其他解决方案来设计Replicator?人们用于复制器的不同设计选择有哪些?特别是任何可以支持内存复制的设计?
我希望Google提供有关Cloud Bigtable服务提供的持久性和可用性保证的指导.
到目前为止,我的理解是:
最小集群需要3个节点的事实表明,至少在区域内,数据非常耐用并且复制到3个节点.
然而,谷歌的回答是"Cloud Bigtable不会复制数据" - 与Cloud Bigtable主页上的引用直接相矛盾,该主页声称"它是使用复制存储策略构建的".那是哪个呢?它复制与否?如果是这样,保留了多少份?
群集只能在特定区域内设置的事实表明群集的可用性直接与该区域的可用性相关联.因此,如果我想拥有一个高度可用的基于Bigtable的数据存储,那么最佳做法是跨多个区域设置独立的集群并自己处理集群中的写入同步吗?
没有关于跨区域的Bigtable集群是否独立的信息.如果我要跨多个区域设置集群,并且一个区域出现故障,我们是否可以期望其他区域中的集群继续工作?或者是否存在一些潜在的单一故障点,甚至可能跨区域影响集群?
与针对这些细节非常具体的App Engine数据存储区相比,Cloud Bigtable文档相当缺乏 - 或者至少,我没有找到一个详细介绍这些方面的页面.
Cloud Bigtable文档在其他方面同样含糊不清,例如关于值的大小限制问题,文档指出单个值应保持低于"每个单元约10 MB"."~10 MB"究竟是什么意思?!我可以对10MB的限制进行硬编码并期望它始终有效,还是会根据未知因素每天变化?
无论如何,如果我听起来很激动,道歉.我真的很想使用Bigtable服务.但是,我和许多其他人一样,在能够投资之前需要了解它的耐久性/可用性方面.谢谢.
high-availability google-cloud-platform google-cloud-bigtable
有没有人知道运行Windows服务的任何已建立的最佳实践(在我的情况下,在.NET中开发),以便它们(自动)正确地故障转移到另一台服务器,以实现高可用性?
我可以看到这样做的主要方式是在需要时启动辅助服务器(在这种情况下需要监视其他服务器的东西),或者让两个服务一起运行(在这种情况下,他们需要同步他们的工作所以他们不会尝试做同样的事情).
是否存在针对此类问题的模式或模型?我知道确切的情况会产生很大的不同,但这似乎是一个相当普遍的问题.
谢谢
约翰
你能帮我理解Linux HA吗?
linux high-availability reliability cluster-computing heartbeat
我正在尝试通过Phoenix连接HBase集群.首先,我将Phoenix客户端和查询服务器jar文件复制到HMaster和HRegion lib文件夹,然后重新启动HBase服务.
服务器 - 通过/bin/queryserver.py启动Phoenix服务器.它运行正常.
客户 -
AvaticaClientRuntimeException: Remote driver error: RuntimeException: java.sql.SQLException: No suitable driver found for "http://hacluster:8764".
高可用性集群的Hbase-site.xml文件配置
<property>
<name>hbase.master</name>
<value>activenamenode:60000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hacluster/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>zk1,zk2,zk3</value>
</property>
<property> <name>hbase.rpc.timeout</name>
<value>60000</value>
<property>
Run Code Online (Sandbox Code Playgroud)
它在伪节点集群上工作.但在启用HA的Hadoop集群中失败了.
在HA Cluster中,我为文件中的hbase.rootdir属性设置了活动的namenode url而不是HA nameservice hbase-site.xml.
假设我想在小型部署的生产环境中拥有高度可用的 Kafka。我必须使用以下配置
min.insync.replicas=2 // Don't want to lose messages in case of 1 broker crash
default.replication.factor=3 // Will let producer write in case of 1 replica disappear with broker crash
Run Code Online (Sandbox Code Playgroud)
如果 1 个 broker 崩溃并且 1 个副本消失,Kafka 会开始制作新副本吗?
在任何情况下,我们是否必须至少有default.replication.factor数量的经纪人才能继续工作?
我在 MySQL master 上设置了 proxysql 以进行读写分离。MySQL主从,proxysql服务器正在运行,但是,我Access denied在proxysql终端中收到错误。
[devops@DRMBUST05 ~]$ mysql -uproxysql -p**** -h 127.0.0.1 -P 6033
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of …Run Code Online (Sandbox Code Playgroud) apache-kafka ×1
c++ ×1
consistency ×1
hbase ×1
heartbeat ×1
java ×1
linux ×1
lmax ×1
mysql ×1
nosql ×1
performance ×1
phoenix ×1
proxysql ×1
raft ×1
redis ×1
reliability ×1
replication ×1
scalability ×1
solaris ×1