• Java进阶之分布式学习指南


    作者:盲目的拾荒者

    博客:https://blog.csdn.net/niugang0920

    网络通信

    协议

    • TCP/IP

    扩展: 由网络层的IP协议和传输层的TCP协议组成,TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

    • UDP/IP

    • Multicast

    IO

    • BIO

    • NIO

    • AIO

    基于消息方式的系统间通信

    a.当系统之间要通信时,就向外发送消息,消息可以使字节流、字节数组,甚至是java对象,其他系统收到消息后则进行相应的业务处理。消息方式的通信,通常是基于网络协议来实现的,常用的系统间通信的协议有:TCP/IP和UDP/IP

    b.TCP/IP 是一种可靠的网络数据传输的协议。TCP/IP要求通信双方首先建立连接,之后再进行数据的传输TCP/IP负责保证数据传输的可靠性,包括数据的可到达、数据到达的顺序等。但由于TCP/IP需要保证连接及数据传输的可靠,因此可能会牺牲一些性能。

    c.UDP/IP是一种不保证数据一定到达的网络数据传输协议。UDP/IP并不直接给通信双方建立连接,而是发送发到网络上进行传递。由于UDP/IP不建立连接,并且不能保证数据传输的可靠,因此性能上表现相对较好,但是可能会出现数据丢失以及数据乱序的现象。

    d.TCP/IP和UDP/IP可用于完成数据的传输,但是要完成系统间通信,还需要对数据进行处理。列如读取和写入数据,按照标准分为同步IO和异步IO两种。其中同步IO中最常用的是BIO(Blocking IO)和NIO(Non-Blocking IO)

    e.从程序角度而言,BIO就是当发起IO的读取或写操作时,均为阻塞方式,只有当程序读到了流或将流写入操作系统后才释放资源。 f.NIO是基于事件驱动思想的,实现上通常采用Reactor模式,从程序角度而言,当发起IO的读或写操作时,是非租塞的。

    基于java包

    • TCP/IP

    (BIO)Socket ServerSocket 一连接一线程.一个socket需要一个线程处理。建立连接、读数据,写数据的操作都可能阻塞。 为了支持并发连接需要线程池

    (NIO)SocketChannel ServerSocketChannel 服务端一个线程监听连接的事件,一个或多个线程来监听网络读写事件。当有实际的网络流读写事件发生后,再放入线程池中处理。一请求一线程.NIO的明显好处就是不需要为每一个socket分配一个线程,而可以在一个线程中处理多个scoket。

    • UDP/IP

    • Multicast

    组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。

    开源框架

    • Netty

    • Mina(apache,基于java NIO,对外屏蔽了JavaNIO的复杂性)

    性能角度

    连接管理

    连接池 连接复用 短连接、长连接

    基于远程调用方式的系统间通信

    远程调用方式应该可能的是系统间的通信和系统内部一样,让使用者感觉调用远程同调用本地一样,但其实并没有办法做到完全透明。由于远程调用带来的网络问题、超时问题,序列化反序列化问题、复杂调试问

    基于java包

    • RMI(Remote Method Invocation)

    原理:client----[proxy]----->封装对象、序列化为流<----[TCP/IP BIO]---->反序列化、调用----->反射调用实例对象

    • webservice

    开源框架

    • Spring RMI(简单就实现RMI方式的java远程调用)

    • Apache CXF

    性能角度

    • 反射

    • 序列化、反序列化

    消息通信

    • rabbitmq

    • kafka

    大型分布式应用架构基础

    单体架构

    在java领域可以理解为一个javaweb应用。

    分布式架构

    什么是传统的分布式架构?简单来说,按照业务垂直切分,每个应用都是单体架构,通过API相互调用。

    面向服务的SOA架构

    • 背景:

    在构建了共用业务逻辑系统和拆分系统后,最明显的问题就是系统之间如何交互。如果不控制会出现系统之间存在多种交互方式:http、TCP/IP+NIO、Hessian、RMI、WebService等;同步异步都可能出现,这会导致开发人员每访问一个共用业务逻辑系统或拆分出来的系统,都有可能需要学习不同交互方式;同时也会造成各开发团队重复造轮子,提供不同交互方式用的框架,这对于应用的性能 可用性而言带来了极大的挑战。

    • 关于SOA

    面向服务的家否是一种软件体系结构,其应用程序的不同组件通过网络上的协议向其他提供服务和消费服务。简单来说,soa是不同业务建立不同的服务,服务之间的数据交互可以通过服务接口分级,这样松散耦合提高服务的可重用 性,也让业务逻辑变得可组合,并且每个服务根据适应情况作出合理的分布式部署,从而让服务变得规范、高性能、高可用。soa架构中两个主要角色:服务提供者(provider)和服务消费者(consumer).阿里开源的Dubbo是soa的典型实现。

    微服务架构

    将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级机制通信,通常采用HTTP RestFul API.这些服务围绕业务能力来划分构建的,并通过全完自动化部署机制来独立部署。这些服务可以使用不同的编程需要,以及不同数据存储技术,以保证最低限度的集中式管理。

    SOA和微服务架构的区别

    SOA往往与企业服务总线(ESB)联系在一起,主要原因在于SOA的实施思路是根据ESB模式来整合集成大量单一庞大的系统,这是soa主要的落地方式。微服务相对于和ESB联系在一起的SOA显示轻便敏捷得多,微服务将复杂的业务组件化,实际也是一种面向服务思想的体现。对于微服务来说,它是SOA的一种体现,但是它比ESB实现的SOA更加轻便、敏捷和简单。

    Docker虚拟容器化技术

    高性能反向代理服务器Ngnix

    分布式服务治理

    • Dubbo

    • 分布式协调技术Zookeeper

    持久化存储技术

    mysql

    • 业务拆分

    • 表拆分

    拆分策略 水平/垂直拆分

    • mycat的使用

    • 读写分离

    nosql

    • redis 安装集群、数据类型深入分析、哨兵机制、java整合redis

    • mongoDB

    由于内容话题比较大,不可能面面俱到,只是把要熟悉和掌握的点提到了,大家对号入座就行了,那方面欠缺及时了解和学习。

    微信公众号

                              
  • 相关阅读:
    CCNP-----企业网三层架构——BCMSN
    Redis 的 GEO 特性将在 Redis 3.2 版本释出
    CentOS6.5上源码安装MongoDB3.2.1
    beanstalkd
    php7---redis
    MongoDB学习笔记(入门)
    MongoDB学习笔记(数据操作)
    MongoDB学习笔记(索引)
    CentOS 安装MongoDB
    爬虫----Web_WeChat
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12187196.html
Copyright © 2020-2023  润新知