微服务综合
微服务是为了解耦
业务领域定义了边界
系统架构需要遵循三个标准
- 提高敏捷性:及时响应业务需求,促进企业发展
- 提升用户体验:提升用户体验,减少用户流失
- 降低成本:降低增加产品、客户或业务方案的成本
cap
c 一致性
a 可用性
p 分区容错性
微服务需要解决的问题
- 客户端如何访问这些服务
- api网关
- 每个服务之间如何通信
- 同步 对内 RPC 对外 REST
- http -> 跨防火墙
- rpc -> 传输效率高
- 异步
- 消息队列
- 同步 对内 RPC 对外 REST
- 如此多的服务如何治理
- 服务注册与发现 (服务注册中心) 水平扩展实现
- 服务挂了如何解决
- 网络是不可靠的
- 重试机制
- 限流
- 熔断机制
- 负载均衡
- 降级 (本地缓存)
- 网络是不可靠的
微服务设计模式
- 聚合器
- 代理
- 链式
- 分支
- 数据共享
- 异步消息
什么是bean
pojo 原生java对象
bean 有业务的叫bean
响应式
异步非阻塞
全程异步化
http 无状态
session 就是 cookie
前端 -> 服务器
请求 -> 响应
ajax 轮询
tcp 建立长连接
WebSocket 长连接
响应式变成
WebFlux 基于 Netty 实现异步响应式编程
观察者模式
spring boot 优缺点
优点
- 快速构建项目
- 对主流开发框架的无配置集成
- 项目可独立运行,无需外部依赖serclet容器
- 提供运行时的应用监控
- 极大的提高了开发、部署效率
- 与云计算的天然集成
- 开箱即用
缺点
- 版本迭代速度快,一些模块改动很大
- 由于自己不做配置,报错难定位
Thymeleaf
Thymeleaf 是 互联网项目进化的一个中间产物
动态 | 动静分离 | 前后分离 |
---|---|---|
jsp | Thymeleaf | vue.js、reast.js等 |
Hikari
快速、简单、可靠
字节码简洁
优化代理和拦截器
自定义数组类型 代替 ArrayList
自定义集合类型
其他针对 BoneCP 缺陷的优化
Spring Cloud Alibaba
主要功能
- 服务限流降级
- 服务注册与发现
- 分布式配置管理
- 消息驱动能力
- 阿里云对象存储
- 分布式任务调度
组件
- sentinel 把流量最为切入点 从流量控制 熔断降级 系统负载保护等多个维度保护服务的稳定性
- nacos 一个更易构建云原生应用的动态服务发现、配置管理和服务管理的平台
- RocketMQ 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务
- Dubbo 一款高性能的Java RPC框架
- Seata 一个易于使用的高性能微服务分布式事务解决方案
- Alibaba Cloude ACM 一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品
- Alibaba Cloud OSS 阿里云对象存储服务
- Alibaba Cloud SchedulerX 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务
- Alibaba Cloud SMS 覆盖全球的短信服务、友好、高效、智能的互联网化通讯能力
元数据
描述数据的数据
nacos
nacos 可以使用docker版本,方便我们快速部署
clone项目
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
单机模式启动
# standalone-mysql.yaml 可能有 standalone-mysql-5.7.yaml 等
# docker-compose 默认是找寻 docker-compose.yml的,我们需要使用 -f 来选择自定义的配置文件 -d 后台运行
docker-compose -f example/standalone-mysql.yaml up -d
查看日志
docker-compose -f example/standalone-mysql.yaml logs -f
nacos控制台
#默认是8848端口
http://ip:8848/nacos
#账号密码都是 nacos
Nacos Config 远程
可以多环境配置
在 http://ip:8848
的nacos中新建一个配置
spring:
application:
# 服务名
name: service-consumer
cloud:
nacos:
#服务注册中心
discovery:
server-addr: ip:8848
server:
# 服务端口
port: 8080
management:
# 端点检查(健康检查)
endpoints:
web:
exposure:
include: "*"
myValue: "造梦弥豆子"
需要在 pom.xml
引入Nacos Config Starter
需要使用2.1的版本,2.2中暂无 spring.cloud.nacos.config.
相关配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
bootstrap.properties
配置
spring.application.name=service-consumer-config
spring.cloud.nacos.config.server-addr=ip:8848
spring.cloud.nacos.config.file-extension=yaml
注解
@EnableDiscoveryClient
spring cloud中 需要在 Application 来启动服务发现
@EnabelFeignClients
开启feign支持
feign 配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
@RefreshScope
使用远程配置文件
Spring 配置文件加载优先级
Bootstrap.properties -> bootstrap.yml -> application.properties -> application .yml