Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api

        规范:

  • post delete put get 增删改查
  • 路径 接口命名 
  • 过滤信息
  • 状态码

2、软件开发流程

3、命名规范 

  • 类名:驼峰
  • 方法名:驼峰
  • 成员变量、局部变量:驼峰
  • 测试方法名:蛇形命名 下划线_ 连接,全部小写
  • 常量、枚举名称:蛇形命名 全部大写
  • 项目文件夹:连接符  串式命名
  • 包名: 用. 连接
  • 抽象类命名:用Abstract开头
  • 异常类: 以Exception结尾
  • 测试类:以Test结尾

4、重构:提升代码&架构的灵活性/可扩展性以及复用性   重构的最终目标是 提高软件开发速度和质量 。

5、认证授权

  • 多服务器节点下session-cookie方案怎么做? 某个用户的所有请求都通过特性的哈希策略分配给同一服务器处理
  • 如何防止CSRF(跨站请求伪造)攻击?使用token,存储在localStorage

6、JWT(json web token)

  • 自身包含了身份验证所需要的所有信息,服务器不需要存储session信息,减轻了服务器的压力 
  • header  (令牌类型,jwt;签名算法)payload(注册声明) signature(用secret对前两部分进行的签名)
  • 用户登录,服务端校验生成JWT,以后每次访问都带上这个JWT,服务端检查JWT并从中获取用户相关的信息
  • 为什么没法篡改呢?JWT 安全的核心在于签名,签名安全的核心在密钥
  • 优点:无状态、可以防止CSRF攻击、单点登录良好、适合移动端应用
  • 缺点:不可控、注销登录等场景下JWT还有效 、续签问题、体积太大
  • 解决方案:注销登录等场景下JWT还有效——将JWT存入数据库、黑名单机制
  • 续签问题——JWT的有效期一般都建议设置的不太长

7、数据安全

  • 哈希算法是一种用数学方法对数据生成一个固定长度的唯一标识的技术,可以用来验证数据的完整性和一致性,常见的哈希算法有 MD、SHA、MAC 等。
  • 对称加密算法是一种加密和解密使用同一个密钥的算法,可以用来保护数据的安全性和保密性,常见的对称加密算法有 DES、3DES、AES 等。
  • 非对称加密算法是一种加密和解密使用不同的密钥的算法,可以用来实现数据的安全传输和身份认证,常见的非对称加密算法有 RSA、DSA、ECC 等。

8、系统设计

  • 具体需求(要实现的功能,指标)——设计——后续优化方向

9、性能指标

  • RT 响应时间就是用户发出请求到用户收到系统处理结果所需要的时间。
  • 并发数可以简单理解为系统能够同时供多少人访问使用也就是说系统同时能处理的请求数量。
  • QPS(Query Per Second) :服务器每秒可以执行的查询次数;
  • TPS(Transaction Per Second) :服务器每秒处理的事务数
  • 吞吐量指的是系统单位时间内系统处理的请求数量
  • 高并发简单来说就是能够同时处理很多用户请求。
  • 高性能简单来说就是处理用户的请求速度要快。
  • 高可用简单来说就是我们的系统要在趋近 100% 的时间内都能正确提供服务。
     

 10、系统活跃度指标

  • PV 访问量, 即页面浏览量或点击量
  • UV 独立访客,统计1天内访问某站点的用户数。
  • DAU 日活跃用户数量
  • MAU 月活跃用户数量

11、性能测试软件

  • Jmeter:Apache JMeter 是 JAVA 开发的性能测试工具
  • ab :全称为 Apache Bench 。Apache 旗下的一款测试工具,非常实用
     

12、性能优化的方向

SQL优化,JVM、DB,Tomcat参数调优 > 硬件性能优化(内存升级、CPU核心数增加、机械硬盘—>固态硬盘等等)> 业务逻辑优化/缓存 > 读写分离、集群等 > 分库分表
 

13、性能测试分类

  • 性能测试
  • 负载测试:资源达到上限
  • 压力测试:   直到服务器崩溃
  • 稳定性测试

14、高可用

黑客、硬件故障、高并发量等

对策:代码质量;集群化;限流;超时和重试机制;熔断机制;异步调用;使用缓存;监控报警;注意备份,必要时回滚;灰度发布;

限流

简单窗口计数:实现简单 到那时限流速率不够平滑;无法应对激增的流量

滑动窗口计数

Guava 的RateLimiter

redis+Lua 减少网络消耗 保证原子性

超时重试1500ms  Guava Retrying 

