前言

gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路。

架构

主要分为三个模块来开发,comet/web/message。

comet

主要负责消息排队、消息推送以及和客户端的连接维护;整套系统依据是消息ID顺序原则获取消息(客户端本地获取最大的消息是1,那么之后获取的消息就是大于1的,获取离线消息的时候也要从上次最大消息ID来获取),因此消息推送以后需要在comet中排队然后发起RPC给message实现存储。

message 

主要负责消息的存储和读写;接受来自comet模块的消息进行持久化,或者接受web模块的读取消息请求获取离线消息。message是可以部署多个节点来负载来自大量comet的推送压力,比如不同的comet使用不同的message节点(节点无状态),之后在comet也会做多message节点的负载均衡RPC调用和故障转移(TODO)。

web

主要负责节点询问,以及离线消息获取和后台节点管理等;节点询问主要依据客户端的订阅Key一致性hash计算出连接的comet节点地址,因此海量客户端连接的时候可以打散到多个comet来服务;另外离线消息也是通过web接口返回给客户端的,但是消息的读取是通过RPC发送给message模块的,尽量的职责单一。web节点因为无状态,可以部署多个web,来实现负载均衡和故障转移。

thrid-part

消息存储现在主要依赖Redis进行消息读写(Sorted Set),因为Sorted Set不支持int64类型的Score(我们也开发了一个支持int64 Score的分支但是因为时间原因没有大量测试上线),之后可能会使用HBase集群代替Redis的使用,已提供更安全的离线消息存储(TODO)。

另外使用了Zookeeper来实现的同一个comet的故障转移,例如comet 节点1可以有一个备选节点节点2,当节点1注册到zookeeper之后,因为机器或者其他原因宕了,这时候会在web层触发zookeeper的选举选中节点2来服务。

结束语

gopush-cluster大致的架构就说到这了,之后会写其他模块细节以及优化和遇到的问题。

