mvc3网站上传到空间,在线制作印章图片,文字设计图片在线生成,翰诺网站建设文章目录 RPCRPC架构和工作流程为什么有了HTTP还要用RPC底层协议数据格式连接管理错误处理 使用场景常见的RPC框架 Web应用框架主要功能常见的Web应用框架Spring Boot (Java)Django (Python)Express.js (Node.js) Redis主要特点应用场景缓存问题Redis集群架构主从复制Redis Clu… 文章目录 RPCRPC架构和工作流程为什么有了HTTP还要用RPC底层协议数据格式连接管理错误处理 使用场景常见的RPC框架 Web应用框架主要功能常见的Web应用框架Spring Boot (Java)Django (Python)Express.js (Node.js) Redis主要特点应用场景缓存问题Redis集群架构主从复制Redis Cluster RPC
RPC是一种通信协议 他可以让程序在不同的计算机上调用彼此的程序或者服务 就像本地调用函数一样调用远程服务器的服务
RPC框架负责底层的网络通信 序列化和反序列化数据 错误处理
这样我们在开发的过程中就不再需要重复造轮子了 这和reactor一样只是一种编程思想
各家公司一般都有自己的RPC框架
RPC架构和工作流程
RPC的工作流程很简单 客户端调用客户端调用本地的一个代理函数stub负责将请求参数序列化然后发送到服务器 代理函数stub是负责客户端和服务器之间的通信 主要是为远程服务调用提供的一个本地接口 把远程调用的过程隐藏起来 他的内部处理功能就是序列化与反序列化 错误处理 返回结果 这种代理函数也支持多种编程语言 让不同语言的服务也能够通信 网络传输 服务处理服务端接收代理函数的请求 反序列化参数 调用相关服务 响应返回 客户端接收 我们可以在很多地方都看到这种思想 例如MySQL的客户端和服务端分离 RabbitMQ的客户端服务端分离
客户端负责的起始就只有把请求按要求进行序列化和传递请求给服务端 真正运行复杂服务的是服务端
这里就有了两种调用方式 同步调用和异步调用
大家基础好的话看到这两个词就能明白是什么意思 同步调用就是阻塞等待返回结果 而异步调用不等待结果直接继续执行
为什么有了HTTP还要用RPC
这两者的共同点都是完成了一个请求与响应的过程
HTTP的协议很简单易用 用途也很广泛 但是RPC更加适用于这种远程调用的过程
底层协议
RPC的底层协议是TCP/IP协议 而HTTP协议是TCP协议
RPC下面可以使用TCP和UDP 也可以使用其他的自定义协议
但是HTTP是只能使用TCP了 在一些高性能低延迟条件下还是RPC更胜一筹 不用每次都三次握手四次挥手
数据格式
RPC主要是用二进制格式数据例如protobuf 让数据的传输更加安全高效
特性ProtobufJSONXML数据体积小二进制格式大文本格式更大带有大量标记解析速度快二进制格式较慢基于字符串解析更慢带有复杂的结构可读性不可读人类可读人类可读向后兼容性支持未识别字段被忽略支持但需要注意字段命名支持但 XML 复杂性较高多语言支持强支持多种编程语言较强流行语言都有支持较强但通常处理较复杂
而HTTP主要是用文本格式的数据 JSON或者XML进行数据交换 虽然也支持二进制传输 但是会导致更大的数据体积 因为传统的HTTP通信时是要求以文本形式进行传输的 当传输二进制数据时就要求其转换为一种文本表示 常见的就是Base64编码 结构化的JSON和XML的文本格式开销也很大 对于大型的结构化数据也不是很友好 连接管理
当请求很多时 长连接的效率就很高 可以同时发送很多请求
而传统的HTTP则使用短连接 会频繁的建立和关闭连接
错误处理
学过HTTP协议的错误处理都知道 这个玩意的错误机制是不太好的 客户端要根据状态码的不同处理不同的错误情况
使用场景
微服务架构 在微服务架构中 各个服务之间需要频繁互动高性能应用 快速响应和低延迟应用分布式系统 多个不同地域的服务器进行数据交互与服务调用
常见的RPC框架
gRPCgoogle开发的 支持多种语言 基于HTTP/2协议Apache Thrift 支持多种语言的RPC框架 灵活性高 适合构建跨语言的分布式服务Apache Dubbo 高性能的Java RPC框架 提供服务治理功能 适用于微服务架构Hessian 轻量级的二进制RPC框架 适用于Java和其他编程语言的通信
Web应用框架
Web应用框架是用于开发Web工具集 简化开发的流程 可以快速的构建起web应用
如果有学过Python的同学可以尝试上手一下flask或者django还挺好玩的
主要功能 请求路由将用户请求的 URL 与相应的控制器或方法映射起来。 控制器指的是用于接收用户请求并对其进行处理的部分 控制用户的业务流程 中间件支持在请求到达控制器之前和返回响应之前执行特定操作。 模板引擎用于生成动态 HTML 页面或返回 JSON 数据。 数据库交互提供与数据库的集成方式简化数据的 CRUD创建、读取、更新、删除操作。 身份验证和授权简化用户登录、会话管理和权限控制。 安全特性帮助抵御常见的 Web 安全攻击例如 SQL 注入和跨站脚本攻击XSS。
常见的Web应用框架
Spring Boot (Java)
Spring Boot 是 Java 生态中最流行的 Web 应用框架之一它基于 Spring 框架简化了 Spring 应用的配置和部署。Spring Boot 通过“开箱即用”的默认配置使得开发者可以更快地搭建 Web 应用而不必关心大量的 XML 或 Java 配置
主要特点
自动配置Spring Boot 可以根据项目的依赖自动配置常用的组件如数据库、消息队列等。嵌入式服务器支持嵌入式的 Tomcat、Jetty 或 Undertow简化应用的打包和部署。广泛的生态支持与 Spring 家族的其他组件如 Spring Security、Spring Data无缝集成。
适用场景
适合需要构建复杂的企业级应用和微服务架构的项目。
Django (Python)
Django 是一个 Python 框架以“快速开发”和“代码重用”而著称。它遵循“Django 管理后台”的理念提供了一个完备的后台管理界面开发者可以快速上手并生成高效的 Web 应用。
主要特点
全栈框架内置 ORM对象关系映射、身份认证、模板引擎等功能几乎涵盖了 Web 开发的各个方面。安全性Django 内置了很多安全特性帮助开发者防范常见的 Web 攻击。高度抽象化通过简化数据库操作和 URL 路由使开发者能够以极少的代码实现复杂功能。
适用场景
快速原型设计和中小型 Web 应用特别是涉及数据库驱动的项目。
Express.js (Node.js)
Express.js 是一个极简的 Node.js Web 应用框架。它非常轻量提供了路由和中间件支持使得开发者可以根据需求灵活构建 Web 应用或 API 服务。
主要特点
轻量化和灵活性没有过多的封装开发者可以自由选择各种库和中间件。丰富的中间件生态通过 Express 中间件可以轻松扩展功能如日志记录、身份验证、错误处理等。异步编程模型基于 Node.js 的非阻塞 I/O 模型适合高并发场景。
适用场景
单页应用SPA、RESTful API 和实时应用如 WebSocket 应用。
CppCMS
CppCMS 是一个开源的高性能 Web 框架专为高负载的 Web 应用程序设计。它的特点是通过低级别的 C 优化提供了类似于 Python 的 Django、Ruby on Rails 的框架特性但性能更高。
主要特点
高性能专为处理高并发、高流量而设计擅长于处理静态内容、动态页面生成和缓存管理。模板引擎提供了自己的模板引擎支持动态 HTML 内容的生成。会话管理和认证内置会话管理机制支持用户认证和授权。I18N 支持支持国际化I18N方便多语言 Web 应用的开发。
适用场景
高并发、大流量的 Web 服务。需要细粒度性能优化的 Web 应用。
Redis
Redis是一个基于内存的NoSQL数据库 通常用于缓存和消息队列 在现代分布式系统和高并发应用中不可或缺 性能高 数据结构丰富 使用灵活
主要特点 键值对存储Redis 以键值对的方式存储数据所有的数据都存储在内存中。 高性能由于在内存中进行数据存取读写速度极快。 丰富的数据结构Redis 支持多种复杂的数据结构包括字符串、哈希、列表、集合和有序集合等。 持久化Redis 支持通过快照Snapshot和 AOFAppend Only File进行数据持久化。 快照将内存中的数据定期保存到硬盘中 生成一个RDB文件 AOF对Redis数据的写操作以日志的方式追加到文件中 当重启时可以通过操作日志来恢复数据 有点像MySQL的数据备份 分布式集群Redis 支持分片和复制提供高可用性和扩展性。
应用场景
缓存这也是最常见的应用场景之一显著加快数据的读取速度 减少数据库的负担存储会话分布式系统中存储多个服务器的会话 确保多个应用服务器能够访问同一份会话数据队列存储通过列表、发布订阅功能 做一个轻量级的消息队列系统 适用于任务分发和和异步处理分布式锁Redis的单线程特性和高性能 可以用于分布式系统的锁管理
缓存问题 缓存击穿 当高频访问的热点数据突然失效时 大量请求会涌入数据库 可以通过互斥锁或者请求合并的方式 确保只有一个请求访问数据库 其他请求等待缓存重新设置 内存穿透 当恶意请求频繁访问查询不存在的键时 会直接访问数据库 可以使用布隆过滤器来预先判断这个请求是否应该访问数据库 减少无效查询 缓存雪崩 大量数据同时失效时 会有大量请求涌入数据库 对系统造成巨大压力 主要有下面的方法 设置不同的过期时间 确保缓存不会同时失效增加随机事件双缓存 使用本地缓存和Redis缓存的双层架构 减少Redis失效的压力
Redis集群架构
这是一种将多个Redis组合在一起实现高可用性和高性能的分布式架构
将数据分片存储在多个主节点上 实现负载均衡 故障转移 自动扩展
这里有两种集群架构
主从复制
每个主节点可以有一个或者多个从节点从节点用于备份主节点的数据可以在主节点故障时自动升级为新的主节点
Redis Cluster
这个架构可以让数据通过哈希槽分到不同的主节点上 保证集群的容错能力
可以进行自动分片 负载均衡 并且在主节点挂了的适合进行故障转移 哈希槽Hash Slot是一种机制 Redis将所有的键用键来算编号映射到固定数量的哈希槽上 每主节点负责一定数量的哈希槽 这样来实现负载均衡