参考视频
大型互联网项目架构目标
高性能
也就是速度快,有三个指标
- 响应时间:请求到收到响应的时间
- 并发数:系统同时能处理的请求数量
- 并发用户数:单位时间内有多少用户
- 并发连接数:客户端向服务器发起请求,建立了TCP连接,每秒钟服务器的TCP连接数量
1
2F12中Network可以看到Response的Connection: keep-alive,这是建立了一次TCP连接,并保持持续连接
在这次连接中可以有多次请求,用于请求各种静态文件或接口 - 请求数:QPS(Query Per Second)每秒多少请求
- 吞吐量:单位时间系统处理的请求数
- QPS:(Query Per Second)每秒查询数
- TPS:(Transactions Per Second)每秒事务数
- 事务:客户机向服务器发送请求,服务器做出反应的过程。如请求百度到百度返回所有资源
QPS > 并发连接数 > TPS
高可用
要求网站服务可以一直访问(用集群,一个挂了可以用另一个)
可伸缩
通过增加或减少硬件,提高或降低处理能力
高可扩展
系统间耦合性低,方便通过新增/移除,增加/减少新的功能/模块
安全性
网站安全访问和数据加密,安全存储等策略
敏捷性
随需求应变,快速响应
集群和分布式
- 集群:很多机器干一样的事情,即一个业务模块部署在多台服务器
- 保证
高性能,每个机器处理10个请求,10个机器同时处理100个请求 - 保证
高可用,一个坏了其他的还能干活
- 保证
- 分布式:很多机器在一起,干不一样的事,最后共同干一件大事。即一个大业务系统,拆分成多个小模块,分别部署到不同机器。
- 如多个机器,一个做前端,一个存数据,一个提供服务

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

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

- 原本多模块在一个应用程序,现在拆分为多个应用程序,每个应用程序模块变少,形成多个独立单体架构
- 模块之间不进行交互
- 优点
- 项目启动更快些,因为模块分别启动
- 可靠性更高,一个模块挂了,影响的模块更少
- 可伸缩性更强,一个模块性能有瓶颈,增加机器更容易
- 扩展性和可维护性更强,增加一个模块更方便,不会影响其他机器的模块
- 性能稍高
- 缺点
- 重复功能太多,若两个模块都需要用户信息,则可能每个应用程序里都需要写一套
分布式架构
- 将重复功能抽离出来,其他应用程序可以同时调用该功能模块
分布式架构就是在垂直架构的基础上,将公共业务模块抽离出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用- 这里E是
服务提供者,两个应用程序是服务消费者 服务消费者可以通过RPC用调服务提供者- RPC:(Remote Procedure Call)远程过程调用,即通过网络调用。有HTTP REST风格,Java RMI规范,WebService SOAP协议,Hession等
- 优点:解决了重复功能太多的问题
- 缺点:
服务提供者变化后,服务消费者都需要变化。如提供者IP变了,消费者就无法调用
SOA架构
相互之间有交叉调用调用很复杂

所以引入ESB(相当于总线,中介),以前都是直接调用,现在所有的调用都通过总线
某个模块发生变化,告诉ESB,其他模块调用该模块,ESB就可以帮其找到
- SOA:(Service-Oriented Architecture)面向服务的架构,是一个组件模型
- 将应用程序的不同功能单元(即服务)进行拆分,并通过服务之间定义良好的接口和契约联系起来。
- ESB:(Enterprise Service Bus)企业服务总线,服务中介。
- 提供服务之间的交互。
- 主要包含的功能有:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等
- 优点:
服务提供者变化后,服务消费者不需要变化。ESB会处理中间的变化
微服务架构
是SOA的升华,强调业务需要彻底的组件化和服务化。
原有单个业务系统会拆分为多个可独立开发,设计,运行的小应用。小应用之间通过服务完成交互和集成。
微服务架构 = 80%的SOA架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
- 每个服务都调用自己的数据库,无法调用其他服务的数据库。
- 客户端通过网关访问微服务
- 特点
- 服务实现组件化(服务和数据库构成一个组件),每个服务可用不用的语言开发
- 相互交互用REST API
- 去中心化:每个微服务都有自己私有的数据库持久化业务数据
- 自动化部署:应用拆分为一个一个独立的单个服务,方便自动化部署,测试,运维
小知识
Dubbo是SOA时代的产物,SpringCloud是微服务时代的产物
Dubbo概述
概念
Dubbo是阿里开源的高性能,轻量级的Java RPC框架,使用方便,与其他组件耦合度低。
主要用于RPC远程服务调用和SOA服务治理
架构

蓝色虚线表示初始化,红色虚线表示异步调用,红色实线表示同步调用
- Provider(生产者)运行在一个Container(容器)里,如tomcat,启动后,服务会注册到Registry(注册中心)。服务的IP,端口,URL路径会放到注册中心,告诉Registry可以进行调用
- Consumer(消费者)订阅了Registry,需要调用服务,就可以从Registry获取服务的IP,端口等信息
- Consumer通过服务信息可以调用Provider的服务
- Monitor(服务监控中心)可用于统计服务调用次数
zookeeper安装
Zookeeper作为注册中心来使用
1 | cd ~/software |
Provider和Consumer实现
创建UserController和UserServiceImpl
以前是在Controller注入一个Service的实现类,现在就是通过远程调用
因为Controller和Service相当于两个项目,所以会在两台机器
接下来的视频
- 本文标题:dubbo常用操作
- 创建时间:2022-03-21 20:31:26
- 本文链接:article/tools/dubbo/basic-knowledge/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!