网站开发前端和后端技术/百度宣传推广费用
一、HTTP 和 RPC
首先,http 与 rpc 有什么区别这个问题不太严谨,因为这俩就不是一个层级的东西。
HTTP
这个大家太熟悉了吧?日常接触最多的恐怕就是各种http协议的接口了。
没错,http它是一个协议。
其他在这里就不打算铺开了,以前整理过一些内容,有需要的可以跳转翻翻看:
- 一、http介绍、TCP/IP 协议族
- 二、IP,TCP 和 DNS、三次握手
- 三、HTTP 协议基础、四次挥手
- 四、HTTP 缺点
- 五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
RPC
RPC 是一种技术的代名词,全称是远程过程调用。
远程?那是不是也有本地过程调用?
没错,举个例子说明一下:
- 本地过程调用:你的电脑上启动了一个服务A,运行程序的时候服务A里的各种方法的互相调用,就是本地了。
- 远程过程调用:而隔壁小王也启动了一个服务B,他还说他里面提供了一个功能非常劲爆的方法,你也想去调用,这就是远程了。
而至于你怎么调用到小王服务器里的方法,那就是个实现方式的问题了。你为了简单,直接走http协议也行。如果觉得http满足不了需求,那么也可以基于tcp自定义一个协议。
远程调用过程
远程调用过程大概就是下图所示:
二、DSF
在工作中我发现公司有不少应用的名字是 DSF 打头的,DSF(Distributed Service Framework)其实就是指分布式服务框架。
简单介绍 2 个点:为什么要用到分布式、这套DSF的包含的内容。
为什么要用到分布式
为什么要用到分布式服务?换个方式问那就是:分布式解决了什么问题。
首先,分布式架构是由单体架构演进而来,我司的业务系统也不例外。业务早期为了降低开发成本,实现快速上线,通常使用单体架构,所有的业务模块都在同一个应用里。
随着业务规模的扩张,单体应用的缺点就暴露出来,比如:
- 系统耦合性高,当后面增加的功能越来越多,代码量巨增的时候,之前某个主程脑海中划分好的模块边界可能越来越模糊,导致调用关系混乱。
- 改一赠二出现越来越多,经常存在开发修改了某个功能,而导致其他的功能有问题。
- 某个功能有问题,整个一起回滚。
- 语言单一,不能根据场景选择更合适的语言。比如其中有个模块系统主要是大数据分析,用 python 自然更加合适,因为它有丰富的类库。
- 系统不易于拓展部署,比如系统中有一个功能流量很大,顶不住了就要加机器,那么在新机器上还是部署整个应用,不能单独的部署这个大流量的服务,会造成一定的资源浪费。 。。。
为了解决这些问题,于是把之前的业务进行垂直拆分成多个系统。系统与系统之间通过网络交互来完成各项业务处理,每个系统互相独立,可以单独部署。这种多个组件合作对外提供服务的形式,就是分布式了。
但是分布式同样也有它的缺点:
- 从之前的单应用调用,现在变成了多个应用直接的交互,调用链路变长,带来了网络开销,同时也给定位问题增加了难度。
- 为了让你的应用更可靠,还有考虑其他的异常情况,比如调用失败、因某些问题导致的高频调用,对此还得做些 限流、熔断之类的措施。
- 出现问题,可能会涉及多个服务的回滚,互相之间会有影响。
- 环境变复杂了,增加了测试的复杂度。 。。。
简单来说,分布式帮我们克服了单体带来的瓶颈,但是为了分布式服务的稳定性,我们需要考虑更多的东西。
DSF包含的内容
那么一套分布式服务平台都有哪些内容,这里简单列举一下(以我司自研为例):
- 服务注册:服务提供方上传契约信息,契约中包含服务组信息、服务信息、API信息等。
- 服务发现:服务消费方寻址,基于某种粒度可以找到需要。
- 服务调用:自定义超时时间、失败重试次数等,支持同步、异步调用等。
- 负载均衡:比如支持轮询策略。
- 网关:还可以通过网关对外提供一些rest api调用。
- 健康检查:对服务提供方实例进行健康检查。
- 服务拓扑:应用调用的上下游链路拓扑图。
- 服务监控:展示服务运行状态、调用指标等。
- 报警:当某个服务的实例异常数超过阈值,触发报警。
- 限流:用于保护系统。
- web前台:方便查看各种信息,各种常用功能的入口。 ...
三、Dubbo
对于分布式服务框架,如果有自研能力的话,可以结合公司业务实际情况进行高度定制化。如果初期不具备这样的条件,很多公司会选择成熟的开源框架直接使用,dubbo 就是这样的框架。
Dubbo 是阿里巴巴 2011年开源的一个基于 Java 的 RPC 框架,它实现了面向接口的代理 RPC 调用,并且可以配合 ZooKeeper 等组件实现服务注册和发现功能,并且拥有负载均衡、容错机制等。
dubbo 架构
这是官方文档的架构图,描述了 Dubbo 微服务组件与各个中心的交互过程。
- Registry 注册中心:协调 Consumer 与 Provider 之间的地址注册与发现。
- ConfigCenter 配置中心:存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性;负责服务治理规则(路由规则、动态配置等)的存储与推送。
- Metadata 元数据中心:接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等);作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展。
以上三个中心并不是运行 Dubbo 的必要条件,用户完全可以根据自身业务情况决定只启用其中一个或多个,以达到简化部署的目的。通常情况下,所有用户都会以独立的注册中心 开始 Dubbo 服务开发,而配置中心、元数据中心则会在微服务演进的过程中逐步的按需被引入进来。
所以,如果想快速实现一个分布式服务框架,就可以基于dubbo的方案来进行开发,既可以拿来就用,后续也可以进行二次开发。
相关文章:

