如何设计一个精壮的服务
最近辞职以后,在准备面试和简历期间,回顾了之前在工作期间出现的服务问题。有一些事故中,是因为某个或某几个服务被高峰期的流量打趴,可能是数据库问题,亦有可能是内存等等各种问题。其深层次的背后,是服务本身不够健壮,服务的某个或某几个节点被打趴以后,导致重试风暴,继而又导致雪崩的出现。如果这些服务是主流程上的服务的话,那就有可能导致全系统的雪崩。
最近辞职以后,在准备面试和简历期间,回顾了之前在工作期间出现的服务问题。有一些事故中,是因为某个或某几个服务被高峰期的流量打趴,可能是数据库问题,亦有可能是内存等等各种问题。其深层次的背后,是服务本身不够健壮,服务的某个或某几个节点被打趴以后,导致重试风暴,继而又导致雪崩的出现。如果这些服务是主流程上的服务的话,那就有可能导致全系统的雪崩。
在mac 上,要运行docker ,需要通过docker desktop 创建docker运行的环境,但是这玩意太重了,风扇总是飞起。于是找到了一个代替docker desktop的轻量级工具,缺点是没有可视化界面。
Colima 是一个以最小化设置来在MacOS上运行容器运行时和 Kubernetes 的工具。
最近在整理笔记,发现之前在分析JAVA内存问题时写的Mat工具文档还是蛮清晰的,现重新整理一下,分享出来。
MAT 全称 Eclipse Memory Analysis Tools
是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存泄漏的原因。
散列(Hash)也称为哈希,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。
在实际使用中,不同的输入可能会散列成相同的输出,这时也就产生了冲突。 这时候,我们就希望有一些算法可以保证散列表的足够散列程度,降低冲突几率。
散列算法的宗旨就是:构造冲突较低的散列地址,保证散列表中数据的离散度。
散列长度 m, 对于一个小于 m 的数 p 取模,所得结果为散列地址。对 p 的选择很重要,一般取素数或 m
f(k) = k % p (p<=m)
根据类图看出来,ConcurrentHashMap实现了 Map 接口,继承了 AbstractMap 抽象类,所以大多数的方法也都和我们平时用到的HashMap是相同的,HashMap 有的方法,ConcurrentHashMap 几乎都有,所以当我们需要从 HashMap 切换到 ConcurrentHashMap 时,无需关心两者之间的兼容问题。
本文主要依据微服务,从"防范稳定性风险"和"降低故障影响"两个方面简单介绍了稳定性建面临的常见问题。
微服务架构让微服务的功能更加内聚,迭代速度更快,但是呢,增加了服务依赖复杂性,进而增大了稳定性建设难度。尽管其依赖关系复杂,但可抽象为上游服务、自身服务、下游服务三者的关系,稳定性风险防范的主要思路是防范三者的风险。