java中的高性能

读写分离:

将数据库的读写操作分配到不同的数据库节点上,一般情况下,我那么都会选择一主多从,一台主数据库负责写,其他从数据库负责读。读写分离对提升数据库的并发非常有效,但是同时会发生问题,当主数据库写入数据时,主库和从库同步数据存在一定延迟,这就可能导致数据不一致的情况,这就是主从同步延迟。

主从同步延迟解决方案:1、强制将读操作请求由主库处理 2、延迟读取

如何实现读写分离:

1、部署多台数据库,选择一台作为主数据库,其他作为从数据库
2、保证主数据库和从数据库之间数据实时同步,这个过程就是主从复制。
3、系统将写请求交给主数据处理,读操作交给从数据库处理。

落实到项目中:

1、代理方式:在应用和数据之间加一个代理层。应用程序将所有数据交给代理层处理,代理层处理读写请求,将他们路由到对应数据库中。类似中间件代理层有 MyCat等。
2、组件方式:引入第三方组件实现读写请求,推荐使用sharding-jdbc,直接引入jar包即可使用。

主从复制步骤:

1、主库将数据库变化写入binlog中
2、从库连接主库
3、从库会创建一个I/O线程向主库请求更新的binlog
4、主库会创建一个binlog dump线程来发送binlog,从库的I/O线程负责接收
5、从库的I/O线程将接收到的binlog写入到 relay log中。
6、从库的SQL线程读取relay log同步数据本地(意思是执行一遍sql语句)

分库分表:
读写分离主要解决的是数据库读并发,没有解决数据库存储问题。数据库数据流量过大就需要分库分表。
分库:就是将数据库中的数据分散到不同的数据库上。
分表:对单表数据进行拆分,水平拆分(对数据表行进行拆分)和垂直拆分(对数据表列进行拆分)。

什么情况分库分表:
1、单表数据达到千万,影响读写操作建议分表
2、数据库中数据占用空间越来越大,备份时间长建议分库
3、应用的并发量太大。建议分库

分库分表影响:
1、join操作 2、事务操作 3、分布式id(数据遍布在不同服务器上,自增主键已不能满足,需要为系统引入分布式id)

负载均衡:通常用于将任务比如用户请求处理分配到多个服务器处理以提高网站、应用或者数据库的可靠性和性能。
常见的负载均衡系统:1、DNS常用于地理级别的均衡 2、硬件负载均衡通过单独的硬件来处理负载均衡F5 3、软件负载均衡 通过负载均衡软件来实行nginx。

你可能感兴趣的:(java进阶,java-ee)