关于Serving的一些相关知识shuli

来源:互联网 发布:软件售后服务流程图 编辑:程序博客网 时间:2024/05/18 03:10

一、RPC

1.使用的TCP链接;

2.需要寻址、编码(二进制序列化)


Python实现一个获取可用监听端口的示例:

def findFreePort():  """  函数返回值是当前可用来监听的一个随机端口。  """  import socket  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  s.bind(('localhost', 0))  # 用getsockname来获取我们实际绑定的端口号  addr, port = s.getsockname()  # 释放端口  s.close()  return port

计算机网络的常识:不同的进程不能使用同一端口。

后来想到了之前用过的神器scapy, 于是,十几行代码解决了我的这个问题。
核心代码如下:

#如果我们接收到一个SYN包,则我们构造一个SYN ACK包返回去。if x['TCP'].flags == 0x02:    ipp = IP(dst=x['IP'].src,src=x['IP'].dst)      tcpp = TCP(sport=x['TCP'].dport,dport=x['TCP'].sport)    tcpp.flags = 0x012 # syn ack flag    tcpp.ack = x['TCP'].seq + 1    send(ipp/tcpp)#如果我们接收到一个FIN ACK包,我们则返回一个ACK包。否则他会重传。elif x['TCP'].flags == 0x011:    #if we recv a FIN ACK, we need to back a ACK    ipp = IP(dst=x['IP'].src,src=x['IP'].dst)    tcpp = TCP(sport=x['TCP'].dport,dport=x['TCP'].sport)    tcpp.seq = x['TCP'].ack    tcpp.ack = x['TCP'].seq + 1    res_packet = ipp/tcpp    send(res_packet)elif x['TCP'].flags == 0x018:    if x.haslayer("Raw") == 1:        print "%s:%d ------%s:%d"%( x['IP'].src, x['IP'].sport, x['IP'].dst, x['IP'].dport)        hexdump(x.load)

当然这时候这个代码还没法运行,因为相应端口的请求的包,如果该端口没有开启,系统会提前发送RST包,结束该会话。
所以最后,我们用iptable, 将出去的RST包过滤掉。就可以了实现全端口监听了。
是不是很cool:)

3.RPC与HTTP对比

(1)HTTP是应用层协议,而TCP是传输层协议

(2)RPC框架有:gRPC(基于HTPP2.0和Netty框架,序列化方法是protobufDubbo(阿里的,现在阿里用hsf)

(3)HTTP需要三次握手,RPC不需要


二、clipper

http://clipper.ai/tutorials/basic_concepts/

1.主要包含query、manage和container

2.


三、hippo

1.定位是:简单易用的在线服务调度系统

2.其他调度系统:mesos、yarn、fuxi;

3.


四、Carbon


五、drogo

drogo的作用是应用与Hippo间的桥梁。


六、Jupiter NoteBook



原创粉丝点击