服务器资源: 8核16G内存, 6个机械磁盘,每个磁盘100G, 用于mongo分片,10MB带宽。
性能评估:同时在线用户10万,每秒钟发送消息900条,消息延时1秒(从发送者发出消息到接收到消息)
启动sdk,模拟50个用户在线、离线情况,消息可靠性100%。
发送10万消息,有3条失败,其他消息都能被对方精确收到,并成功落地本地db。对于失败的3条消息,接收方确实没有收到,系统消息是一致的。
OpenIM是由前微信技术专家打造的开源的即时通讯组件。Open-IM包括IM服务端和客户端SDK,是一套整体的解决方案,代码开源,一切可控,
OpenIM可以实现全平台支持,目前支持Android,iOS,Flutter,Uni-app,react-native, JSSDK等。
OpenIM可以应用在企业内部办公,dating交友,在线客服等项目,也可以用于元宇宙。
github地址:https://github.com/OpenIMSDK/Open-IM-Server
开发者中心: https://doc.rentsoft.cn/#/
在单机的情况下,模拟线上用户发消息流程,在线用户量和消息量达到一定量级后,系统CPU、内存、磁盘占用、以及消息时延情况。以确定用户群体达到一定量级后,对服务器资源的预先评估。本次测试并不极限测试,一是因为生产环境本来都会有用户量和消息量的限制,二是因为OpenIM的消息模型,消息发送首先都会通过websocket入库kafka,理论上发送消息的写入性能是两者的组合,而消息发送的真正瓶颈实际在mongodb的随机读写。
服务器资源: 腾讯云主机(香港)1台:linux Ubuntu 18.04.4系统,4核8G内存,单块机械硬盘。5Mb带宽。
测试条件:去掉消息入库mysql(因mysql仅用于管理后台,不影响线上用户服务)。日志级别调整为4或更低。kafka设置2个分区,msg_transfer 2个。
测试流程:1个客户端(成都,window pc,4核16G内存)启动1万个协程,模拟用户与服务器建立websocket长连接,间隔时间为随机50-100秒之间。两个客户端共模拟2万用户同时在线,发送消息,观察消息流转各个模块的处理能力,共计2500万条消息,观察系统内存、磁盘资源使用情况。
mongodb数据情况
redis数据情况
磁盘状态
资源占用分析
(1)redis内存消耗极小,一个用户一条数据(包括token和seq),和用户量成正比,3万用户占用几十M内存。
(2)mongodb如果去掉cache,内存消耗极小,每个document存放5000条消息,与用户量和消息量成正比,3万用户,2500万消息,索引才950K(更好的方式查看mongo消耗cache之外的内存)
(3)2500万消息,磁盘空间占用10G。
(4)每秒钟150条消息,cpu整体占用50%,即2核。
性能分析
(1)性能瓶颈在mongodb写入操作,1条消息,需要按照发送者和接收者拆分2次,mongodb写入2次,未来可以针对mongodb读写进一步优化。
(2)对于cpu消耗较大的模块,未来做一次整体优化。
(3)性能很平稳,不会随着数据量增加而降低。机械磁盘iops 达到200基本达到了设备的极限
服务器资源: 8核16G内存, 6个磁盘,每个磁盘100G, 用于mongo分片,10MB带宽。
性能评估:同时在线用户10万,每秒钟发送消息900条,消息延时1秒(从发送者发出消息到接收到消息)
(1)mongo集群部署,支持上亿用户同时在线,千亿级消息;
(2)简化集群部署;
(3)数据备份、恢复工具;
以上主要对服务端性能做了一个大致测试,但一套完整的IM解决方案,不仅仅是服务端的工作。实际上,客户端重要性毋庸置疑,具体包括如何利用seq和服务端同步消息,如果保证消息收发的时序,如何回调客户端(会话改变、新增,新消息),消息落地本地db,seq同步,消息推拉如何结合以确保消息收发可靠性。
相比于性能测试,实际上,消息的可达性(可靠性)更为重要。所以,我们在做性能测试的同时,也要对消息的可达性(可靠性)进行测试,如果不能保证消息收发的正确性,再高的性能也是徒劳。本文重点总结关于OpenIM对于消息可达性测试的方案、过程以及结果。先说结论,OpenIM消息可达率100%,大家可以放心使用在生产环境中。seq对齐和同步机制,保证了OpenIM的消息可达性是业界领先的。
IM消息系统的可靠性,通常就是指消息投递的可靠性,即我们经常听到的“消息必达”,通常用消息的不丢失和不重复两个技术指标来表示。确保消息被发送后,能被接收者收到。由于网络环境的复杂性,以及用户在线的不确定性,消息的可靠性(不丢失、不重复)无疑是IM系统的核心指标,也是IM系统实现中的难点之一。总体来说,IM系统的消息“可靠性”,通常就是指聊天消息投递的可靠性(准确的说,这个“消息”是广义的,因为还存用户看不见的各种指令和通知,包括但不限于进群退群通知、好友添加通知等,为了方便描述,统称“消息”)。
从消息发送者和接收者用户行为来讲,消息“可靠性”应该分为以下几种情况:
(1)发送失败,对于这种情况IM系统必须要感知到,明确反馈发送方。如果此消息没有发送成功,发送方可以选择重试或者稍后再试。
(2)发送成功,如果接收方处在“在线”状态,应该立即收到此消息。如果接收方处在“离线”状态不能收到消息,一旦上线则立刻收到消息。
(3)消息不能重复,用数学术语表示:“有且仅有这条消息”,如果重复了,可能表达的意思就变了。 总之,一个商用 IM系统,必须包含消息“可靠性”逻辑,才能谈基本可用,这是IM系统最基本也是最核心的逻辑。
互联网真实场景复杂,但客户端大体可以分为两种情况:(1)发送消息时,接收方在线,能收到消息;(2)发送消息时接收方不在线,登录后能收到离线消息。我们用测试程序模拟互联网客户端各种场景,按照登录、发送消息、接收消息的情况,把测试客户端分为以下2种类型:
(1)启动测试时离线,随机sleep 0-60 秒后登录,发送消息,且接收消息
(2)启动测试时离线,随机sleep 0-60 秒后登录,不发送消息,只接收消息
在实际测试中共计50个客户端,约25个(50%概率)客户端不发送只接收消息,约25个(50%概率)客户端发送且接收消息 。
发送模式:每个客户端随机选择其他客户端作为消息接收者;
测试预期: 每一条发送成功的MsgID,都能在接收的消息列表中找到,同样,每一条接收到的MsgID,都能在发送成功的消息列表中找到。
具体做法:(1)消息发送成功后,通过OnSuccess回调,记录MsgID; 收到新消息后回调OnRecvNewMessage,记录MsgID;(2)周期性对比两个消息列表,确认是否完全一致;
发送数据100000条,其中失败3条,9999997条成功,接收方成功接收9999997条消息(接收方成功接收到消息,写入本地db,并能触发消息回调)
每一条发送成功的消息,对方都能准确接收到,无论接收方在消息发送时的登录状态是在线还是离线。
每一条发送失败的消息,对方都不会收到。
注意事项:
(1)控制压力,因为sdk需要写本地db,客户端会成为压力瓶颈。
(2)压测客户端日志会影响测试性能。
此表格是某IM云平台的价格,如果按照10万月活,存储三年消息来算,大概每年需要支付15万。而采用OpenIM只需要采购云主机,每年成本约0.8万。
看看这里http://bbs.whnet.edu.cn/cgi-bin/bbscon?board=Linux&file=M.1228184731.A&num=4478一步步照做就行,我就是这样做成功的。简介:深圳科士达科技股份有限公司成立于一九九三年,是专注于电力电子技术领域,产品涵盖UPS不间断电源、数据中心关键基础设施(UPS、蓄电池、精密配电、精密空调、网络服务器机柜、机房动力环境监控)、太阳能光伏逆变器、逆变电源的国家火炬计划重点高新技术企业。是中国大陆本土规模最大的UPS研发生产企业,高品质阀控式密封铅酸蓄电池专业制造商,行业领先的数据中心关键基础设施一体化解决方案提供商、新能源电力转换产品领域新锐实力厂商。产品覆盖亚洲、欧洲、北美、非洲八十多个主要国家和地区市场。2010年12月7日,公司在深圳证券交易所成功上。【市场业绩】根据中国电子信息产业发展研究院赛迪顾问(CCID)统计,2000-2009年科士达国内UPS销量以领先优势,连续十年市场占有率排名国产品牌第一位。2009年,科士达UPS产品在中国大陆市场上以27.15万台和16.6%的市场份额,蝉联国内UPS品牌销量十连冠,在所有国内外品牌中排名第二。同时,科士达UPS以约占全球4%的出货量,成为全球UPS电源产业市场最具成长性的中国供应商。【资质认证】科士达公司除通过ISO9001国际质量体系认证、ISO14001国际环境体系认证、OHSAS18001职业健康安全管理体系认证、中国泰尔认证、产品节能认证、3C认证、欧洲CE认证、美国UL认证等多项国内外产品质量/安规认证外,在中国大陆市场上,是以下多个政府机构或大型行业系统UPS设备全国统一选型入围品牌或集中采购中标品牌厂商:中央国家机关国家教育部国家税务总局国家气象总局国家广电总局解放军总参国防科工委中国电信中国移动中国联通中国石化中国银行中国工商银行中国人寿兴业银行中信银行北京银行上海浦东发展银行深圳发展银行【行业应用】成立十七年来,科士达公司凭借研发、产品、服务、产能规模等方面的领先综合优势,产品广泛应用于政府、金融、通信、教育、交通、气象、广播电视、工商税务、医疗卫生、能源电力等各个行业领域,为包括各省政府电子政务工程、银行系统金融电子化工程、国家金税工程、国家新一代天气雷达网、国家广电总局“村村通”工程、全国武警三级网工程、教育部“西部大学校园网”工程、全国农村中小学远程教育工程、全国农村党员远程教育工程、文化部“文化共享工程”、“平安城市”工程、中石化加油IC卡工程、三峡工程、西气东输工程、青藏铁路、2008北京奥运会、第九届/第十一届全国运动会、第24届世界大学生运动会、2010年上海世博会等在内的一大批国家重点工程提供高可靠电力保护,全力护航中国信息化建设事业。【服务体系】科士达在业内率先建立起“全国客户服务中心-大区技术支持中心—区域售后服务中心-授权服务中心”为架构的覆盖广泛、布局合理、贴近用户的多级服务体系,并在中国计算机用户协会、赛迪顾问(CCID)、计世资讯等知名第三方机构历年来的大型用户满意度调查中,多次蝉联“UPS服务用户满意度金奖”、“UPS服务用户满意度第一”、“中国计算机用户服务优质企业”、“最佳服务承诺兑现企业”等权威服务奖项桂冠。2005年12月27日,科士达独家中标由国家税务总局组织的“全国金税工程骨干网络UPS设备整体保外服务”项目,本项目是国内第一个国家大型关键行业系统UPS设备整体服务外包工程。根据协议内容,科士达将为国家“金税工程”骨干网络中大功率关键UPS设备,提供为期5年的整体性续保服务。【研发与创新】科士达公司自成立以来,始终坚持“市场导向+技术驱动”的技术开发方向,于2000年在原有技术开发部基础上组建了科士达研发中心,目前研发中心有100多位电源和机房产品专业研发技术工程师,拥有业界领先的仿真工作站、及包括安规试验室、基本电性能试验室在内的多个专业试验室,是目前国内电源和机房一体化行业标杆性企业级研发中心,是多项国家和行业标准起草/参与修订单位。2003年,公司通过“深圳市高新技术企业”和“深圳市软件企业”认定;2007年,科士达技术中心通过深圳市技术中心认定,并被列入深圳市“成长路线图计划”;2008年科士达通过国家级高新技术企业认定,被批准认定为深圳市博士后创新实践基地,是深圳市政府重点支持的高新技术示范企业。在经过对全球机房市场进行长期深入研究和技术储备后,科士达公司于2005年1月成立整体机房事业部,正式进军机房一体化领域,致力于为用户数据中心机房物理基础平台建设提供一体化、标准化、高可用性的整体解决方案,并通过机房科技创新和“整体机房产品化”产业模式,全力推进中国整体机房市场产业化发展。针对常规的阀控式密封铅酸蓄电池,在运输、搬运和安装过程中容易因碰撞或使用的异常情况而可能导致电池漏液,从而引起电池短路而着火的事故。科士达基于10余年专业电池研发、制造和应用维护经验,推出自有专利技术的铅酸蓄电池防漏液专利托盘(专利号:ZL200720196379.3)。该托盘采用特殊材质,具有良好的耐酸和耐冲击性能,能够有效缓解在运输、搬运和安装过程中对电池的碰撞损伤,避免电池安装时无间距现象,防止电池使用过程中电解液外泄、着火和热失控隐患,以及电池漏液引起铅中毒等功能。【发展规划】自2005年起,科士达开始在全球92个国家和地区注册KSTAR商标;2009年起,加大力度在海外建设营销服务网络,加速布局全球营销网络体系。计划用3-5年时间实现UPS销量占全球份额10%,并迈进全球领先的机房一体化解决方案供应商之列。【企业愿景】致力通过技术创新和品牌全球化运营,成长为电源及电力电子相关领域令国人骄傲的世界级企业。法定代表人:刘程宇
成立时间:1993-03-17
注册资本:58907.8794万人民币
工商注册号:440301102731613
企业类型:股份有限公司(上市)
公司地址:深圳市南山区高新北区科技中二路软件园1栋4楼401、402室(仅限办公)
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)