什么是分布式系统
  之前我有篇文章已经简单介绍了分布式通信,有兴趣的朋友可以去看看:
  大型网站系统架构实践(二)分布式模块之间的通信
  那么我详细的说下我对java分布式系统通信的理解
  1.集群模式,将相同应用模块部署多份
  2.业务拆分模式,将业务拆分成多个模块,并分别部署
  3.存储分布式
  由于分布式概念太大,我们可以缩小下讨论的范围:
  以下分布式的狭义定义为:
  业务拆分,但不限于水平拆分,而是拆分出底层模块,功能模块,上层模块等等
  一个系统功能繁多,且有层次依赖,那么我们需要将其分为很多模块,并分别部署 。
  举例:
  比如我们现在开发一个类似于钱包的系统,那么它会有如下功能模块:用户模块(用户数据),
  应用模块(如手机充值等),业务模块(处理核心业务),交易模块(与银行发生交易),
  前置模块(与客户端通信) 等等
  我们会得到一个系统架构图:

  为什么要分布式
  1) 将系统功能模块化,且部署在不同的地方,对于底层模块,只要保持接口不变,
  上层系统调用底层模块将不关心其具体实现,且底层模块做内部逻辑变更,上层系统
  都不需要再做发布,可以极大限度的解耦合
  2) 解耦合之后,可以复用共同的功能,且业务扩展更为方便,加快开发和发布的速度
  3) 系统分开部署,充分利用硬件,可以提高系统性能
  4) 减少数据库连接资源的消耗
  分布式通信方案
  场景:服务端与服务端的通信
  方案1:基于socket短连接
  方案2:基于socket长连接同步通信
  方案3:基于socket长连接异步通信
  tcp短连接通信方案
  定义:
  短连接:http短连接,或者socket短连接,是指每次客户端和服务端通信的时候,都要新
  建立一个socket连接,本次通信完毕后,立即关闭该连接,也是说每次通信都需要开启一个新的连接 。
  传输图如下:


  io通信用mina实现
  客户端示例代码:
NioSocketConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
//设置读缓冲,传输的内容必须小于此缓冲
connector.getSessionConfig().setReadBufferSize(2048*2048);
//设置编码解码器
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//设置日志过滤器
connector.getFilterChain().addLast("logger", new LoggingFilter());
//设置Handler
connector.setHandler(new MyClientHandler());
//获取连接,该方法为异步执行
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
//等待连接建立
future.awaitUninterruptibly();
//获取session
IoSession session = future.getSession();
//等待session关闭
session.getCloseFuture().awaitUninterruptibly();
//释放connector
connector.dispose();