每秒1000个终端请求

奔跑吧公牛 2013-07-04 09:52:42
手头有一个项目,.net +SQL2008,需要程序能够承受每秒1000个终端请求,并写入数据库,而且是持续性的,没有间断,求解决方案
...全文
637 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hao2629 2013-07-05
  • 打赏
  • 举报
回复
分布式缓存?
  • 打赏
  • 举报
回复
引用 4 楼 jickie_liu 的回复:
因为这个项目的需求是,一个终端每10S产生一个写入请求,做大压力要求为10000个终端,也就是说每秒有1000次,而且24小时不间断
先准备好在5~20台服务器上实现这个要求。终端首先要访问一个Master服务器,获取其真正要连接的服务器地址,然后同时要向至少2台(最好3台)服务器上传送数据,保证系统中数据不会丢失。 不要纠结在一台服务器上如何“优化”,这不是优化能够解决问题的。
闲云之然 2013-07-04
  • 打赏
  • 举报
回复
能想到要注意的大概有以下几点: 1. 要减少web服务器与DB服务器之间的round trip, 这个的话就要尽量直接使用ado.net的sqlclient, 避免使用datatable和entity framework等. 2. 采用多DB服务器的架构. 3. 根据第2条, 数据库table的设计必须采用可横向扩展的设计, 也就是根据请求的某些关键字来哈希映射到某一台DB服务器的连接字符串. 根据需求, 可能会需要静态映射, 也就是映射方式必须能保证进行横向扩展之后, 同样的关键字还是能映射到以前所用的那个DB服务器的连接字符串. 网上可以搜到很多相应的方法. 4. 最重要的, 必须定期通过压力测试来收集统计数据, 以确定是否需要搭新的DB服务器进行横向扩展, 以及要扩展几台服务器. 最后, 强烈推荐使用天生具有扩展性的一些NoSQL数据库来替换掉SQL Server.
孤零落叶寒 2013-07-04
  • 打赏
  • 举报
回复
引用 3 楼 jickie_liu 的回复:
3110400000条 一年的数据产生量
我纠结这个,一年是这些,就是3110400000=360*24*60*60*100,每秒一百来次,只要更新数据不大,一般没问题吧。不是基本都是写入啊,你把更新数据写到缓存中,定时或定量开一个线程去干活
  • 打赏
  • 举报
回复
这么高的频率,数据库可能受不了 其实不光读可以缓存,写一样可以,迅雷都用过吧,人家不就是用了写缓存,不然磁盘早转爆了 比如,你可以缓存一分钟之内的请求(或者按数量吧)放到内存中,后台用线程再一次写到数据库 如果怕掉电丢数据,也可以先写入本地文件(不过需要自己组织数据格式,比如序列化反序列化等) 每次程序启动时先看下有没有未写入的 这样大大减少数据库连接次数
奔跑吧公牛 2013-07-04
  • 打赏
  • 举报
回复
因为这个项目的需求是,一个终端每10S产生一个写入请求,做大压力要求为10000个终端,也就是说每秒有1000次,而且24小时不间断
奔跑吧公牛 2013-07-04
  • 打赏
  • 举报
回复
3110400000条 一年的数据产生量
饕餮123 2013-07-04
  • 打赏
  • 举报
回复
无能为力,帮顶
奔跑吧公牛 2013-07-04
  • 打赏
  • 举报
回复
都是写数据,读的话没有这样的频率,而且次数不是太多
bdmh 2013-07-04
  • 打赏
  • 举报
回复
直接对数据库访问,频繁并且并发大的话,可能会受影响,你最好搞个缓存程序,比如通过socket通讯,服务端做缓存,客户端要数据时,如果缓存仲有,救不到数据库中要了
tellxp 2013-07-04
  • 打赏
  • 举报
回复
1.1000个终端写,数据量是多少?1次1K还是1次1MB,这个差别很大。 2.根据实际数据量大小计算IO需要多少,如果虽然次数多,但是数据量小,IO能够挺,那么就搞定了。 3.如果IO不能挺住,就只能分片了,把数据存储在不同的数据库中,然后再在上层形成数据仓库进行统一的查询和检索。 个人见解,不对请喷
本拉灯 2013-07-04
  • 打赏
  • 举报
回复
引用 2 楼 jickie_liu 的回复:
都是写数据,读的话没有这样的频率,而且次数不是太多
要都是写数据还好办,做个服务集群 10个服务端+1个中心服务端 所有的客户端连接中心服务器由中心服务器根据每个服务端客户端连接量进行分配 比如第一个连到1号服务端 第二连到二号服务端 客户端发送的包都向指定的服务端走,这样就能大大减轻压力,而且反应也快 我试过,一个服务端+5000个客户端,每秒同时向服务端发两个包,那是稳稳的。唯一的压力就是数据库的IO 要是放同一进程里可能要慢些,所以分开到几个进程会好些。
wrost 2013-07-04
  • 打赏
  • 举报
回复
引用 7 楼 Mockqi 的回复:
可以做个缓存
读数据库可以做缓存 如果是访问视频文件,也可以读缓存吗?
  • 打赏
  • 举报
回复
可以做个缓存
phoebuswei 2013-07-04
  • 打赏
  • 举报
回复
我怎么看糊涂了 每秒有1000次 有10000000也没什么啊 但是我一次就要执行n操作1个就有可能完蛋 你单纯要减少次数也简单 用一个datatable 每次就在datatable里面加,每秒有1000次不叫事 然后到一定条数在提交,不是有10秒的空闲吗!可以利用

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