总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
使用方法
com.open.capacity
swagger-spring-boot-starter
SwaggerConfig 自动形成swagger文档核心代码
以认证中心代码为例
认证中心代码
@Component
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket createRestApi() {
ParameterBuilder tokenPar = new ParameterBuilder();
List pars = new ArrayList<>();
tokenPar.name(“Authorization”).description(“令牌”).
modelRef(new ModelRef(“string”)).
parameterType(“header”).required(false).build();
ParameterBuilder clientPar = new ParameterBuilder();
clientPar.name(“client_id”).description(“应用ID”).
modelRef(new ModelRef(“string”)).
parameterType(“header”).required(false).build();
ParameterBuilder secretPar = new ParameterBuilder();
secretPar.name(“client_secret”).description(“应用密钥”).
modelRef(new ModelRef(“string”)).
parameterType(“header”).required(false).build();
pars.add(tokenPar.build());
pars.add(clientPar.build());
pars.add(secretPar.build());
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
// .apis(RequestHandlerSelectors.basePackage(“com.open.capacity”))
.apis(RequestHandlerSelectors.any())
.paths( input ->
PathSelectors.regex(“/oauth/client.*”).apply(input) ||
PathSelectors.regex(“/oauth/user.*”).apply(input) ||
PathSelectors.regex(“/oauth/get.*”).apply(input) ||
PathSelectors.regex(“/oauth/userinfo.*”).apply(input) ||
PathSelectors.regex(“/oauth/remove.*”).apply(input) ||
PathSelectors.regex(“/oauth/refresh/token.*”).apply(input)||
PathSelectors.regex(“/oauth/token/list.*”).apply(input)||
PathSelectors.regex(“/clients.*”).apply(input)||
PathSelectors.regex(“/services.*”).apply(input)||
PathSelectors.regex(“/redis.*”).apply(input)
)
// .paths(PathSelectors.any())
.build().globalOperationParameters(pars);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(“认证中心swagger接口文档”).description(“认证中心swagger接口文档”).version(“1.0”).build();
}
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix(“/”);
resolver.setSuffix(“.html”);
return resolver;
}
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename(“messages”);
return messageSource;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// super.addResourceHandlers(registry);
registry.addResourceHandler(“swagger-ui.html”).addResourceLocations(“classpath:/META-INF/resources/”);
registry.addResourceHandler(“/webjars/**”).addResourceLocations(“classpath:/META-INF/resources/webjars/”);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
访问网关swagger-ui
http://127.0.0.1:9200/swagger-ui.html
image
访问认证中心swagger-ui
http://127.0.0.1:8000/doc.html(http://127.0.0.1:8000/api-auth/doc.html)
注意查看认证中心代码
image
如果有上下文路径
## 接口地址 http://127.0.0.1:8000/api-auth/doc.html
image
image
访问用户中心swagger-ui
image
企业微服务开放平台 ,历经多家公司生产考验
-
基于layui前后端分离的企业级微服务架构
-
兼容spring cloud netflix & spring cloud alibaba
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
[外链图片转存中…(img-bVKk1qis-1715460547693)]