目录
一个系统的架构是一个不断演进的过程,而不是一步到位过度设计。架构图分享地址:http://huatu.qianglihuifu.com/lct/#R3d07b99d3c31d68890eae3c7486e4c23
单体应用
单体应用阶段:web服务端功能和mobile移动端API接口都在同一个项目中进行部署,在App端使用频繁时段,会造成后端web管理界面打不开的情况,造成程序处于假死状态。
采用优化手段:JVM调优,Tomcat调优,数据库连接池优化,Nginx限流;但这些方法不能从根本上解决web端高峰时段正常使用。
集群服务
有了单体服务的糟糕体验之后,我们将原有代码进行了拆分作为两个独立的服务使用负载均衡模式来提升用户体验。
采用集群模式部署,就需要引入分布式解决方案,比如我们的本地缓存换成了Redis,另外还需要解决web后台的SESSION共享和移动端登录的Token存储管理,这些都可以通过Redis缓存服务得到解决。
Redis的四种常用模式:
1.单机
如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个G,单机足够了
2.主从
master节点挂了以后,redis就不能对外提供写服务了,因为剩下的slave不能成为master,下面增加哨兵目的就是提高redis高可用
3.主从+哨兵
replication,一个mater,多个slave,要几个slave跟你的要求的读吞吐量有关系,然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了
4.cluster集群
redis cluster,主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster
- 自动将数据进行分片,每个master上放一部分数据
- 提供内置的高可用支持,部分master不可用时,还是可以继续工作的
注意:需要考虑解决Nginx和Redis单点故障问题。Nginx高可用可以使用多个Nginx冗余部署keepAlived故障转移等,Redis常用的方式是Sentinel哨兵模式。
内外网集群
内外网部署模式扩展了内网管理人员的热点数据共享,以方便内外即时查看巡护平台作业数据情况和人员在线情况。
注意:Redis和Mysql数据库是做了端口映射的,可以认为这部分数据内网是可以访问的。
微服务演进
使用Spring Cloud Alibaba微服务体系为主:
- 网关:Spring Cloud Gateway
- 熔断、限流、降级:Sentinel
- 服务配置、注册与发现:Nacos
- 自动伸缩:K8s服务管理
- 数据库:主从-读写分离
- 缓存服务:Redis哨兵模式