私有name service 续

  这几天折腾了一下~ , 把这个服务程序搭了出来, 总结来说结构上十分简单, 线程池, 搭配getaddrinfo就可以了, 不过一涉及到队列就会有容量限制, 现在来看满足自己的需求是足够了, 不过毕竟getaddrinfo也是阻塞接口, 开了32个线程每个线程1M的队列也总会出现队列满的情况, 仔细想了想, 要么告知客户程序服务繁忙稍后再试, 要么在网络层面上就要予以阻塞, 不过这回导致客户端程序的buff填充满一样会导致客户程序阻塞 ...

 

  总结来说, 这个服务还需要解决以下问题:

  1. 全局的缓存层. 因为不同客户机器内的缓存可能并没有缓存别人已经解析过的IP, 那么会重复的请求DNS去解析相同的域名, 导致不必要的处理延时. 所以有必要在该服务内部增加一个有限的缓存, 可以采用LRU进行保留最常用的域名解析结果.

  2. 使用getaddrinfo_a代替getaddrinfo. 这个接口可以一定程度上缓解由于阻塞的API导致的队列问题, 不过线程池就不必要了, 可以开多个服务进程, 客户机器配置一个端口范围进行请求, 不过这样的话需要更强的容错处理, 更换请求机制, 一个好的分布式程序需要容忍任何一个进程随时挂掉和重启.

 

  :)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值