乐趣区

关于springboot:京淘day16微服务

1. 微服务思维

1. SOA 思维

面向服务 的架构(SOA)是一个组件模型 (编程办法),它将应用程序的不同性能单元(称为服务)进行拆分,并通过这些服务之间定义良好的 接口 和协定分割起来。接口是采纳中立的形式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的零碎中的服务能够以一种对立和通用的形式进行交互。

2. RPC(规定)

RPC 是 近程过程调用(Remote Procedure Call)的缩写模式。SAP 零碎 RPC 调用的原理其实很简略,有一些相似于三层构架的 C / S 零碎,第三方的客户程序通过接口调用 SAP 外部的规范或自定义函数,取得函数返回的数据进行解决后显示或打印。

本地过程调用: 如果须要实现业务逻辑, 则间接去调用本地的办法即可.
近程过程调用: 我想实现一个业务的调用, 然而该性能我没有方法间接调用, 须要通过第三方帮忙我实现业务规定.
具体用法: RPC 不关注具体的实现规定, 用户也不须要理解具体的协定. 谁调用谁实现.

3. Http 协定标准

2. 微服务调用思维

2.1 传统形式调用问题阐明

2.2 微服务思维 - 注册核心

微服务: 架构设计采纳 分布式思维 , 当服务器产生故障时, 能够实现自动化的 故障迁徙 . 无需人为干涉.

注册核心实现原理:
1. 当服务器启动时, 会将服务器的状态 (服务名称 /IP/ 端口) 一起写入注册核心
2. 注册核心接管到服务器信息时, 会动静的保护服务列表数据.
3/4. 当客户端(消费者) 启动时, 首先会链接注册核心, 获取所有的服务列表数据. 并且将服务列表数据保留到本地.
5. 当消费者执行业务调用时, 如果有多个服务的生产者时, 采纳负载平衡的思维筛选其中的一个服务进行拜访 (RPC).
6. 当服务器产生宕机时, 因为注册核心有心跳检测机制, 所有会动静的保护服务列表数据. 会全网播送告诉所有的客户端(消费者) 更新服务列表数据. 在更新服务列表时, 数据的同步会陷入阻塞的状态.

2.3 对于微服务思维负载平衡阐明

2.3.1 集中式负载平衡

阐明: 所有的申请都必须由某个服务器进行对立的治理.
案例: Nginx 是集中式的负载平衡, 然而 nginx 次要的作用是做反向代理

2.3.2 客户端负载平衡

阐明: 申请发送之前, 每个客户端都十分分明的晓得, 本人应该拜访哪台服务器.
在服务器外部. 由客户端间接拜访后端服务器, 将负载的压力进行了分担.

3. 注册核心 -zookeeper 装置

阐明: 具体的装置形式参数课前材料文档.

3.1. zk 启动命令

3.2 对于集群相干概念

3.2.1 几台服务器能够搭建集群

公式: 存活节点 > N/2
算数计算:
1 个节点 1-1 > 1/2 假的 不能搭建集群
2 个节点 2-1 > 2/2 假的 不能搭建集群
3 个节点 3-1 > 3/2 真的 能够搭建集群
论断: 集群最小单位 3 台.

3.2.2 集群个别都是奇数台为什么?

3 个节点 3-1 > 3/2 真的 能够搭建集群 容许宕机 1 台
4 个节点 4-1 > 4/2 真的 能够搭建集群 容许宕机 1 台
阐明: 因为搭建偶数台和搭建奇数台的容灾成果雷同的, 所以个别都是奇数个.

3.2.3 集群中的脑裂景象?

阐明: 因为集群工作过程中主机意外 宕机 . 之后集群开始进行 选举 . 如果呈现 屡次间断平票 状态时, 则可能呈现 脑裂景象 .
脑裂产生的概率是: 1/8=12.5%
如何无效升高脑裂景象产生: 减少节点的数量

3.3 对于 zk 集群搭建问题阐明

1). 如何查看报错

2). 查看 myid 地位及值

3). 查看集群配置

3.4 对于 zk 集群选举的标准

阐明: zk 集群选举规定是 myid 最大值优先的算法, 如果选举完结, 则残余的节点当新主机的从机.
考题 1: 如果顺次启动 1 - 7 台 zk 节点
问 1: 谁当主机? 4
问 2: 谁永远不能入选主机? 1,2,3

3.5 ZK 工作原理阐明

Zookeeper 集群中 leader 负责监控集群状态同步数据,follower 次要负责客户端链接获取服务列表信息. 同时参加投票.

4. Dubbo 框架

4.1 Dubbo 框架介绍

Apache Dubbo |ˈdʌbəʊ| 提供了六大外围能力:面向接口代理的高性能 RPC 调用,智能容错和负载平衡,服务主动注册和发现,高度可扩大能力,运行期流量调度,可视化的服务治理与运维。

4.2 Dubbo 入门案例

4.2.1 导入 jar 包

 <!-- 引入 dubbo 配置 如果下载失败 则去本地仓库中删除从新下载 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

4.2.2 导入我的项目

1). 批改版本号

2). 批改子项目名称

3). 复制我的项目

4). 增加为 maven 我的项目

4.3 对于入门案例阐明

4.3.1 定义中立接口

1). 我的项目构造

2). 定义接口

4.3.2 编辑服务生产者

4.3.2.1 编辑接口实现

阐明: 留神注解导入的是 dubbo 的注解

4.3.2.2 编辑 YML 配置文件
server:
  port: 9000   #定义 tomcat 端口  服务启动时占用的端口

spring:
  datasource:
    #引入 druid 数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#对于 Dubbo 配置   
dubbo:
  scan:
    basePackages: com.jt    #指定 dubbo 的包门路
  application:              #利用名称
    name: provider-user     #一个接口对应一个服务名称 如果是多个实现类则利用名称统一
  registry:
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
  protocol:  #指定协定
    name: dubbo  #应用 dubbo 协定(tcp-ip)  web-controller 间接调用 sso-Service
    port: 20880  #每一个服务都有本人特定的端口 不能反复.
      
mybatis-plus:
  type-aliases-package: com.jt.dubbo.pojo       #配置别名包门路
  mapper-locations: classpath:/mybatis/mappers/*.xml  #增加 mapper 映射文件
  configuration:
    map-underscore-to-camel-case: true                #开启驼峰映射规定
4.3.2.3 生产者启动测试


4.3.3 编辑服务消费者

4.3.3.1 编辑 UserController

4.3.3.2 编辑消费者的 YML 配置文件
server:
  port: 9001
dubbo:
  scan:
    basePackages: com.jt
  application:
    name: consumer-user   #定义消费者名称
  registry:               #注册核心地址
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
退出移动版