山寨分布式程序设计请教。client直连数据库,还是提交server后集中处理?

boyyao 2017-01-30 02:59:03
正在做一个山寨分布式的程序。主要作用是一个主控server 若干个client。。client完成实际的需求。server负责控制client和给client分配任务。用socket来通讯

现在有两个方案。第一个:
server从数据库种读取数据。大约1000-3000条记录。分配给10-30个client。 client定时提交给server处理后的数据。server定时和sqlserver进行读写操作。。(sqlserver也会有其他程序(web)修改数据)
个人认为这个方法应该是比较正规的。但是程序处理起来需要在server和client种传递对象。序列化和反序列化每次都需要传递整个对象。可能会相对增加网络开销。。

第二个方案是 client直接和sqlserver通讯。。用sql 2 linq来操作。这样update数据的时候可能通讯量会少一点。而且开发也相对变得简单很多。。

不知道两种方式那种比较“正规”?。初学“分布式”。请多指教
...全文
401 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2017-02-04
  • 打赏
  • 举报
回复
分布式个毛线。 老老实实把《7天精通asp.net》读完,有助于你境界的提升。
a2839775030 2017-02-01
  • 打赏
  • 举报
回复
http://easymr.codeplex.com/
a2839775030 2017-02-01
  • 打赏
  • 举报
回复
网上一个并行框架,easymr,和你的需求类似,项目不是很完善,有借鉴价值。
sp1234_maJia 2017-01-31
  • 打赏
  • 举报
回复
我们换成那种简单培训3个月、靠死记硬背“面试宝典”而毕业的一般学员,他们跟上main举例的“中移动”的区别就很明显,他们就会非常盲目地说: 我们高仿 QQ 系统的数据库表是这样这样的,我们做好了漂亮的界面(其实就是截取人家QQ 美工图片之类的),你要在上面做开发来实现即时通讯,那么就来我的数据库里增删改查各种消息数据吧。它的重点就在于“皮肤”,而不在于通讯服务。这个结果就在于,系统一旦上线,完全不是在1、2个人在小办公室玩儿的时候的那么回事儿了,完全不能用了。 既然你强调想了解一下“正规设计”,我给你说一下正规跟业余设计之间,最重要的差别。
  • 打赏
  • 举报
回复
你虽然说“目前的情况c/s是双向通讯的”,你也提到 websocket,但是你反反复复反反复复地说的“设计逻辑”出卖了你的真实的技术实力,你心里只有传统的 OA 模式的那种增删改查概念,还没有网络通讯服务概念,还不会用来正规设计网络服务系统。 我给你举一个例子,你可以看看“gearman协议”或者类似的协议文本,看看对外发布一个“服务”是什么规范的。 一个系统它发布了一个协议规范,就好像中国移动发布了一个只有4、5个命令的通讯协议规范,就能撑起每年至少几十亿元人民币收入的大环境,就有几千家软件提供商利用这个协议来接入自己的应用。假设中国移动说“我的 Sql server 数据库表是这样这样的,你们都来增删改查我的数据库数据吧!”,中移动早就倒闭了。 所以你设计一个分布式系统,提出一个协议文本并且保证能实现此通讯技术,用这个方式来“设计”系统。先不要纠结底层的那些小的编程伎俩。
  • 打赏
  • 举报
回复
网络系统的核心就是网络通讯。不管你找什么借口(例如你说“我就是想5秒钟定时轮询,不想即时通讯),你有还是没有直接了当地通讯技术,这看得很清楚。 基于通讯技术来设计开发网络系统的设计师,跟千方百计回避网关设计和信令设计的程序设计师,一眼就能看出来区别的。你所有的设计都是“回避网络技术”,以此方式来追赶时髦的“分布式”等等软件潮流,会一直碰到“很低的天花板”而永远不得正果!
  • 打赏
  • 举报
回复
引用 8 楼 boyyao 的回复:
但是说的定时我的本意是。clinet的数据更新的是很频繁的,所以不想一根新就提交到server或者sql上。
client 发送消息给server,并且 server 发送消息给 client,这是基本。我看出来你并没有这个基础。 我问一个问题,假设一个 client 发送一个(按照预定义的信令协议格式)任务给 server,然后 server 判断这个任务中的描述需要使用到 10个client,它如何发送数据给 10 个 client?请你回答一下这里的技术。 client 接受一个任务探测之后,如何告诉 server 自己有没有能力执行这个任务?client 如何在启动时到 server 上注册自己的 client 身份?client 正在并发执行100个任务的时候,如何将某个执行完的任务告诉 server? 实际上纠结于发数据给 server 还是写到数据库表里(同时再告诉 server 说“我已经保存了某个数据,你去处理吧!”)这并不是问题的关键,但是你把它作为“问题的关键”,原因就在于你只能看到这些,而不关心更重要的层面的需求。 或者我们这退一步来理解,你并不是再问一个“分布式程序设计”问题,其实你就是自己做着玩儿的,用简单的 OA程序来理解“分布式”。就好像是那些招聘许多中学生进行3个月培训的“xx马培训班”培训出来的学院自称已经会“高仿QQ系统”设计了,其实就是学会了“增删改查”,使用的就是做一个简单OA小程序的思路,并不是实时的网络系统的设计思路,跟不是企业服务器系统的设计思路。 “分布式”其实也比较简单,就是几个信令而已。但是如果你说这些信令都没有了,都靠“定时去轮询一个数据库表”了,这是没有通讯基础的所谓的“分布式”,这种就是学校里的学生学习的桌面版 OA 小程序了。
boyyao 2017-01-30
  • 打赏
  • 举报
