关于Serving的一些相关知识shuli

一、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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值