问题描述 以前曾经思考过类似的问题,比如腾讯公司,每逢生日,都会给用户发一封邮件。按QQ的用户规模,假设全国每人一个QQ,那么用户表有14亿条。如何给当天生日的人发送祝福邮件?这问题其实挺有意思的,很多可以思考和优化的点,于是我也想了一个初步方案。 一个系统设 系统总人数为Total。 假设,用户用户生日是分布均匀的,也就是说,每天的生日人数=1/365 * Total = 1/365 * 14亿 … 继续阅读
分类目录归档:系统设计与实现
高性能队列:Disruptor介绍以及使用场景 (一)
最近看了一些关于Disruptor的介绍,觉得这个新的消息队列非常厉害,单机性能就非常高。于是搜索并整理了一些资料,寻找往后可能使用的场景。 Disruptor 介绍 Disruptor 是LMX开源出来的java编写的一个并发消息处理器,在队列中一边生产者放入消息,另外一边消费者并行取出处理,其核心是根据现代CPU硬件缓存特点发明不同于通用LinkedList或Queue的新型数据结构RingB … 继续阅读
OpenResty+ Nginx + Lua + Redis 动态封禁 IP
之前有试过实现如何封禁某个国家的IP访问网站。最近在看如何封禁某些特定IP对资源的访问,于是整理了一份通过Nginx + Lua + Redis 动态封禁 IP的资料。 需求背景 为了封禁某些爬虫或者恶意用户对服务器的请求,需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。 实现方式 实现 IP 黑名单的功能有很多方法: 1.在操作系统层面,配置 iptables,拒绝指定 … 继续阅读
API接口签名生成算法和签名验证算法
为了接口安全,需要做API接口校验。 接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? 1.请求身份 为开发者分配AppKey(开发者标识,确保唯一)和AppSecret(用于接口加密,确保不易被穷举,生成算法不易被猜测)。 2.防止篡改 参数签名 按照请求参数名的字母升序排列非空请求参数(包含AppKey),使用URL键值对的格式(即key1=value1&key2 … 继续阅读
实现一个简单Http服务器
com.sun.net.httpserver 这个工具包,提供了一些原始的工具 Java Doc 对com.sun.net.httpserver的说明: This class implements a simple HTTP server. A HttpServer is bound to an IP address and port number and listens for incoming … 继续阅读
Jenkins自动构建Springboot项目
Jenkins Jenkins的官网是这么介绍自己的:Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software. 很帅的描述! Jenkins安装及配置 1.1 官网下载安装LTS版本: … 继续阅读