回复
感谢楼上的DX指教。。目前的情况c/s是双向通讯的。但是说的定时我的本意是。clinet的数据更新的是很频繁的,所以不想一根新就提交到server或者sql上。所以才用定时提交给server以减轻网络负担或者sql的压力。然而由于client所生成的数据实时性相对有那么点要求。所以这个定时又不能太长。。5-10秒内能接受。所以本打算5-10秒提交一次。然后对一些要求非常实时的数据,又对存储没要求的我都已经通过websocket直接传输给浏览器了。 我大概总结一下我的需求和环境。。 web前台读取sqlserver 实时性要求很高的直接通过websocket。 server控制10-30个client 目的是完成一些操作后吧过程记录在sql中和实时反馈给web前端 client 操作的过程需要反馈给sqlserver 和 web前端(通过server中转) client 实际可能每秒会产生一次操作过程。但是打算5-10秒做一次提交。也就是一次提交5-10个过程然后存储进数据库 不知道有没有什么建议么?感谢~~
  • 打赏
  • 举报
回复
所谓“定时”,说白了,就是你不会双向通讯。这是一个最主要的瓶颈,可能决定了你不能做这个系统。“定时”方式不但会造成争抢的瓶颈,而且也不能消除空闲时间,还会造成各个机器的“抖动”像抽风一样地浪费大量资源去轮询(恶性循环)。 而关于所谓的“这样update数据的时候可能通讯量会少一点”,你可以想象一下,假设命令数据直接从 server 给 client,只有那么几个字段而已;而假设 server 先通知 client 去取,然后client 在查询一下数据库(且不管数据库查询比内存数据读取要慢数百倍速度这种毛病),从通讯量上来说,只多不少!
xuzuning 2017-01-30
  • 打赏
  • 举报
回复
你的方案一,是整体的 客户端/服务器(C/S)架构 你的方案二,是文件共享架构(其中数据库操作是 C/S 架构)
  • 打赏
  • 举报
回复
引用 2 楼 boyyao 的回复:
虽然不是“内网”环境。但是运行client的都是正规vps机器。。不确定sqlserver的链接字符串的密码是否已明文传输?或者是可破解的加密?
数据库的连接串全都放到客户端去、并且“只有一个”,这只是问题的一小部分。 最主要地是开发模式。对于比较大一点的系统来说,这种开发设计形式下,就好像是汽车的全部零件都是锤子打造的,万里长城都是夯土随便拼凑的,移动电信网络都是过家家的“鸡毛信”方式的,以这种形式建立起来的豆腐渣工程。
  • 打赏
  • 举报
回复
大系统,跨平台企业服务系统,特别是基于互联网的系统,其 c 和 s 都有本事开发。也就是说程序员不但会设计开发 client 界面软件,更会设计和开发企业级 server 系统。 我们见到一些人“只有前端界面、直接调用远程数据库”的软件的经验,这通常都是一些业余时间酷爱编程的人(哪怕他工作了15年)。因为他从未参与过企业服务器架构的设计开发工作。
  • 打赏
  • 举报
回复
c-s 本来就是访问业务服务的架构,并且c 与 s 是双向通讯的,就好像是腾讯的即时通讯系统可以立刻将消息通过几十万台服务器发给10亿用户的任何在线的终端,而绝对不是什么“终端定时轮询服务器”。 你的这个设计在两个方面都还是学生的水平: 1. 客户端通过关系数据库的驱动去“增删改查”远程数据库。这就好像是一个企业让每一个员工都直接去修改自己的工资账,而不设立财务部门来管理工资账。这显然比小作坊还小作坊。学生刚学编程时,或者编写一个小办公室里的OA软件时,才使用这个方式。 2. 你显然没有双向c-s通讯,因此没有高负载、企业级敏捷网络应用的设计。这样的系统只能用巨大的资源(例如千兆网、极高性能服务器),只给极少数人(例如几十个并发用户,而不是几万并发)使用。
boyyao 2017-01-30
  • 打赏
  • 举报
回复
虽然不是“内网”环境。但是运行client的都是正规vps机器。。不确定sqlserver的链接字符串的密码是否已明文传输?或者是可破解的加密?
cpycpy000 2017-01-30
  • 打赏
  • 举报
回复
没有什么正规不正规,只有数据安全性的说法 如果只是内网,那可以简单一点,毕竟都是自己人在用, 但是一旦跨越了外网,就必须通过server端进行数据操作,避免有人抓包获取到有关数据库的信息。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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