降级:服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。

熔断:熔断是应对微服务雪崩效应的一种链路保护机制 A-B-C C出问题 这条路就应该及时断掉

降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。
15、高性能

(1)CDN 内容分发网络 静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。全站加速:既可以加速静态资源又可以加速静态资源

回源——CDN节点上资源没有,从原始服务器获取最新的资源

预热——在CDN上提前将内容缓存到CDN节点上

那怎么知道CDN内容存储在哪里呢?  GSLB 全局负载均衡  CDN 会通过 GSLB 找到最合适的 CDN 节点。

(2)负载均衡 

Nginx

算法:随机法 ;轮询法

怎么做?DNS解析 

反向代理 :客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 地址。反向代理“代理”的是目标服务器,这一个过程对于客户端而言是透明的。

(3)数据库优化

  • 读写分离:将对数据库的读写操作分散到不同的数据库节点上   如何实现? 代理:MySQL Router  自动分辨对数据库读写操作并把这些操作路由到正确的实例上     组件sharding-jdbc 

主从复制 binlog

主从延迟 等一会再读 或者把压力给到主服务器

  • 分库分表 解决MySql 的存储压力                                                                                             单表的数据达到千万级别以上,数据库读写速度比较缓慢。数据库中的数据占用的空间越来 越大,备份时间越来越长。

按照业务垂直分库  水平分库

分表就是对单表的数据进行拆分   垂直分表(按列)水平分表

手动 ShardingSphere 自动TiDB

(4)数据冷热分离 

时间维度、频率维度

冷数据存储方式 中小厂:MySQL/PostgreSQL  大厂:Hbase(常用)

(5)优化SQL

16、设计模式

17、定时

  • Timer 单线程 执行这个任务就不能执行其他的了  无法使用cron表达式执行定时任务
  • ScheduledThreadPoolExecutor 线程池  无法使用cron表达式执行定时任务
  • spring task 是spring提供的,利用@scheduled就可以实现利用cron表达式进行定时任务 但是只适合单机
  • 分布式定时框架 XXL-JOB 调度中心和执行器两部分组成。调度中心主要负责任务管理、执行器管理以及日志管理。执行器主要是接收调度信号并处理。另外,调度中心进行任务调度时,是通过自研 RPC 来实现的。 @XXLJOB()
  • Redis 和 MQ 虽然可以实现分布式定时任务,但这两者本身不是专门用来做分布式定时任务的,它们并不提供较为完整和强大的分布式定时任务的功能。而且,两者不太适合执行周期性的定时任务,因为它们只能保证消息被消费一次,而不能保证消息被消费多次。因此,它们更适合执行一次性的延时任务,例如订单取消、红包撤回。实际项目中,MQ 延时任务用的更多一些,可以降低业务之间的耦合度。

18、RPC

 RPC 的出现就是为了让你调用远程方法像调用本地方法一样简单

更多用于Client/Server (C/S) 架构   定制化程度高,更简单的保存结构体数据

19、kafka

  •  分布式流式处理平台  消息队列  异步 削峰 解耦
  • 主要优点:批量处理 异步 生态系统的兼容性
  • 发布-订阅模式 都可以订阅消息 
  • kafka的
  • kafka的多副本机制,其实就是相当于分区的多个副本,有leader,有follower,leader挂了,还有follower,提高了容灾能力
  • 多分区的好处:特定的topic有多个分区,各个分区又可以分布在不同的broker上,这样能提供更好的并发能力
  • kafka如何保证消息的顺序性:一个topic只对应一个分区  还可以通过设置key保证消息分发到一个分区
  • kafka如何保证消息不丢失:消费消息的时候丢失 每次真正消费完消息之后再自己手动提交offset  但是也可能消费完消息了还没手动提交挂了 就会导致消息的重复消费
  • 丢失问题:假设leader所在的broker突然挂掉,需要从follower中挑选一个晋升为leader 可以设置acks=all  代表所有的副本接收到消息   设置replication.factor>=3 分区中包含3个以上的副本   min.insync.replicas>1 消息至少被写入2个以上的副本才算的是成功发送
  • 消息不重复消费:幂等校验  比如 Redis 的 set、MySQL 的主键等天然的幂等功能
  • Kafka 消费者在默认配置下会进行最多 10 次 的重试,每次重试的时间间隔为 0,即立即进行重试。如果在 10 次重试后仍然无法成功消费消息,则不再进行重试,消息将被视为消费失败。
  • 消费失败 重试也不能消费的消息会加入到死性队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 点云三角化定义 原文 说人话: 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合: 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一.前言二.展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三.思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能:2.减小程序体积&am…

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构,该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构,无序,且不可以重复,元素可以为null,但是也只能出现一次,如下图: 1.3.1、HashSe…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度(dfs)优先遍历&优先搜索 5.2宽度(bfs)优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包,没有解决风控的能力,如果有需要建议大家自己学习一套技术,把技术掌握在自己手里,这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

