系统扩展性


为什么提升扩展性会很复杂 比方说,你系统的流量是每秒 1000 次请求,对数据库的请求量也是每秒 1000 次。如果流量增加 10 倍,虽然系统可以通过扩容正常服务,数据库却成了瓶颈。再比方说,单机网络带宽是 50Mbps,那么如果扩容到 30 台机器,前端负载均衡的带宽就超过了千兆带宽的限制,也会

JOIN的几种方式


三类关联算法 常见的关联算法有三大类,分别是嵌套循环(Nested Loop Join)、排序归并(SortMerge Join)和哈希(Hash Join)。 嵌套循环连接算法 所有的嵌套循环算法都由内外两个循环构成,分别从两张表中顺序取数据。其中,外层循

Kafka

Kafka 

1. 协调节点的选择 Kafka 协调节点(coordinator)是负责管理消费者组元数据和分区分配的 Kafka Broker。选取流程如下: 基于消费者组 ID 哈希分配:每个消费者组的 group.id 经过哈希计算后会映射到某个特定的 Kafka Broker,这个 Broker 就是该组

分布式数据库


分片机制通常有两点值得关注: 1. 分片策略 主要有 Hash(哈希)和 Range(范围)两种。你可能还听到过 Key 和 List,其实 Key 和List 可以看作是 Hash 和 Range 的特殊情况,因为机制类似,我们这里就不再细分了。 2. 分片

ES优化参考


分片优化 每个分片大小不要超过30GB,常规需要y = x/30个分片,增长速度快建议修正为y = x/30+1 每个节点建议的单个索引分片数<3,即按6个节点计算,最多有12个分片。 即分片数满足条件为y=x/30或y=x/30+1且y<=12, 更改分片数量,需要重建索引结构、刷数据。 路由控制

并发设计模式


不变性(Immutability)模式 不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。 将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。

并发工具类


如何优雅地终止线程池 shutdown() 方法是一种很保守的关闭线程池的方法。线程池执行 shutdown() 后,就会拒绝接收新的任务,但是会等待线程池中正在执行的任务和已经进入阻塞队列的任务都执行完之后才最终关闭线程池。 而 shutdownNow() 方法,相对就激进一些了,线程池执行 sh

并发理论


线程比进程效率高的原因:  早期的操作系统基于进程来调度 CPU,不同进程间是不共享内存空间的,所以进程要做任务切换就要切换内存映射地址,而一个进程创建的所有线程,都是共享一个内存空间的,所以线程做任务切换成本就很低了。  在一个时间片内,如果一个进程进行一个 IO 操作,例如读个文件,这个时候该进

CPU负载和CPU利用率


CPU利用率:显示的是程序在运行期间实时占用的CPU百分比 CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1

实现接口幂等性的8种解决方案


幂等性解决方案 幂等性设计方案通常在分布式系统中,常见的幂等性设计方案如下: 1、唯一性约束 利用数据库的唯一性约束,如唯一索引或主键,来避免插入重复数据。 mysql> INSERT INTO mydb.`orde