空白键|我要消灭一半程序员,10大高性能开发宝石( 六 )


对于容量的问题 , 考虑到只需要判断对象是否存在 , 而并非拿到对象 , 我们可以将哈希表的表项大小设置为1个bit , 1表示存在 , 0表示不存在 , 这样大大缩小哈希表的容量 。
而对于哈希算法的问题 , 如果我们对哈希算法要求低一些 , 那哈希碰撞的机率就会增加 。 那一个哈希算法容易冲突 , 那就多弄几个 , 多个哈希函数同时冲突的概率就小的多 。
布隆过滤器就是基于这样的设计思路:
但当对应的key-value删除时 , 却不能将对应的比特位置0 , 因为保不准其他某个key的某个哈希算法也映射到了同一个位置 。
也正是因为这样 , 引出了布隆过滤器的另外一个重要特点:布隆过滤器判定存在的实际上不一定存在 , 但判定不存在的则一定不存在 。
你们公司网站的内容越来越多了 , 用户对于快速全站搜索的需求日益强烈 。 这个时候 , 你需要:
全文搜索技术
对于一些简单的查询需求 , 传统的关系型数据库尚且可以应付 。 但搜索需求一旦变得复杂起来 , 比如根据文章内容关键字、多个搜索条件但逻辑组合等情况下 , 数据库就捉襟见肘了 , 这个时候就需要单独的索引系统来进行支持 。
另外 , ES常常和另外两个开源软件Logstash、Kibana一起 , 形成一套日志收集、分析、展示的完整解决方案:ELK架构 。
无论我们怎么优化 , 一台服务器的力量终究是有限的 。 公司业务发展迅猛 , 原来的服务器已经不堪重负 , 于是公司采购了多台服务器 , 将原有的服务都部署了多份 , 以应对日益增长的业务需求 。
现在 , 同一个服务有多个服务器在提供服务了 , 需要将用户的请求均衡的分摊到各个服务器上 , 这个时候 , 你需要:
负载均衡技术
顾名思义 , 负载均衡意为将负载均匀平衡分配到多个业务节点上去 。
按照均衡实现实体 , 可以分为软件负载均衡(如LVS、Nginx、HAProxy)和硬件负载均衡(如A10、F5) 。
按照网络层次 , 可以分为四层负载均衡(基于网络连接)和七层负载均衡(基于应用内容) 。
按照均衡策略算法 , 可以分为轮询均衡、哈希均衡、权重均衡、随机均衡或者这几种算法相结合的均衡 。
而对于现在遇到等问题 , 可以使用nginx来实现负载均衡 , nginx支持轮询、权重、IP哈希、最少连接数目、最短响应时间等多种方式的负载均衡配置 。


推荐阅读