参考文章:
https://www.coder4.com/homs_online/ 从0到1实战微服务架构
springcloud
概念
微服务架构 优点: 微服务低耦合、易维护、适合团队协作、测试起来成本更低,也更易于横向拓展。采用微服务架构后,可以显著的提升迭代速度。 缺点: 开发能力要求更高、调试难度增大、运维难度增加
使用 http + json 的方式完成远程服务调用
负载均衡算法
- 轮询
- 最小连接(优先选择连接数最少的服务器)
- ip散列
CAP理论
- 一致性(Consistency) (所有节点在同一时间具有相同的数据)
- 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
- 分区容错性(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
cap只能保证满足其中的两项,无法同时做到3项都满足
nacos
服务注册与发现、配置中心
<!-- 服务注册/发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
application.yml
服务注册与发现的地址 cloud: nacos: discovery: server-addr: ip:8848 # MapperScan
启动类上注解:
@SpringBootApplication @EnableFeignClients(basePackages="com.rj.gulimall.order.feign")// 调用远程服务的接口,接口调用放进行配置即可 @EnableDiscoveryClient//开启远程服务调用功能 @MapperScan("com.rj.gulimall.order.dao") public class MainApplication_oms9001 {
远程服务调用接口
// 服务调用者 @FeignClient("gulimall-pms") //告诉spring cloud这个接口是一个远程服务接口,gulimall-pms是注册中心中的服务名 public interface ProviderFeignService { @RequestMapping("/pms/nacos/user")//服务提供方的接口访问路径 public R test();//得到一个R对象 } // 服务提供者 @Controller @RequestMapping("/nacos") @RefreshScope // 自动刷新配置中心的属性值 public class ProviderController { @Value("${oms.user.age}") // 注入配置中心配置的属性值 private int age; @Value("${oms.user.name}") // 注入配置中心配置的属性值 private String name; @RequestMapping("/user") @ResponseBody public R test(){ return R.ok().put("name",name).put("age",age); } }
使用nacos的配置中心功能,必须在项目中创建一个bootstrap.properties文件(加载优先级比application.yml高),否则获取不到配置中心的数据
spring.application.name=当前项目对外暴露的服务名 spring.cloud.nacos.config.server-addr=注册中心地址:8848 # 指定加载的命名空间id,默认加载public命名空间下的数据 spring.cloud.nacos.config.namespace=1eae866d-de85-43ac-938a-18230d1cc172 # 加载命名空间里的dev配置组 spring.cloud.nacos.config.ext-config[0].group=dev # 加载命名空间里的dev配置组的哪个配置文件 spring.cloud.nacos.config.ext-config[0].data-id=application-oms.yml # 是否自动刷新配置文件的内容,默认不开启 spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].group=dev spring.cloud.nacos.config.ext-config[1].data-id=gulimall-mybatis.yml spring.cloud.nacos.config.ext-config[1].refresh=true spring.cloud.nacos.config.ext-config[2].group=dev spring.cloud.nacos.config.ext-config[2].data-id=gulimall-nacos.yml spring.cloud.nacos.config.ext-config[2].refresh=true
gateway
网关,具有路由转发、权限校验、限流控制等功能,QPS 3万次
请求到达网关,根据断言判断是否符合路由规则,如果符合,经过一定的过滤器链到达服务器
获取服务器列表是通过config注册中心,所以在启动类上需要开启服务发现功能@EnableDiscoveryClient
<!-- 使用注解方式获取yml属性文件内容是,需要引入该包,否则会报下述错误: --> <!-- Spring Boot configuration annotation processor not found in classpath --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- 服务注册/发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- openfeign 服务调用,负载均衡 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- 网关 springcloudgateway的内部是通过netty+webflux实现的,webflux 与 spring-boot-starter-web冲突 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
请求路径:http://localhost:88?url=qq server: port: 88 spring: cloud: gateway: routes: - id: baidu_route // 路由规则ID uri: https://www.baidu.com // 路由跳转路径 predicates: // 断言 - Query=url,baidu // 断言验证url=baidu的请求会进行跳转 - id: qq_route uri: https://www.qq.com predicates: - Query=url,qq
Elsticsearch
开源的全文搜索引擎,可以快速的存储、搜索、分析海量数据
关键词:index(索引,类似于mysql的数据库)、类型(类似于mysql的table)、文档(类似于mysql的数据记录,JSON格式存储)、属性(类似于mysql的字段)
下载安装
docker pull elasticsearch:7.6.2 存储和检索数据
docker pull kibana:7.6.2 可视化检索数据