1.开启分布式缓存Redis,开启阿里云OSS对象存储或分布式文件系统FastDfs来单独管理文件,单机环境升级为集群环境,通过多台机器来提高请求处理的最大并发数。
- 安装Redis服务。
- 更改配置文件中的缓存类型。
#缓存类型,ehcache(默认)、redis
cache:
type: redis
- 更改配置文件中的Redis配置信息。
spring:
#Redis服务器IP
redis:
host: 127.0.0.1
#Redis服务器连接端口
port: 6379
#Redis服务器连接密码
password: test
jedis:
pool:
#连接池最大连接数(使用负值表示没有限制)
max-active: 8
#连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 1
#连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8
#连接池中的最小空闲连接
min-idle: 0
#连接超时时间(毫秒)
timeout: 30000
- 开启阿里云OSS对象存储(与FastDfs开启二选一)。
pic:
save:
type: 2 #图片保存方式, 1不保存,使用爬取的网络图片 ,2保存在自己的存储介质
storage: OSS #存储介质,local:本地,OSS:阿里云对象存储,fastDfs:分布式文件系统
path: /var/pic #图片保存路径
#OSS
novel:
file:
endpoint: oss-cn-shenzhen.aliyuncs.com #不同的服务器,地址不同
key-id: dhjjrue6767778878 #去OSS控制台获取
key-secret: dssdkkrkelrkellk44554 #去OSS控制台获取
bucket-name: novel #这个自己创建bucket时的命名,控制台创建也行,代码创建也行
file-host: pic #文件路径
web-url: https://xxyimg.oss-cn-hangzhou.aliyuncs.com #OSS文件的web访问地址
- 开启分布式文件系统FastDfs(与OSS开启二选一)。
pic:
save:
type: 2 #图片保存方式, 1不保存,使用爬取的网络图片 ,2保存在自己的存储介质
storage: fastDfs #存储介质,local:本地,OSS:阿里云对象存储,fastDfs:分布式文件系统
path: /var/pic #图片保存路径
#FastDfs的配置
#读取inputsream阻塞时间
fdfs:
connect-timeout: 600
so-timeout: 1500
#tracker地址
trackerList: 127.0.0.1:22122
#缩略图配置
thumbImage:
height: 150
width: 150
#通过nginx 访问地址
webUrl: http://127.0.0.1/
#获取连接池最大数量
pool.max-total: 200
2.当小说数量和用户规模达到一定级别后,搜索/分类检索功能就会成为系统的性能瓶颈,可以开启ElasticSearch搜索引擎来提高检索速度和减轻数据库压力。
-
安装ElasticSearch搜索引擎服务和Kibana可视化客户端,创建小说索引和属性映射。
-
通过配置文件开启搜索引擎功能。
spring:
elasticsearch:
#是否开启搜索引擎,1:开启,0:不开启
enable: 1
jest:
#ElasticSerch服务地址
uris: http://127.0.0.1:9200
3.当用户规模达到一定量级后(点击小说详情页和内容页均会增加点击量),小说点击量新增的接口会承受巨大的并发压力,数据库和搜索引擎的数据会频繁更新,此时可以通过开启RabbitMq消息队列来进行流量削峰,消息消费者根据实际业务情况平滑处理,小说的点击量先保存在缓存中,每本小说积累10个点击,才会更新一次数据库,每本小说点击量的更新至少间隔一个小时才会同步到搜索引擎中。
- 安装RabbitMq消息服务。
- 通过配置文件开启消息服务。
spring:
rabbitmq:
#是否开启消息队列,1:开启,0:不开启
enable: 1
host: 127.0.0.1
username: guest
password: guest
virtual-host: /novel-plus
template:
# 缺省的交换机名称,此处配置后,发送消息如果不指定交换机就会使用这个
exchange: novel.exchange
publisher-confirms: false
4.数据库分库分表来提高数据库的最大并发量。
- 更新版本至V2.5.0。
来源:oschina
链接:https://my.oschina.net/java2nb/blog/4291830