学习笔记-并发

一、Java高并发解决方案

详细见:Java高并发解决方案 - 动力节点

Java高并发解决方案_程序员阿九不喝酒的博客-CSDN博客_java怎么解决高并发问题

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 协议进行传输的。  网络层?

如何实现并发调用多个RPC接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值