一。应用优化的口诀,解决大部分问题
1.缓存 :redis, guava cache, openresty lua
2.异步 : 支付宝微信的支付会提供异步回调接口,返回支付结果。支付链路很复杂,耗时长
3.批处理:写操作
二。mysql 单机性能提升 配置
mysql执行变更sql时首先写undo/redo buffer->(write flush) ->undo/redo log,然后再修改文件data buffer->(flush)->data file
1.max_connection=1000 mysql支持的socket 连接,因为有连接池固定会有连接,连接池5个连接最小,四台应用,第五台应用就连不上了,如果为20的话
2.innodb_file_per_table=1 mysql默认是每个database一个file,这样所有表在一个文件,查询的时候寻址就会比较慢。一个表一个文件,寻址就会快
3.innodb_buffer_pool_size=1G 扩大缓存的大小,这样写和度都快
4.innodb_log_buffer_size=16M write ahead log 写日志的缓冲区大小,当日志文件大小达到最大时,需要重命名再写一个新的文件,这个间隙是不能flush日志的,所以buffer不能太小,不然client端不能执行sql
5.innodb_log_file_size=256M 写的日志大小
三。mysql分布式性能优化
主从分布式扩展
1.打开bin log: 修改数据,事务提交时都会写bin log,从机根据bin log版本号来判断是否变化,然后同步过来
2.主从同步账号配置,配置主从同步
可以只读从机,写主机,做到分担压力
问题:
(1)主从机同步不是实时的会慢,比如新建了一个用户,读取时可能没同步过来,读不到。解决方法:可以jdbc驱动强制去读主库
(2)主库内部,undo/redo log与bin log是分布式的事务,undo/redo log成功了但是bin log失败了(磁盘坏了或网络原因),这样mysql也认为事务成功了,所以
bin log不能真正反应主库的实际情况