一、Java高并发解决方案
Java高并发解决方案_程序员阿九不喝酒的博客-CSDN博客_java怎么解决高并发问题
1、缓存方案:
浏览器 -> CDN -> Nginx -> Redis -> DB (磁盘、文件系统)
代码组件:Guava、Ehcache
服务器:Redis、MemCache
2、硬件
增加服务器、提高内存、磁盘扩容等
3、静态化
对于一些访问量大,更新频率较低的数据,可直接定时生成静态html页面
4、服务拆分、数据库拆分
按照业务维度进行应用拆分,采用分布式开发
数据库读写分离、分库分表、分区操作
5、动静分离
6、队列
• 采用队列是解决高并发大流量的利器
• 队列的作用就是:异步处理/流量削峰/系统解耦
7、池化
⑴ 对象池
通过复用对象,减少对象创建和垃圾收集器回收对象的资源开销;
可以采用commons-pool2实现;
实际项目采用对象池并不常见,主要在开发框架或组件的时候会采用。
⑵ 数据库连接池
Druid/DBCP/C3P0/BoneCP
⑶ Redis连接池
JedisPool(内部基于commons-pool2 实现)
⑷ HttpClient连接池
⑸ 线程池
Java提供java.util.concurrent包可以实现线程池
Executors.newFixedThreadPool(8);线程数量固定
Executors.newSingleThreadExecutor();只有一个线程,避免关闭情况
Executors.newCachedThreadPool();可以自动扩容
Executors.newScheduledThreadPool(10);每隔多久执行
8、JVM调优
9、数据库调优
二、秒杀举例
三、分布式
07_尚硅谷_环境搭建_管理控制台_哔哩哔哩_bilibili
1、分布式的演变
单一应用
1、扩展不容易
2、服务器压力太大
3、开发不容易
垂直服务架构
每个小系统都是独立的。都有自己的界面、业务层。数据库。每个小系统也可以部署多个服务。
1、界面需求常变更
2、模块会越来越多,应用直接可能互相调用,比如订单要用物理模块、要用用户模块
分布式微服务架构
问题:RPC调用和业务拆分
2、RPC原理
RPC两大核心模块
1、建立连接
2、序列化与反序列化
有dubbo/thrift/等
3、dubbo框架
-
特性
1、服务自动与发现:推荐zk, 动态感知哪些服务器有哪些服务,可以动态添加或者删除服务
2、负载均衡
3、面相接口代理的高性能RPC调用
4、高度可扩张能力:
5、运行期流量调度:灰度发布,比如先选定部分服务器发布,然后全部请求调用这部分新服务
6、可是好服务治理
-
dubbo 架构
-
zookeeper注册中心
-
dubbo ops 可视化监控
Rest 与 RPC
-
Rest
关于RESTful 的概念及与RPC的区别_angus_17的博客-CSDN博客_restful与rpc
1、REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露。
URI 的设计只要负责把资源通过合理方式暴露出来就可以了。REST通过HTTP协议定义的通用动词方法(GET、PUT、DELETE、POST) ,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。
PS:可实际项目中,都用Post,为什么 ?
HTTP动词:
GET 获取一个资源
POST 添加一个资源
PUT 修改一个资源
DELETE 删除一个资源
HTTP状态码
200 OK
400 Bad Request 客户端异常
500 Internal Server Error 服务器异常
举例:
在Restful之前的操作: 请求的地址对应具体的业务操作
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
RESTful用法: 请求
http://127.0.0.1/user/1 GET 根据用户id查询用户数据
http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
http://127.0.0.1/user DELETE 删除用户信息
-
RPC
33.服务之间的调用之RPC、Restful深入理解_郑学炜的博客-CSDN博客
所谓的远程过程调用(面向方法),RPC是分布式架构的核心,按响应方式分如下两种:
1、同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作
同步调用的实现方式有WebService和RMI。
2、异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。
异步调用的JAVA实现版就是JMS(Java Message Service),目前开源的的JMS中间件有Apache社区的ActiveMQ、Kafka消息中间件,另外有阿里的RocketMQ。
进程间通信方式主(远程调用方式)
主要有两种,一种是基于HTTP协议的RESTFul API方式,另一种则是RPC调用。
区别:
REST: HTTP协议 应用层?
RPC: 可以基于 TCP/UDP,也可以基于 HTTP 协议进行传输的。 网络层?