NIO网络通信
阻塞式IO与非阻塞式IO
传统的IO流都是阻塞式的。也就是说,当一个线程调用read() 或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。
Java NIO是非阻塞模式的。当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。线程通常将非阻塞IO的空闲时间用于在其他通道上执行I0操作,所以单独的线程可以管理多个输入和输出通道。因此,NIO可以让服务器端使用一个或有限几个线程来同时处理连接到服务器端的所有客户端。
SYN Cookie
SYN泛洪攻击
SYN攻击其实就是Server收到Client的SYN,Server向Client发送SYN-ACK之后未收到Client的ACK确认报文, 这样服务器就需要维护海量的半开连接 ,等待客户端的 ACK, 最终导致服务器资源耗尽(sync queue 满)而丢弃新的连接。 Server会不断重发SYN-ACK,Linux服务器默认直到63秒才断开连接!
SYN Cookie
其中一种防护方式是SYN Cookie, SYN Cookies 的应用允许服务器当 SYN 队列被填满时避免丢弃连接。相反,服务器会表现得像 SYN 队列扩大了一样。服务器会返回适当的SYN+ACK响应,但会丢弃 SYN 队列条目。如果服务器接收到客户端随后的ACK响应,服务器能够使用编码在 TCP 序号内的信息重构 SYN 队列条目。
服务注册与发现
本篇主要讲述了微服务架构的组成,每个组件的作用是什么,重点是实现了Eureka Server和Eureka Client的实战演练,总体来说服务注册与发现就是微服务入门的基础,了解并掌握了在SpringCloud体系中的服务注册与发现的组件原理以及使用方法,由于start.spring.io的访问速度实在是不能忍,白天自己编译了整个SpringBoot的初始化器,我直接给出地址了,方便其他的朋友也可以用:
http://139.159.234.67:8080
http://zouchanglin.cn:8080
就是上面的IP地址
如果还是很慢的话,可以下载我编译好的文件( 下载地址 ),直接
java -jar f1624a9cab16897d8415bd6f9250984d.jar
在IDEA自定义初始化器地址填写 http://localhost:8080 即可,注意这个版本是没有Web UI的,只有供三分初始化器使用的JSON串,Web UI几乎不咋用所以没考虑编译进来!
Gradle的使用和配置
Java作为一门世界级主流编程语言,有一款高效易用的项目管理工具是Java开发者共同追求的心愿和目标。 先是2000年Ant,后有2004年Maven两个工具的诞生,都在Java市场上取得了巨大的成功。但是二者都有一定的不足和局限性。