RPC、HTTP、DSF、Dubbo,每个都眼熟,就是不知道有什么联系?
一、HTTP 和 RPC 首先,http 与 rpc 有什么区别这个问题不太严谨,因为这俩就不是一个层级的东西。 HTTP 这个大家太熟悉了吧?日常接触最多的恐怕就是各种http协议的接口了。 没错,http它是一个协议。 其他在这里就不打算铺开了…...

java.security.MessageDigest的用法
java.security.MessageDigest MessageDigest的含义 message含义是:消息,信息 digest的含义是 digest 必应词典 n.摘要;文摘;概要;汇编 v.消化;领会;领悟;理解 海词 n. 摘要 vt. 消化;理解 vi…...

3.2 分析特征间的关系
3.2 分析特征间的关系 3.2.1 绘制散点图 scatter()例子1:绘制2000-2017年各季度国民生产总值散点图例子2:使用不同颜色不同形状的点,绘制2000-2017年各产业各季度国民生产总值散点图 3.2.2 绘制折线图 plot()例子1:绘制2000-2017年…...

Numpy学习
Numpy官方手册:Array objects — NumPy v1.24 Manual 创建数组 1.1 从现有数据创建 重要类型 np.ndarray # 判断是否可以迭代 注意0维标量不可以遍历 print(__iter__ in dir(np.ndarray) and __getitem__ in dir(np.ndarray))np.array(object, dtypeNone) objec…...

IDC机房相电压与线电压的关系
380V电动机(三相空调压缩机)的电流计算公式为:Ⅰ=额定功率(1.732额定电压功率因数效率)。 功率因数是电力系统的一个重要的技术数据。功率因数是衡量电气设备效率高低的一个系数。功率因数低,说…...

chatgpt赋能python:Python如何设置输入的SEO
Python如何设置输入的SEO Python是一种高级的编程语言,具有容易上手、可扩展和开源等特点,因此在软件开发过程中得到广泛的应用。然而,如果您想让您的Python项目在搜索引擎上获得更好的排名和流量,您需要考虑如何设置输入的SEO。…...

Spring Cloud Alibaba — Nacos 构建服务注册中心
文章目录 Nacos Server下载启动登录创建命名空间 Nacos Client启动样例Nacos 服务发现配置项 集成 OpenFeign 远程接口调用添加 OpenFeign 依赖开启 EnableFeignClients 注解编写远程服务接口远程接口调用 集成 Sentinel 熔断降级添加 Sentinel 依赖开启 Sentinel 熔断降级编写…...

4.2 Spark SQL数据源 - 基本操作
一、默认数据源 案例演示读取Parquet文件 查看Spark的样例数据文件users.parquet 1、在Spark Shell中演示 启动Spark Shell 查看数据帧内容 查看数据帧模式 对数据帧指定列进行查询,查询结果依然是数据帧,然后通过write成员的save()方法写入HDF…...

事件相关功能磁共振波谱技术(fMRS)
导读 质子磁共振波谱(MRS)是一种非侵入性脑成像技术,用于测量不同神经化学物质的浓度。“单体素”MRS数据通常在几分钟内采集,然后对单个瞬态进行平均,从而测量神经化学物质浓度。然而,这种方法对更快速的神经化学物质的时间动态…...

跨境电商客户服务五步法
互联网技术的革新与升级对商务客服产生了巨大的影响,过去由在线客服与客户直接电联的单一服务形式被全渠道客服系统所替代。在电子商务时代,商家与客户之间的互动变得尤为重要:一方面,卖家通过分析客户喜好及消费趋向来针对性处理…...

hadoop环境配置及HDFS配置
环境与配置 ubuntu 20.04.6 /centos8hadoop 3.3.5 指令有部分不一样但是,配置是相同的 安装步骤 创建一个虚拟机,克隆三个虚拟机,master内存改大一点4G,salve内存1Gj修改主机名和配置静态ip(管理员模式下)) hostnamectl set-hostname node1 # 修改主机名 sudo passwd root …...

HTML中 meta的基本应用
meta 标签的定义 meta 标签是 head 部分的一个辅助性标签,提供关于 HTML 文档的元数据。它并不会显示在页面上,但对于机器是可读的。可用于浏览器(如何显示内容或重新加载页面),搜索引擎(SEO)或…...

