永发信息网

java 高可用高并发系统怎么设计

答案:2  悬赏:80  手机版
解决时间 2021-02-27 11:42
  • 提问者网友:不要迷恋哥
  • 2021-02-26 17:13
java 高可用高并发系统怎么设计
最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-02-26 18:05
说实话 从软件或代码角度 没辙 都是长连接 逃不掉的
只能从系统设计上去考虑,大致上会有以下这两种思路(基本上是都用的):
1、对于所有的上传的文件,根据随机生成的名称或code取hash用策略取模,分服务器存/取文件,保证不触及io瓶颈,内部文件同步策略自己考虑
2、对所有请求,分pop点分发,根据用户的物理地址选择相应较近的pop点处理请求(当前pop请求已满则顺延至下一pop点,依次类推)
全部回答
  • 1楼网友:长青诗
  • 2021-02-26 19:10
我用的java nio,一般常用的高并发io框架,也是用的这个做扩展。 java nio是在jdk1.4开始使用的,它既可以说成“新i/o”,也可以说成非阻塞式i/o。下面是java nio的工作原理: 1. 由一个专门的线程来处理所有的 io 事件,并负责分发。 2. 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。 3. 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。 java nio的服务端只需启动一个专门的线程来处理所有的 io 事件,这种通信模型是怎么实现的呢?呵呵,我们一起来探究它的奥秘吧。java nio采用了双向通道(channel)进行数据传输,而不是单向的流(stream),在通道上可以注册我们感兴趣的事件。一共有以下四种事件: 事件名 对应值 服务端接收客户端连接事件 selectionkey.op_accept(16) 客户端连接服务端事件 selectionkey.op_connect(8) 读事件 selectionkey.op_read(1) 写事件 selectionkey.op_write(4) 服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道 (channel) 上的事件。我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,阻塞i/o这时会调用read()方法阻塞地读取数据,而nio的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达,则处理这些事件,如果没有感兴趣的事件到达,则处理线程会一直阻塞直到感兴趣的事件到达为止。下面是我理解的java nio的通信模型示意图:
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