总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
spring-boot-maven-plugin
2.3.7.RELEASE
com.laker.config.ConfigApplication
repackage
repackage
启动Nacos Server
参考解决Nacos Server国内下载速度缓慢的问题下载启动
用户名密码默认都是:nacos
Nacos Server添加配置
-
Nacos Server配置
-
bootstrap.yml配置
-
代码配置
整体如下图:
仅描述如何使用,原理参考后面文章。
使用 Nacos Config 作为 Spring Cloud 分布式配置
启动类
@SpringBootApplication
public class NacosConfigSampleApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
}
配置类
@RestController
@RequestMapping(“/config”)
public class ConfigController {
@Value(“${laker.name}”)
private String lakerName;
@RequestMapping(“/get”)
public String get() {
return lakerName;
}
}
验证
浏览器访问:http://ip:port/config/get
.
使用 Nacos Config 实现 Bean 动态刷新
Nacos Confg 支持标准 Spring Cloud @ RefreshScope
特性,即应用订阅某个Nacos 配置后,当配置内容变化时,Refresh Scope Beans 中的绑定配置的属性将有条件的更新。所谓的条件是指 Bean 必须:
-
必须条件:Bean 的声明类必须标注 @
RefreshScope
-
二选一条件:
-
属性(非 static 字段)标注 @
Value
-
@
ConfigurationProperties
Bean
除此之外,Nacos Confg 也引入了 Nacos Client 底层数据变化监听接口,
即 com.alibaba.nacos.api.config.listener.Listener。下面的内容将分别讨论这三种不同
的使用场景。
Nacos Client:Nacos 客户端 API,也是 Nacos Config 底层依赖
Bean @Value 属性动态刷新
@RestController
@RequestMapping(“/config”)
@RefreshScope
public class ConfigController {
@Value(“${laker.name}”)
private String lakerName;
@RequestMapping(“/get”)
public String get() {
return lakerName;
}
@PostConstruct
public void init() {
System.out.printf("—[init]— laker name : %s ", lakerName);
}
}
@ConfigurationProperties Bean属性动态刷新
- 激活 @ConfigurationProperties Bean @EnableConfigurationProperties(
User.class)。
- 通过 @Autowired 依赖注入 User Bean。
@RefreshScope
@ConfigurationProperties(prefix = “laker”)
public class User {
private String name;
private int age;
}
启动类
@EnableConfigurationProperties(User.class)
@SpringBootApplication
public class NacosConfigSampleApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
}
使用 Nacos g Config 监听实现 Bean 属性动态刷新
前文曾提及 com.alibaba.nacos.api.config.listener.Listener 是 Nacos ClientAPI 标准的配置监听器接口,由于仅监听配置内容,并不能直接与 Spring 体系打通,因此,需要借助于 Spring Cloud Alibaba Nacos Config API NacosConfigManager
@SpringBootApplication
public class NacosConfigSampleApplication {
@Autowired
private NacosConfigManager nacosConfigManager;
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
@Bean
public ApplicationRunner runner() {
return args -> {
String dataId = “laker-dev.yaml”;
String group = “DEFAULT_GROUP”;
nacosConfigManager.getConfigService().addListener(dataId, group, new
AbstractListener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("[Listener] " + configInfo);
}
});
};
}
}
[Listener] laker:
name: laker1222222
参考:
更多:Java进阶核心知识集
包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等
高效学习视频
参考:
更多:Java进阶核心知识集
包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等
[外链图片转存中…(img-cyi4fsZg-1714898399765)]