dubbo常用操作
Easul Lv6

参考视频

点击跳转

大型互联网项目架构目标

高性能

也就是速度快,有三个指标

  • 响应时间:请求到收到响应的时间
  • 并发数:系统同时能处理的请求数量
    • 并发用户数:单位时间内有多少用户
    • 并发连接数:客户端向服务器发起请求,建立了TCP连接,每秒钟服务器的TCP连接数量
      1
      2
      F12中Network可以看到Response的Connection: keep-alive,这是建立了一次TCP连接,并保持持续连接
      在这次连接中可以有多次请求,用于请求各种静态文件或接口
    • 请求数:QPS(Query Per Second)每秒多少请求
  • 吞吐量:单位时间系统处理的请求数
    • QPS:(Query Per Second)每秒查询数
    • TPS:(Transactions Per Second)每秒事务数
    • 事务:客户机向服务器发送请求,服务器做出反应的过程。如请求百度到百度返回所有资源

QPS > 并发连接数 > TPS

高可用

要求网站服务可以一直访问(用集群,一个挂了可以用另一个)

可伸缩

通过增加或减少硬件,提高或降低处理能力

高可扩展

系统间耦合性低,方便通过新增/移除,增加/减少新的功能/模块

安全性

网站安全访问和数据加密,安全存储等策略

敏捷性

随需求应变,快速响应

集群和分布式

  • 集群:很多机器干一样的事情,即一个业务模块部署在多台服务器
    • 保证高性能,每个机器处理10个请求,10个机器同时处理100个请求
    • 保证高可用,一个坏了其他的还能干活
  • 分布式:很多机器在一起,干不一样的事,最后共同干一件大事。即一个大业务系统,拆分成多个小模块,分别部署到不同机器。
    • 如多个机器,一个做前端,一个存数据,一个提供服务

image
图里左边的三个人洗菜,切菜,炒菜构成了一个分布式,右边的三个人也构成了分布式
所有洗菜的人是一个集群,所有切菜,所有炒菜的都各自是一个集群
如果哪个集群慢了(如炒菜),可以加一台服务器,从而可以提高性能(可伸缩),不必让别人等
如果有了切菜机器人,更快,则可以替换掉原本切菜的人(换一个工具),或者切菜的人和切菜机器人共存,就是高可扩展(新增加的模块不影响原服务)

架构演进

指的是分布式的架构演进
单体架构垂直架构分布式架构SOA架构微服务架构

单体架构

image

  • 多个模块在一个应用程序,模块不拆分。
  • 搭建集群就可以成为多机单体架构
  • 优点:简单,开发部署方便,小项目好用
  • 缺点
    • 项目大了或数据多了后启动慢
    • 可靠性差,一个模块出问题会影响其他模块
    • 可伸缩性差,某个模块用的多,但多个模块在一起,不方便单独扩充资源
    • 扩展性和可维护性差,想加一个模块还是只能和原来放一堆
    • 性能低,一个机器多个模块不如一个机器一个模块快

垂直架构

image

  • 原本多模块在一个应用程序,现在拆分为多个应用程序,每个应用程序模块变少,形成多个独立单体架构
  • 模块之间不进行交互
  • 优点
    • 项目启动更快些,因为模块分别启动
    • 可靠性更高,一个模块挂了,影响的模块更少
    • 可伸缩性更强,一个模块性能有瓶颈,增加机器更容易
    • 扩展性和可维护性更强,增加一个模块更方便,不会影响其他机器的模块
    • 性能稍高
  • 缺点
    • 重复功能太多,若两个模块都需要用户信息,则可能每个应用程序里都需要写一套

分布式架构

image

  • 将重复功能抽离出来,其他应用程序可以同时调用该功能模块
  • 分布式架构就是在垂直架构的基础上,将公共业务模块抽离出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用
  • 这里E是服务提供者,两个应用程序是服务消费者
  • 服务消费者可以通过RPC用调服务提供者
  • RPC:(Remote Procedure Call)远程过程调用,即通过网络调用。有HTTP REST风格,Java RMI规范,WebService SOAP协议,Hession等
  • 优点:解决了重复功能太多的问题
  • 缺点:服务提供者变化后,服务消费者都需要变化。如提供者IP变了,消费者就无法调用

SOA架构

image

相互之间有交叉调用调用很复杂

image

所以引入ESB(相当于总线,中介),以前都是直接调用,现在所有的调用都通过总线
某个模块发生变化,告诉ESB,其他模块调用该模块,ESB就可以帮其找到

  • SOA:(Service-Oriented Architecture)面向服务的架构,是一个组件模型
    • 将应用程序的不同功能单元(即服务)进行拆分,并通过服务之间定义良好的接口和契约联系起来。
  • ESB:(Enterprise Service Bus)企业服务总线,服务中介。
    • 提供服务之间的交互。
    • 主要包含的功能有:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等
  • 优点:服务提供者变化后,服务消费者不需要变化。ESB会处理中间的变化

微服务架构

是SOA的升华,强调业务需要彻底的组件化和服务化
原有单个业务系统会拆分为多个可独立开发,设计,运行的小应用。小应用之间通过服务完成交互和集成。
微服务架构 = 80%的SOA架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

image

  • 每个服务都调用自己的数据库,无法调用其他服务的数据库。
  • 客户端通过网关访问微服务
  • 特点
    • 服务实现组件化(服务和数据库构成一个组件),每个服务可用不用的语言开发
    • 相互交互用REST API
    • 去中心化:每个微服务都有自己私有的数据库持久化业务数据
    • 自动化部署:应用拆分为一个一个独立的单个服务,方便自动化部署,测试,运维

小知识

Dubbo是SOA时代的产物,SpringCloud是微服务时代的产物

Dubbo概述

概念

Dubbo是阿里开源的高性能,轻量级的Java RPC框架,使用方便,与其他组件耦合度低。
主要用于RPC远程服务调用和SOA服务治理

架构

image
蓝色虚线表示初始化,红色虚线表示异步调用,红色实线表示同步调用

  1. Provider(生产者)运行在一个Container(容器)里,如tomcat,启动后,服务会注册到Registry(注册中心)。服务的IP,端口,URL路径会放到注册中心,告诉Registry可以进行调用
  2. Consumer(消费者)订阅了Registry,需要调用服务,就可以从Registry获取服务的IP,端口等信息
  3. Consumer通过服务信息可以调用Provider的服务
  4. Monitor(服务监控中心)可用于统计服务调用次数

zookeeper安装

Zookeeper作为注册中心来使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd ~/software
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar -zxvf zookeeper-3.4.6.tar.gz
rm -rf zookeeper-3.4.6.tar.gz
cp ~/software/zookeeper-3.4.6/conf/zoo_sample.cfg ~/software/zookeeper-3.4.6/conf/zoo.cfg
vi ~/software/zookeeper-3.4.6/conf/zoo.cfg

# 数据的存储路径配置
# dataDir=/tmp/zookeeper
dataDir=/home/easul/software/hadoop-data/zk_data

# 添加环境变量
echo "
ZOOKEEPER_HOME=/home/easul/software/zookeeper-3.4.6
PATH=\$ZOOKEEPER_HOME/bin:\$PATH
export PATH
" >> ~/.bash_profile
source ~/.bash_profile
# 启动zookeeper
zkServer.sh start
# zkServer.sh stop: 停止zookeeper
# zkServer.sh status: 查看zookeeper状态

Provider和Consumer实现

创建UserControllerUserServiceImpl
以前是在Controller注入一个Service的实现类,现在就是通过远程调用
因为ControllerService相当于两个项目,所以会在两台机器
接下来的视频

 评论