学习参考:
https://blog.csdn.net/eson_15/article/details/83585344
https://my.oschina.net/u/3244751/blog/2923421
第一节 分布式架构理解
1、单体应用:用户---电商系统---数据库
2、单体应用采用分布式部署集群:负载均衡---电商系统1,2,3 ---主从库---缓存集群 适合百万数据量
单体应用缺点:开发速度慢,启动时间长,依赖庞大
3、微服务:负载均衡,多个节点高可用 LVS+keepLive 负载分发 ---网关集群 APIGetway ----每个服务抽出来,商品服务,订单服务--商品数据库,订单数据库,数据库切分减少压力,也可以通过nosql数据库缓存
微服务优点:易开发,理解和维护,独立部署和启动等,缺点分布式事务处理,服务治理
第二节 核心组件理解
1、网关:路由转发+过滤器
/api/v1/product/ 商品服务
/api/v1/order/ 订单服务
/api/v1/user 用户服务
2、注册中心:维护调用与被调用方的信息
3、配置中心:管理配置动态更新 例application.properties,有可视化管理后台方便管理
4、链路追踪:分析调用链路耗时
5、负载均衡:分发负载
6、熔断:开启后,保护自己和被调用方
第三节 常见开源微服务框架
consumer 调用方
provider 被调用方
1、dubbo: zookeeper + dubbo + springmvc/springboot
官⽅方地址:http://dubbo.apache.org/#!/?lang=zh-cn
配套
通信⽅方式:rpc(速度快)
注册中⼼心:zookeper/redis
配置中⼼心:diamond
2、springcloud: 全家桶+轻松嵌⼊入第三⽅方组件(Netflix 奈奈⻜飞)
官⽹网:http://projects.spring.io/spring-cloud/
配套
通信⽅方式:http restful (http涉及三次握手协议速度比rpc慢)
注册中⼼心:eruka/consul
配置中⼼心:config
断路路器器:hystrix
⽹网关:zuul
分布式追踪系统:sleuth+zipkin
学习资料料:https://blog.csdn.net/zhangweiwei2020/article/details/78646252
第四节 分布式应用知识CAP理论知识及注册中心选择
CAP定理:Consistency一致性,Availability可用性,Partition tolerance 分区容错性,三者不可同时 获得只能3选2,由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性必须要实现,所以只能在一致性和可用性之间权衡利弊
一致性,所有节点在同一时间数据是完全一致的
可用性,服务一直可用,而且是正常响应时间内
分区容错性,高可用性,一个节点崩了并不影响其他节点
第五节 搭建注册中心
参考 springcloud 中文官方文档 https://springcloud.cc/spring-cloud-dalston.html#spring-cloud-eureka-server
创建父项目,子项目
https://blog.csdn.net/weixin_38970805/article/details/82463122
踩坑:
1、创建子项目时报错无法访问https://start.spring.io连接超时?
解决:https://blog.csdn.net/lidai352710967/article/details/81089305 参考网上解决办法都不好用,换个网络就好了。
2、eureka server下载依赖时报错java.lang.AbstractMethodError? 启动时报错java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder?
解决:都是springBoot版本问题,修改版本 改成2.1.3,保持父项目子项目版本一致。
3、application.properties 文件后缀改成 .yml,图标变成文本?
解决:idea设置 setting- Editor-File Types ,YAML选项里添加 *.yml ,应用-保存。
4、服务启动报错
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1 ?
解决:yml文件编码格式问题,中文注释删除就能正常启动。
访问: 服务启动成功,localhost:端口号,即可访问。
第六节 常用服务间调用方式
RPC:远程调用,长链接,支持同步异步,客户端与服务端之间建立TCP连接,可以一次建立一个,也可以多个调用服用一个链接,数据包小(协议会用谷歌的protobuf),
编解码,序列化,链接,丢包,拆包,组合
Rest(HTTP):http请求,支持多种协议和功能,开发方便成本低,http数据包大
HttpClient , URLConnection(jdk 自带的)
* 练习商品服务,订单服务,将服务注册导注册中心上
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Lombok插件
作用解决代码冗余省去getset方法,idea下载插件 setting--plugins--Browose repositories ---搜索lombok---install,
踩坑:
1、配置文件里要设置依赖
maven父工程
maven子工程
2、idea安装lombok插件后要配置两个地方勾选了 File-setting-complier-Annotation Processors- 勾选Enable Annotation
Processing,File-setting-complier-Java complier - module bytecode version 版本都改成1.8 ,然后重启
3、注意jdk1.8版本和lombok1.18.12版本兼容问题,如果版本不兼容也会导致注解无法引入。
以上三点修改后重启idea,成功引入lombok注解