摘要:
一致性哈希解决什么问题? 传统哈希算法在桶位数量变更时,需要对所有桶位的数据重新计算哈希,绝大部分数据都要迁移,在分布式环境中,这个扩容和缩容的代价是非常大的,需要有一种算法尽可能减少这个迁移的数据量。 为了解决这个问题,一致性hash它来了 什么是一致性哈希 一致性哈希和传统哈希一样使用取模运算, 阅读全文
摘要:
工作中遇到一个需求,需要从词库中快速判断某个关键字是否存在,词库大小不超过百万,当时脑子第一反应是用hash表相关数据结构,和同事一交流,同事推荐用布隆过滤器,查询效率不输hashmap,而且非常节省存储空间。经过研究发现布隆过滤器挺好用的,这篇文章来说说三点: 1.什么是布隆过滤器。 2.布隆过滤 阅读全文
摘要:
上篇文章介绍了如何搭建一个单机版本的netty聊天室:https://www.jianshu.com/p/f786c70eeccc。 ###一、需要解决什么问题: 当连接数超过单机的极限时,需要将netty服务扩展成集群才能够承载更多的连接数,处理更多的消息。 在网上找了下似乎并没有非常成熟标准的n 阅读全文
摘要:
前言 上篇博文( "netty实现消息中心(一)思路整理" )大概说了下netty websocket消息中心的设计思路,这篇文章主要说说简化版的netty聊天室代码实现,支持群聊和点对点聊天。 此demo主要说明netty实现消息推送的基本使用方法,如果需要扩充其它功能,可以基于此脚手架扩展。 完 阅读全文
摘要:
一、需求 需要实现直播间的以下功能: 群发消息(文本、图片、推荐商品) 点对点私发消息(文本、图片、推荐商品) 单个用户禁言 全体用户禁言 撤回消息 聊天记录持久化 二、技术实现 服务端消息中心采用netty实现, 微站、小程序使用websocket与消息中心通信, 安卓端使用netty与消息中心通 阅读全文
摘要:
1. ELK部署说明 1.1ELK介绍: 1.1.1 ELK是什么? ELK是三个开源软件的缩写,分别表示:ElasticSearch , Logstash, Kibana , 它们都是开源软件,ELK指依靠这三个软件组合起来搭建的日志收集分析系统。 ElasticSearch: 开源的分布式搜索引 阅读全文
摘要:
上一篇博文描述了支付接口存在的问题: "重构支付接口(一)支付接口存在的问题" 。 本篇博文描述我的重构思路。 一、使用简单工厂+策略模式解耦下单接口不同商品的下单逻辑 解耦前创建订单部分代码: 解耦后的uml图如下: 将不同商品的下单逻辑放到AbstractProductPayStrategy下的 阅读全文
摘要:
一、现有支付接口存在什么问题 早期公司为了抢占市场快速迭代,遗留下来一屁股的技术债务,其中以支付宝、微信、平台币购买接口最为厉害,无数的价格计算、营销活动(助力、限时特价、拼团、优惠券等等)、商品类型判断代码交织在一个接口中,造成后期维护成本巨大,看不懂、不敢改。 业务逻辑层伪代码示意: 1. 平台 阅读全文
摘要:
1、为什么redis要实现持久化? 避免因宕机、断电等场景导致进程退出后数据丢失,如果redis的数据都只存放于内存,那么进程退出后数据就丢失了。持久化机制可以持久化内存数据到硬盘,重启redis后基于持久化数据进行恢复。 2、redis持久化的方式有哪些 2.1 RDB,定时对进程数据拍摄快照存储 阅读全文
摘要:
活跃性危险 死锁 什么是死锁? 一条小路上两个人堵到了一起,a说你让我先走吧,b说不行我不让,你先让我走,互不相让,两个人都过不去。 A线程等待b线程的锁,b线程的任务在等待a线程的锁,两个线程在此处不停尝试获得锁,永无休止。 死锁的种类: 静态锁顺序死锁 如图直接看代码就能看出有死锁问题。 动态锁 阅读全文