【NLP自然语言处理】为什么说BERT是bidirectional

首先,来看一下Transformer架构图: 我们知道,Bert设计时主要采用的是Transformer编码器部分,要论述Bert为啥是双向的,我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前,需要对Transformer有一定的…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现(野指针)insert实现(迭代器位置意义改变)insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

MyBatis-Plus的基本使用(一)

目录 前言 特性 MyBatis-Plus入门案例 常用注解 小结 前言 这篇文章主要来学习MyBatis-Plus这个非常强大的框架. 在学习MyBatis-Plus之前,需要有MyBatis的学习基础.因为MyBatis -Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变&#x…

【Java Bean 映射器】通过 MapStruct 和 BeanUtils 拷贝对象的区别

目录 👋前言 👀一、环境准备 🌱二、拷贝工具使用 2.1 BeanUtils 使用 2.2 MapStruct 使用 💞️三、对比 📫四、章末 👋前言 小伙伴们大家好,最近在一些技术文章中看到了开发时经常接触的对…

面向对象·回顾;万类之祖object;抽象类Abstract。

回顾面向对象 类与对象 类--------(instance实例化对象)-------->对象 类图 调出你public方法–接口 访问控制符 常用private,public。 封装 可见性本类包不同包private✓✕✕不写dafalt(默认)✓✓✕protected✓✓继承✓public✓✓✓…

【计算机网络】RIP路由协议实验

一:实验目的 1:掌握在路由器上配置RIPv2。 二:实验仪器设备及软件 硬件:RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为:三层交换机1台、路由器2台。 软件:wireshark软件、记…

01-调试开发k8s

使用 Docker 构建 Kubernete 官方 release 是使用 Docker 容器构建的。要使用 Docker 构建 Kubernetes,请遵循以下说明: Requirements docker Key scripts 以下脚本位于 build/ 目录中。请注意,所有脚本都必须从 Kubernetes 根目录运行 build/run.…

【科研绘图】记录一次论文结果复现

复现原论文中的图片是科研的基本功之一,它不仅验证了研究结果的可靠性,确保了科学工作的准确性和可重复性,还深刻地评估了方法的有效性,体现了对原始研究的尊重和对科学过程的严谨态度。这个过程不仅提高了研究的透明度&#xff0…

记忆注意力用于多模态情感计算!

记忆注意力用于多模态情感计算! 目录 情感计算 一、概述 二、研究背景 三、模型结构和代码 六、数据集介绍 七、性能展示 八、复现过程 九、运行过程 模型总结 本文所涉及所有资源均在传知代码平台可获取。 情感计算 近年来,社交媒体的快速扩张推动了用户…

信通院发布!首个大模型混合云标准

近日,中国信通院发布了首个大模型混合云标准,通过定位当前大模型混合云的能力水平,为基于混合云的大模型服务实践提供指引,并明确未来提升方向。同时,中国信通院基于标准展开大模型混合云能力成熟度专项测试&#xff0…

智能家居全在手机端进行控制,未来已来!

未来触手可及:智能家居,手机端的全控时代 艾斯视觉的观点是:在不远的将来,家,这个温馨的港湾,将不再只是我们休憩的场所,而是科技与智慧的结晶。想象一下,只需轻触手机屏幕&#xf…

VMware 上的 Debian Linux 虚拟机无法听到蓝牙耳机的声音解决方案

项目场景: 在Debian上安装QQ音乐,用来摸鱼 问题描述 在安装完QQ音乐后,发现虚拟机无法听到声音,音乐有在正常播放,但是蓝牙耳机没有听到任何声音: 原因分析: 感觉是虚拟机的声卡没有配置&…

WiFi通信——STM32通过ESP8266-01S与阿里云通信

嵌入式设计中常用的无线通信方式主要由蓝牙、WiFi、Zigbee、Lora、NB-IOT等等。这些是最常用的,也是在实际项目开发中根据项目的数据通信特点来选择相应的无线通信方式。本设计主要是讲解WiFi在嵌入式开发中的使用。 1.ESP8266的三种模式 1.1 STA模式(Station) 工…