0%

AWK 是一种处理文本文件的编程语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

grep 、sed、awk 被称为 linux 中的”三剑客”。grep 更适合单纯的查找或匹配文本, sed 更适合编辑匹配到的文本, awk 更适合格式化文本,对文本进行较复杂格式处理。

阅读全文 »

1. 安装和使用

1.1 mac安装

1
2
3
4
5
6
7
# 如果报错,提示安装 java, 安装即可
brew install kafka

# 先启动 zookeeper, 再启动 kafaka
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties && kafka-server-start /usr/local/etc/kafka/server.properties

# 此时用 ps 查看进程可以看到是用 java 起来的。
阅读全文 »

1. TCP

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。

    并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。

1.1 TCP 头部字段

1

1. 头部格式

20字节固定 + 最大40字节扩展

2. 固定20字节详情

  • 源端口 2字节, 目的端口 2字节
  • 序号 4字节 , 我发送的是以 n 开始的序号
  • 确认号 4字节, 之前的都已经接收,下次希望给我传递 n, ACK位置必须=1
  • 数据偏移(说明头部字节是20还是到60) + 保留 + URG(紧急指针有效) + ACK + PSH(推送,尽快交给应用层) + RST(复位,重新建立连接) + SYN(tcp建立标志) + FIN(tcp释放标志) 一共2字节, 窗口2字节, 我的接收窗口大小 (例如rwnd=20)
  • 检验和2字节(检错算法), 紧急指针2字节(帮忙取出紧急数据)

3. 最大40字节扩展字段

阅读全文 »

1. 流量控制(滑动窗口)

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

发送端和接收端各自有自己的滑动窗口。

阅读全文 »

分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。

业界流行的分布式锁实现,一般基于数据库,Redis和Zookeeper。

阅读全文 »

许多单体应用在修改应用状态时都是依靠事务来保证一致性和隔离性的。要实现这两点很简单:应用通常只和单个数据库交互,使用支持启动、提交和回滚这些事务操作的框架来实现强一致性保证。

在微服务应用中,就没有这么幸运了。服务间的交互可能会失败,导致业务流程受阻,最终使整个系统处于不一致的状态。

阅读全文 »

1. 多线程

我们所说的Redis单线程,指的是”其网络IO和键值对读写是由一个线程完成的”,也就是说,Redis中只有网络请求模块和数据操作模块是单线程的。而其他的如持久化存储模块、集群支撑模块等是多线程的。

阅读全文 »

1. 缓存问题

1.1 缓存穿透(透了要用布隆过滤器)

缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,失去了缓存的意义。

如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

阅读全文 »

1. 事务

Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。准确的讲,Redis 事务包含两种模式 : 事务模式 和 Lua 脚本。

阅读全文 »

1. 主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);从服务器无法进行写操作。

img
阅读全文 »