最佳实践
1、金额的使用
https://www.zhihu.com/question/22536323
2、稳定性建设
研发阶段:限流、熔断降级、超时、重试、兼容、隔离、
上线发布: 可灰度、可监控、可回滚
问题定位:知识、工具、方法
3、携程高并发
设计目标:
- 稳:确保系统稳定可靠,保障售卖流程无间断。
- 准:实现数据一致性,确保履约准确无误。
- 快:提供流畅的预订体验,实现快速确认。
redis热key
redis大key
mysql高负载
4、微服务架构本质
-
风险隔离:高度自治和高度隔离,明显不让低等级的服务影响高等级
-
分治原理:单个服务的吞吐始终是有限的,通过微服务拆分可以突破扩展上限,分拆流量可支撑全球化的业务,不再受机房规模甚至地域影响
-
单一职责:单体系统逐渐演变成具有单一职责的细粒度微服务
隔离方法
业务领域:
比如阿里的电商中台业务,包含 用户账号子系统、商品子系统、订单子系统、客户子系统、物流子系统 等。
用户群体:
根据用户群体做拆分,我们首先要了解自己的系统业务里的用户角色领域是否没有功能耦合,有清晰的领域界限。
可扩展性
这个需要区分系统中变与不变的部分,不变的部分一般是成熟的、通用的服务功能,变的部分一般是改动比较多、需要不断满足业务迭代扩展性需要的功能。
可靠性:
核心模块:把一些重要的模块独立放在一个集群上,不与其他模块混用,而这个独立的集群,服务机性能要是最好的。
主次链路:在各个业务系统中,其实都会有主次业务链路。主业务链条,完成了业务系统中最核心的那部分工作。而次链路是保证其他基础功能的稳定运行。
性能:
根据性能需求来进行拆分。简单来说就是访问量特别大,访问频率特别高的业务,又要保证高效的响应能力,这些业务对性能的要求特别高。比如积分竞拍、低价秒杀、限量抢购。
https://mp.weixin.qq.com/s/wf-Uj7EEBr4SYFe1ZDuOnw
5、java gc 和 go gc 对比
垃圾识别:
如何回收垃圾:
三色标记算法:
https://juejin.cn/post/7111515970669117447
6、go gpm模型
7、Go语言特性
https://mp.weixin.qq.com/s/sKUA6vlZyZxV8UZn3i2EPA
8、full gc原因
- 大对象:系统一次性加载了过多数据到内存中(比如SQL查询未做分页),导致大对象进入了老年代;
- 内存泄漏:频繁创建了大量对象,但是无法被回收(比如IO对象使用完后未调用close方法释放资源),先引发FGC,最后导致OOM
- 程序频繁生成一些长生命周期的对象,当这些对象的存活年龄超过分代年龄时便会进入老年代,最后引发FGC
- 程序BUG导致动态生成了很多新类,使得 Metaspace 不断被占用,先引发FGC,最后导致OOM
- 代码中显式调用了gc方法,包括自己的代码甚至框架中的代码;此时可能是显示的System.gc()调用导致GC次数过多,这可以通过添加-XX:+DisableExplicitGC来禁用JVM对显示GC的响应
- JVM参数设置问题:包括总内存大小、新生代和老年代的大小、Eden区和S区的大小、元空间大小、垃圾回收算法等等
9、一张图总结架构设计的40个黄金法则
https://mp.weixin.qq.com/s/eDEjSdf93HE35ndVPpH13A
10、关于稳定性治理
https://mp.weixin.qq.com/s/1Yy5axBTiaH9q-AaM7cH0g
11、go gc时机
gc触发时机:Go中GC的触发时机主要取决于以下几个因素:
内存使用量达到阈值触发:
每次内存分配时,都会检查当前内存分配量是否已达到阀值,如果达到阀值则立即启动 GC,其中阈值主要跟环境变量 GOGC有关,阈值的计算公式大体为(实际的计算逻辑要更复杂):
阈值 = LiveHeap +(LiveHeap ✖️ GOGC)/ 100
其中LiveHeap代表上一个GC周期结束时存活的对象内存大小,GOGC默认值为 100,即当堆内存达到上次回收后的两倍时,触发垃圾回收。
定时触发:
Go 的垃圾回收器每隔一定时间会执行必要的垃圾回收操作。这确保在内存增长较慢的情况下,GC 仍会运行以及时释放内存,默认时间间隔为 2min。
手动触发:
Go 语言提供了 runtime 包,可以通过调用 runtime.GC() 函数来显式触发垃圾回收。在大部分情况下,Go GC 的自动调度足够满足需求。只需要在特定场景(比如内存消耗特别高、内存释放后明确要求运行 GC、测试统计等)中手动触发 GC。
https://mp.weixin.qq.com/s/Tr5HPQeauYU5C3wr5XKITw
https://mp.weixin.qq.com/s/yysmTd4mrHxPtXMbHMvWVg