现象:用户读信时,根据路径的哈希结果,访问四台服务器中一台请求文件,这四台缓存机器已经下线,访问不到再去后端存储访问浪费了时间

前因:每一封信都是一个文件,存储在公司内部的分布式文件系统s3上.因为读取速度太慢和经常的网络访问失败,后来在s3系统之上新增了nginx缓存代理,imap pop web各端都能使用这几台缓存.又增加了阿里云oss存储,与s3存储并行.

1. 访问文件的时候,会根据内部的索引服务返回的location进行判断,结果是4,5,6,分别代表只存s3,只存oss,s3和oss双读.代码中对location进行判断,进行读取访问文件.当存在双读的时候,要根据配置优先读取oss或者优先读取s3,读取不到时再去读取另外的存储

2. 在需要读取s3时,在这之上要先访问缓存代理.根据指定的哈希规则,对path部分取哈希值,如果在以下四个范围内就访问指定的IP
'0~25'=>'http://xxx.xxx.88',
'25~50'=>'http://xxx.xxx.89',
'50~75'=>'http://xxx.xxx.90',
'75~100'=>'http://xxx.xxx.91'
哈希算法如下:

function BKDRHash($str) {
$hash = 0;
$seed = 1313;
for ($i=0;$i<strlen($str);$i++) {
$hash = ((floatval($hash * $seed) & 0x7FFFFFFF) + ord($str[$i])) & 0x7FFFFFFF;
}
$hash=$hash & 0x7FFFFFFF;
return $hash % 100;
}

3. 运维反馈现在访问文件时是使用的公网域名,把公网域名修改成内网域名,速度会有提升,网络问题也会减少.
4. 去掉读信走s3逻辑时候的读取nginx代理cache部分
5. 在线上单独拿台机器用于测试,如果没有问题就全量上线

最新文章

  1. 多线程异步导出excel
  2. simvision1 database和invoke
  3. Android单元测试与模拟测试详解
  4. Bootstrap框架(基础篇)之列表,表格,表单
  5. 产生0-9 A-Z a-z
  6. MATLAB学习笔记(八)&mdash;&mdash;MATLAB数值积分与微分
  7. UVa10023手动开大数平方算法
  8. 夺命雷公狗jquery---6属性选择器
  9. Eclipse快捷键壁纸-0基础必备
  10. cojs 疯狂的重心 疯狂的机器人 题解报告
  11. 二、FreeMarker 模版开发指南 第二章 数值和类型
  12. ZenCoding 个人理解和总结
  13. SQL中创建外键约束
  14. android小说阅读源码、bilibili源码、MVP新闻源码等
  15. java后台验证码工具
  16. django 静态文件的配置
  17. [zz]LyX中文问题
  18. ElasticSearch权威指南学习(映射和分析)
  19. kdump内核
  20. PHP 协程最简洁的讲解

热门文章

  1. JS 语句
  2. RESTFUL如何指导WEB API设计?
  3. 获取格式字符串第idx个值及实例
  4. go语言设计模式之Concurrency barrier
  5. RabbitMQ学习笔记(七、RabbitMQ实战)
  6. HttpClient之用CloseableHttpClient发送post请求
  7. 【Excel】删除重复值
  8. WPF 精修篇 拖拽 DragDrop
  9. 请不要嘲笑你身边那些投了P2P的朋友
  10. 微服务SpringCloud项目架构搭建入门