1 常用的微服务开发框架:

  1. Spring Cloud
  2. Apache Dubbo

    2 Spring Cloud vs Apache Dubbo

    Java 微服务框架选型(Dubbo 和 Spring Cloud?)
    Spring Cloud组件选型

    3 微服务相关知识

    3.1 IO

  3. 漫话:如何给女朋友解释什么是Linux的五种IO模型?

5中IO模型对比:
image.png

  1. 深入理解select、poll和epoll及区别 select,epoll,poll比较

  2. Java面试常考的 BIO,NIO,AIO 总结

注意:在Java中,主要有三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)和 异步IO(AIO),但上述三种IO模型是Java中提供的与IO有关的API,并不是操作系统层面的IO模型呢。

  1. Java Socket和TCP编程

Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络:

  1. ┌───────────┐ ┌───────────┐
  2. Application Application
  3. ├───────────┤ ├───────────┤
  4. Socket Socket
  5. ├───────────┤ ├───────────┤
  6. TCP TCP
  7. ├───────────┤ ┌──────┐ ┌──────┐ ├───────────┤
  8. IP │<────>│Router│<─────>│Router│<────>│ IP
  9. └───────────┘ └──────┘ └──────┘ └───────────┘

Socket、TCP和部分IP的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调用的简单的封装。例如,Java提供的几个Socket相关的类就封装了操作系统提供的接口。
为什么需要Socket进行网络通信?因为仅仅通过IP地址进行通信是不够的,同一台计算机同一时间会运行多个网络应用程序。当操作系统接收到一个数据包的时候,如果只有IP地址,它没法判断应该发给哪个应用程序,所以,操作系统抽象出Socket接口,每个应用程序需要各自对应到不同的Socket,数据包才能根据Socket正确地发到对应的应用程序。
一个Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解为IP地址加端口号。端口号总是由操作系统分配,它是一个0~65535之间的数字,其中,小于1024的端口属于特权端口,需要管理员权限,大于1024的端口可以由任意用户的应用程序打开。
注意:这里的TCP编程使用的是Java的BIO(Blocking IO)模式进行通信,即同步阻塞IO模式。

  1. 《跟闪电侠学Netty》开篇:Netty是什么?

    那么Netty到底是何方神圣?
    用一句简单的话来说就是:Netty封装了JDK的NIO,让你用得更爽,你不用再写一大堆复杂的代码了。
    用官方正式的话来说就是:Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和
    客户端。
    下面是我总结的使用Netty不使用JDK原生NIO的原因:

    1. 使用JDK自带的NIO需要了解太多的概念,编程复杂,一不小心bug横飞。
    2. Netty底层IO模型随意切换,而这一切只需要做微小的改动,改改参数,Netty可以直接从NIO模型变身为IO模型。
    3. Netty自带的拆包解包,异常检测等机制让你从NIO的繁重细节中脱离出来,让你只需要关心业务逻辑。
    4. Netty解决了JDK的很多包括空轮询在内的bug。
    5. Netty底层对线程,selector做了很多细小的优化,精心设计的reactor线程模型做到非常高效的并发处理。
    6. 自带各种协议栈让你处理任何一种通用协议都几乎不用亲自动手。
    7. Netty社区活跃,遇到问题随时邮件列表或者issue。
    8. Netty已经历各大rpc框架,消息中间件,分布式通信中间件线上的广泛验证,健壮性无比强大。

注意:Netty是使用Java中NIO模式实现的;如果Java开发过程中需要使用Java NIO接口编程建议使用Netty,Netty为我们封装了Java NIO接口使用,Netty更加易用。

  1. NIO单一长连接通信模型实现

注意:这里通信模型的实现可以理解为使用NIO模式实现一个简单的RPC通信协议。

  1. RPC 与HTTP的区别

注意:RPC常用的协议有thrift,probuf,avro,这些协议一般都是使用NIO(Non-Blocking IO)模式进行通信,即同步非阻塞IO模式。

3.2 分布式锁

3.3 分布式事务