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 |db| 提供了六大外围能力:面向接口代理的高性能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: 9001dubbo:  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