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

news2024/11/28 11:45:39

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.coloradmin.cn/o/1951804.html

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

相关文章

语言模型及数据集

一、定义 1、语言模型的目标是估计序列的联合概率,一个理想的语言模型就能够基于模型本身生成自然文本。 2、对一个文档(词元)序列进行建模, 假设在单词级别对文本数据进行词元化。 3、计数建模 (1)其中…

AI绘画;喂饭进阶!教你如何用Stable Diffusion生成高清建筑手工模型图,一篇文章搞懂什么是Lora模型和CKPT主模型!

前言 刚接触Stable Diffusion不久的你,是否有这样的疑问: Q1: Stable Diffusion中的主模型CKPT是什么? Q2: Stable Diffusion中的Lora模型又是什么? Q3: 在哪儿可以下载好用的AI绘图模型? Q4: Stable Diffusion 如…

【SpringBoot】2 项目搭建

创建项目 1)确实本地 jdk 版本 打开命令行窗口:快捷键 Windows R,输入 CMD,敲回车 执行命令:java -version 2)在项目 clone 的位置创建 Spring Boot 项目,使用 Maven 进行依赖管理&#xff…

最新爆火的开源AI项目 | LivePortrait 本地安装教程

LivePortrait 本地部署教程,强大且开源的可控人像AI视频生成 1,准备工作,本地下载代码并准备环境,运行命令前需安装git 以下操作不要安装在C盘和容量较小的硬盘,可以找个大点的硬盘装哟 2,需要安装FFmp…

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁? 大疆研发软件团队,致力于把大疆的硬件设备和大疆用户紧密连接在一起,我们的使命是“让机器有温度,让数据会说话”。 在消费和手持团队,我们的温度来自于激发用户灵感并助力用户创作…

聊聊基于Alink库的主成分分析(PCA)

概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分&…

react中useMemo钩子函数的使用

1.使用useMemo前展示 import { useState,useMemo } from "react"function kanno(num){console.log(999,num);return num }function UseMemo(){const [count1,setCount1] useState(0)const [count2,setCount2] useState(0)const result kanno(count1)console.log(…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…

magento2 安装win环境和linux环境

win10 安装 安装前提,php,mysql,apach 或nginx 提前安装好 并且要php配置文件里,php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息,如果ssl信息没有,则可以忽略 填写域名和后台地址&#xff0…

花几千上万学习Java,真没必要!(二十九)

1、基本数据类型包装类: 测试代码1: package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数(parseInt)和Integer对象(valueOf), //将整数转换回字符串(…

Linux下使用gdb进行调试入门级

个人名片: 🎓作者简介:嵌入式领域优质创作者🌐个人主页:妄北y 📞个人QQ:2061314755 💌个人邮箱:[mailto:2061314755qq.com] 📱个人微信:Vir2025WB…

网络通信---UDP

前两天做了个mplayer项目,今日继续学习 网络内容十分重要!!! 1.OSI七层模型 应用层:要传输的数据信息,如文件传输,电子邮件等(最接近用户,看传输的内容类型到底是什么) …

Linux使用mjpg-streamer进行图像传输

图像传输是一项在Linux操作系统中比较常见的一个操作,在视频图传时,一般是采用MJPG-streamer来进行图像传输,本文就以树莓派为例子,来示范一个图像传输。 1.树莓派的摄像头激活 首先更新树莓派 sudo apt-get update sudo apt-ge…

【Java基础语法】字符修改,以及equals的用法

前言: 小编这里将上一期String类型进行了补充,添加了字符串的修改,以及equals的用法内容,和hashcode的使用;上一期:http://t.csdnimg.cn/ijiM6 1.字符串的修改 在上一期中我们说到字符串是不能被修改的&am…

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

目录 1. 问题所示2. 原理分析2.1 RouterFunctionConfiguration 类2.2 SwaggerResourceHandler 类3. 解决方法3.1 网关过滤3.2 去除配置3.3 代码修改4. 彩蛋1. 问题所示 从而也导致资源接口文件泄露 https://xxx/swagger-resources 或者 ip:端口号/swagger-resources 2. 原理分…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法(Least Squares Metho…

ElasticSearch搜索

ES搜索 elastic search 一套搜索引擎技术,主要技术栈包括 Elasticsearch:用于数据存储、计算和搜索 Kibana:用于数据可视化 在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同…

自定义Observal返回数据

在写Angular项目的时候,很多都是用的Observal,但是有时候我们在接口还没好 ,或者处理有些接口我们想要通过方法在observal返回特定的数据,这个时候要我们可以如下处理: 方法一、通过of返回 方法二:通过Observable的cr…

【Rust】所有权OwnerShip

什么是所有权 rust使用由编译器检查的一些规则构成的所有权系统来管理内存。且这不会影响程序的运行效率。 所有权规则 rust中每一个每一个值都有一个owner。在同一时刻,只能有一个owner。当这个owner超过范围,则该值会被丢弃。 String类型 为什么需…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本,请注意分别 1.什么是自动布局组件…