posted @ 2014-03-06 21:48 Sai~ 阅读(6705) 评论(0) 推荐(1) 编辑
摘要: 监控前言 上一节我们提到了MSSQL的基于SQL Event的监控,但是有些时候我们需要更加详细、适用于调优排错的监控。SQL Server内部运行的可见性是的查询调整、优化和综合排查成为可能!这一节主要和大家说说SQL Server跟踪(SQL Server Profile)的一些监控方式和途径。 使用场景 记得某次给一家公司调优的时候,负责人发给我一堆业务的T-SQL脚本,我面对海量脚本还是从容,虽然不了解内部复杂的业务,但是我们得专注问题的关键 “慢”,我们根据查询的“慢”把他们筛选出来,一一调式优化,不就迅速解决问题吗?三天后,负责人含泪握着我的手,哥们辛苦了,查询响应得到了质的改善。 阅读全文
posted @ 2011-01-21 00:18 Sai~ 阅读(15500) 评论(18) 推荐(19) 编辑
摘要: 作为DBA,不仅仅是帮助开发人员写优秀的查询脚本、高效的数据存储架构。其实更多时候都是在运维,大部分工作时间都不算饱和的,可是为什么有些DBA如此忙碌、狼狈不抗甚至等到客户或者乙方公司抱怨呢,那很多原因就是对SQL Server 的基础监控架构不熟悉,不够了解,不能自动化安排监控任务。 获取通知:SQL Server为我们提供的诸如SQL Mail,Database Mail 邮件方式的信息发送方式,因此我们利用邮件来进行最基础的获取通知异常等情况。我在之前的文章提过Databasemail,大家可以做为参考 MSSQL数据库邮件系列一(环境搭建) MSSQL数据库邮件系列二(SSMS和T 阅读全文
posted @ 2011-01-19 15:03 Sai~ 阅读(7392) 评论(6) 推荐(12) 编辑
摘要: 前端时间给别人做迁移数据库时候,遇到一些问题.大致是,如果备份的数据库存在EXTERNAL_ACCESS 和UNSAFE的程序集,那么在还原的时候程序集会出现一些奇怪的错误: 消息 10314,级别 16,状态 11,第 1 行 在尝试加载程序集 ID 65536 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集,因为它的 PERMISSION_SET 设置为 EXTERNAL_ACCESS 或 UNSAFE。请重新运行查询,或检查有关的文档了解如何解决程序集信任问题。有关此错误的详细信息: System.IO.FileLoadExcepti 阅读全文
posted @ 2011-01-18 14:12 Sai~ 阅读(6184) 评论(4) 推荐(6) 编辑
摘要: 之前看到博友们一些文章解决asp.net的下载文件名的乱码,但是貌似针对其他浏览器比如Firefox的中文还是有乱码,空格出现+号(这时候IE,Chrome没问题) 刚才试了试,用这个方法可以搞定了IE,Chrome,Firefox.其他没测试,先贴上代码: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicclassUrlEncoder{///summary///Encodesnon-US-ASCIIcharactersina 阅读全文
posted @ 2011-01-07 14:26 Sai~ 阅读(1875) 评论(2) 推荐(2) 编辑
摘要: 本文主要和大家描述一下关于Powershell变量的详细内容,上回和大家聊到了Powershell的远程管理,有朋友反映Powershell的基础只是还不够了解,所以先谈谈在Powershell中的变量问题. 创建自己的变量 PS C:\Users\Terry $a = 1.2 那么我们就创建了一个名字为a的变量,注意Powershell 中变量都用美元符号"$"做为开始. PS C:\Users\Terry $b = 2.3 我们再次创建了一个为b的变量,两个变量是可以直接进行运算的,例如对他们进行一个乘操作. PS C:\Users\Terry $a*$b 2.76 很明显的 阅读全文
posted @ 2010-11-18 17:26 Sai~ 阅读(8235) 评论(2) 推荐(4) 编辑
摘要: 上文Powershell 远程管理 (一)和大家大概的讲述了一个我的远程管理的过程,今天主要和大家说说ps 在交互式会话的管理方式也就是Pssession,Pssession是Windows Powershell会话的意思,一个会话,可以共享数据,提供交互式的对话,我们可以为某些命令例如Invoke-Command 制定会话来远程作业。当然我们还能利用Enter-Pssession来直接和远程计算机连接,直接建立一个持续安全的远程对话,来执行我们的所有命令。我们分三个部分来讲述Powershell Session,首先是域环境下的远程连接,WAN/LAN的远程连接(Trusthost方式),W 阅读全文
posted @ 2010-11-12 15:02 Sai~ 阅读(10717) 评论(8) 推荐(4) 编辑
摘要: Powershell 远程管理 (一)忙里偷闲挤出点时间写写PS在Windows不错的管理方式。Powershell 2.0以后可以说是有了质的变化,Modules的加入、ISE、WinRM远程管理的支持,今天主要讲一系列PowerShell在企业级应用的远程管理,其实也是我这次在部署一个应急方案使用的一些脚本和方案的集合吧。(我这里是 域环境,读者可以自己搭建测试)首先,我们需要安装Powershell 2.0和WinRM 2.0 ,这个是作为WindowsUpdate附加补丁得,可以通过可选补丁进行安装选中,直接安装就好了,如果要给所有的服务器安装这个补丁,那么可以考虑用AD环境下的WSU 阅读全文
posted @ 2010-11-09 13:04 Sai~ 阅读(11135) 评论(3) 推荐(4) 编辑
摘要: SQL Server 2008 复制 分区SWITCH清理数据场景:某种特定业务下,我们的部分业务数据可能只会保留比较短的时间,用来做临时处理。因为考虑高可用的特性,可能会利用SQL Server的复制组件复制这种数据到另外的 类似前端,查询中心等数据库服务器,创建一个冗余副本。复制组件标记事务日志,追踪所有的Update,Insert,Delete操作。可是如果不定期清理这种表,那么在一个快速增长的环境下,表变的臃肿不堪,不仅仅浪费磁盘空间,而且给性能带来了负面影响。如:A临时数据中心 ---同步--B 查询/其他业务中心,副本 保证A不可用的时候,B的业务不依赖于A服务器,利用A同步过来 阅读全文
posted @ 2010-05-12 17:15 Sai~ 阅读(4657) 评论(13) 推荐(7) 编辑
摘要: SQL Server 2008 安全性——透明数据加密(TDE) 在SQL Server 2005的安全性来说,做的不够好,比如EKM这种可扩展的外部密钥管理就不支持,包括对数据库文件本身的加密。 SQLServer 2008中增加了透明数据加密TDE,TDE使用DEK 数据库加密密钥对数据文件进行加密,包括IO操作,加入内存等都是存在加密和解密操作的。DEK本身是受master数据库下的证书保护的,当然也支持EKM模块包含。我们对数据文件可以使用标准的DES和AES加密。 在某些特定场合,比如我们的服务器发生盗窃行为的时候,一些关键性数据库不被恶意附加挖掘其中的价值数据,除了使用硬件级别的文 阅读全文
posted @ 2010-05-11 16:40 Sai~ 阅读(13312) 评论(13) 推荐(8) 编辑
点击右上角即可分享
微信分享提示