docker compose 下 Redis 主备配置
1、准备两台虚拟机或者物理机 node1 IP:192.168.123.78 node2 IP:192.168.123.82 2、安装docker和docker compose 3、安装node1,配置docker-compose.yml version: 3services:redis-rs1:container_name: redis_node1image: redis:5.0.3rest…...

Tomcat ServletConfig和ServletContext接口概述
ServletConfig是一个接口,是Servlet规范中的一员 WEB服务器实现了ServletConfig接口,这里指的是Tomcat服务器 一个Servlet对象中有一个ServletConfig对象,Servlet和ServletConfig对象是一对一 ServletConfig对象是Tomcat服务器创建的…...

linux内核open文件流程
打开文件流程 本文基本Linux5.15 当应用层通过open api打开一个文件,内核中究竟如何处理? 本身用来描述内核中对应open 系统调用的处理流程。 数据结构 fdtable 一个进程可以打开很多文件, 内核用fdtable来管理这些文件。 include/linu…...

遗传算法讲解
遗传算法(Genetic Algorithm,GA) 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传和变异等作用机制,实现各个个体适应性的提高。 基因型 (G…...

PostgreSQL修炼之道之高可用性方案设计(十六)
20 高可用性方案设计(一) 在一个生产系统中,通常都需要用高可用方案来保证系统的不间断运行。本章将详细介绍如何实现PostgreSQL数据库的高可用方案。 20.1 高可用架构基础 通常数据库的高可用方案都是让多个数据库服务器协同工作࿰…...

Bybit面经
缘起 V2EX有广告内推,看描述还挺不错 贴主5 年半工作经验,有两年大厂工作经历,20 年 11 月来到新加坡分公司开始工作 后来是猎头Jeff找的我 0318 主面 主要一个面试官是后端开发金融背景 某条金融线的负责人;其余是交叉面试。面…...

GORM---创建
目录 模型定义使用Create创建记录一次性创建多条数据批量插入数据时开启事务默认值问题 模型定义 定义一个PersonInfo结构体。 type PersonInfo struct {Id uint64 gorm:"column:id;primary_key;NOT NULL" json:"id"UserName string gorm:"co…...

高级查询 — 分组汇总
关于分组汇总 1.概述 将查询结果按某一列或者多列的值分组。 group by子句 分组后聚合函数将作用于每一个组,即每一组都有一个函数值。 语法 select 字段列表 from 表名 where 筛选条件 group by 分组的字段;select 字段列表 from 表名 group by 分组的字段 hav…...

【多线程】阻塞队列
1. 认识阻塞队列和消息队列 阻塞队列也是一个队列,也是一个特殊的队列,也遵守先进先出的原则,但是带有特殊的功能。 如果阻塞队列为空,执行出队列操作,就会阻塞等待,阻塞到另一个线程往阻塞队列中添加元素(…...

python2升级python3
查看当前版本 [roottest-01 node-v18.16.0]# python -V Python 2.7.5 安装依赖 [roottest-01 node-v18.16.0]# yum install -y gcc gcc-c zlib zlib-devel readline-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base…...

Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
背景 之前讨论的都是’hoodie.datasource.write.operation’:bulk_insert’的前提下,在这种模式下,是没有json文件的已形成如下的文件: /dt1/.hoodie_partition_metadata /dt1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_202305282…...

Java之旅(九)
Java 循环语句 Java 中的循环语句包括 for、while 和 do-while,它们都可以用于实现循环结构。 for 语句用于循环执行一段代码块,直到给定的条件表达式的布尔值为 false。 for 语句的一般格式如下: for (initialization; condition; update…...

6年测试经验之谈,为什么要做自动化测试?
一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…...

二分法的边界条件 2517. 礼盒的最大甜蜜度
2517. 礼盒的最大甜蜜度 给你一个正整数数组 price ,其中 price[i] 表示第 i 类糖果的价格,另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...

java设计模式(十六)命令模式
目录 定义模式结构角色职责代码实现适用场景优缺点 定义 命令模式(Command Pattern) 又叫动作模式或事务模式。指的是将一个请求封装成一个对象,使发出请求的责任和执行请求的责任分割开,然后可以使用不同的请求把客户端参数化&a…...

[运维] iptables限制指定ip访问指定端口和只允许指定ip访问指定端口
iptables限制指定ip访问指定端口 要使用iptables限制特定IP地址访问特定端口,您可以使用以下命令: iptables -A INPUT -p tcp -s <IP地址> --dport <端口号> -j DROP请将 <IP地址> 替换为要限制的IP地址,将 <端口号&g…...

JS学习笔记(3. 流程控制)
1. 分歧 1.1 if条件 if (条件) {...} // 为真则执行,单条语句可省略大括号 if (条件) {...} else {...}// 为真则执行if,否则执行else if (条件1) {...} else if (条件2) {...} else {...} // 条件1为真则,条件2为真则,否则执…...

遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程
详情点击链接:遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程 一:平台及基础开发平台 GEE平台及典型应用案例; GEE开发环境及常用数据资源; ChatGPT、文心一言等GPT模型 JavaScript基础; GEE遥感云重…...