一·分布式理论基础
1.什么是分布式(定义)
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
2.出现的原因?分布式的好处?
随着互联网的发展,网站应用的规模不断的扩大,常规的垂直架构已经无法应对,分布式服务架构以及流动计算架构势在必得,需要一个治理系统确保架构有条不紊的演进。
二·发展演变
ORM-----MVC------RPC——SOA
ORM 单一应用架构:用户群体确定,访问量不大,开发简单部署也简单,也可以两(1-10)个服务器一起分担流量压力
缺点:
1扩展不容易,对应用的修改需要重新打包,重新放在服务器上
2.协同开发,大家都去改这一个应用,很容易造成混乱,不易维护
3.应用的扩大,单靠增加服务器已经无法提升性能问题
MVC垂直应用架构
将大的单体应用拆分成多个互不相干的小应用独立部署在服务器上,每一个小应用从页面到业务逻辑到数据库到服务器都是完整且独立的。某个应用承受力大的时候就部署在多个服务器上。
好处:
1.分工合作容易,每个人负责不同的应用,互不干扰
2.性能扩展容易,将单个应用放多个服务器
缺点:
1.每个应用都是完整的,市场需要变动频繁(界面经常变),需求是要界面和业务逻辑实现分离
2.应用不可能完全独立,大量的应用之间需要交互
RPC 分布式服务架构
将界面和业务逻辑再分离,如订单的界面与订单的业务逻辑放在不同的服务器,这样调取就可以
A服务器调取A服务器-调用就可以,进程内通讯,部署在同一个tomcat,同一个进程
A界面服务器调取B业务逻辑服务器,分割异地,这个调用就成为RPC,叫做远程过程调用。
分布式服务架构难点:
1.如何进行远程调用过程
2.如何拆分业务,提升业务的复用程度
分布式服务框架
造成了资源浪费
动态调度,
流动计算架构(SOA)
引进了调度中心,负责维护服务之间的复杂关系以及实时管理服务集群
根据现有请求的多少,判断下一次请求进来的时候给哪个服务(给上一次请求最少的服务器)以此来提高服务的利用率
架构的变化带来的就是技术的革新
分布式服务架构——RPC
基本原理:1,建立网络连接socket 2.将参数与调用的方法名传给B服务器 3.助手收到调用,接收到返回值传给A服务器
AB两个服务器架起一个网络连接,使得正常通讯
A服务器 1.客户端调用 2.序列化 3.发送消息 4.反序列化成对象 5.调用本地服务6.服务处理 7.返回处理结果 8.将结果反序列化 9.返回消息 10.反序列化 11.返回调用结果
影响RPC框架性能的点:
1.RPC框架是否可以快速在多个服务器之前建立连接,保持通讯
2.序列化与反序列化的速度(二进制流速度大于json)
市面上RPC框架:dubbo/gRPC/Thrift/HSF(high speed service Framework)
dubbo------java RPC框架 (阿里研发)
一.优点:
1.面向接口代理的高性能RPC调用
2.智能负载均衡(让每个服务器均衡的分担流量压力)
3.服务自动注册与发现(注册中心清单罗列,要调支付,会告知支付在哪几个服务器上。相当于婚介中心同时注册中心知道那几个服务可用哪几个不可用)
4.高度可扩展(微内核+插件)
5.运行期流量调度(轻松实现灰度发布,配置不同的路由规则,轻松实现灰度发布)
6.可视化的服务治理与运维(通过可视化界面动态查询)
二.设计架构
角色:Registry(注册中心)Provider(服务提供者)相当于业务逻辑 Consumer(服务消费者)相当于web界面
Container(dubbo框架容器)Monitor(监控者)统计服务调用次数和调用时间的监控中心
0.容器先启动
1.Provider(服务提供者)将提供的服务像注册中心注册
2.Consumer(服务消费者)要向服务中心订阅所需要的服务 主要要测试的测试点
3.并且服务中心会将变动同步给服务消费者,及时告诉他哪些服务能调哪些不能调
4.消费者拿到可调用的服务后向服务提供者开始提示调用(根据负载均衡调用)
5.将调用信息统计每隔一分钟发送给监控中心
其中0,1,2是初始化,就是服务启动时就完成的 3,5是异步的,4是同步的调用
dubbo的好处
- Dubbo会对远程调用进行封装,使用起来就像调用本地方法一样,简单方便。
- Dubbo内建了多种负载均衡和容错机制,负载均衡方便服务提供方通过增加机器来分散请求压力,容错机制能够屏蔽许多网络请求带来的问题。
- Dubbo提供了服务自动注册与发现,服务提供方能够随时增加、减少机器,而服务使用方也能够及时做出反应,不需要改配置,重新发布。
- Dubbo提供了服务治理的功能,允许动态的调整服务提供方和消费方的配置,比如随时下线服务提供方机器,调整服务参数等。
dubbo环境搭建
1.一般建议使用ZooKeeper注册中心
2.监控中心安装(dubbo git源码上的ops上完整部署)
ZooKeeper是Apacahe Hadoop的子项目,是一个树型目录服务。主要功能:能知晓各个节点服务是否可用以及变更信息。
配置维护,域名服务,分布式同步,组服务,权重配置。
需求:
某电商系统有两个模块,一个是订单服务web模块 功能是创建订单 。一个是用户服务service模块功能是查询用户地址
预期订单服务web模块在A服务器,用户服务模块在B服务器,A消费者 获取B提供者
dubbo接口测试(简单等于搭建消费者)
1.talnet命令
- 常用命令:ls、ps、cd、pwd、trace、count、invoke、status、log、help、clean、exit
- 通过ls xxxService查看该service下的所有方法
- 通过ls -l查看provide提供的服务及服务下的方法
- 通过ls -l xxxservice查看该service下的method
- 通过ps、ps -l 查看dubbo服务的端口信息
- invoke xxxService.xxxMethod({"prop": "value"}) ——调用服务的方法。
- invoke xxxMethod({"prop": "value"}) ——调用服务的方法(自动查找包含此方法的服务)。
- 通过ps port查看服务端口上的连接信息
- 通过ps -l port 查看端口上连接的详细信息
- trace XxxService ——跟踪1次服务任意方法的调用情况
- trace XxxService 10 ——跟踪10次服务任意方法的调用情况
- trace XxxService xxxMethod ——跟踪1次服务方法的调用情况
- trace XxxService xxxMethod 10 ——跟踪10次服务方法的调用情况
- count XxxService ——统计1次服务任意方法的调用情况
- count XxxService 10 —— 统计10次服务任意方法的调用情况
- count XxxService xxxMethod —— 统计1次服务方法的调用情况
- count XxxService xxxMethod 10 ——统计10次服务方法的调用情况
talnet dubbo服务地址 端口
ls 以后会得到一个全路径
ls -l 全路径 可以得到方法和参数
不需要传参的方法直接调用 invoke 方法名()
借助接口文档得到
2.jmeter插件
https://github.com/thubbo/jmeter-plugins-for-apache-dubbo
clone下来以后,将jar包放在jmeter放在lib,ext中
取样器,dubbo sample
会把服务中的方法都罗列出来。
1.目前市面上流行的接口大多有哪几种协议?
rpc,http,https,dubbo,websocket
2.http协议特点:1.无状态(接口之间没有事务处理记忆能力)2.灵活(参数类型支持任意类型 传输) 3.无连接 4.简单快速
高