一、系统工作负载伸缩
后台服务的实例能够通过服务的压力动态或者静态新增删除资源。
1、主动伸缩(预测流量)
通过对历史CPU、内存等资源的消耗情况进行采集,然后通过机器学习等方式预测出在固定的某些时间点或者事件触发后的流量变化情况,最后根据预测的情况配置应用程序的伸缩。该方案是通过主动调整伸缩策略从而达到降低延迟并避免中断的目的。
2、被动伸缩(突发流量)
根据对突发流量进行监控,设置系统阈值,进行自动负载伸缩。
二、系统高可用设计
系统通过冗余数据+故障转移实现系统的高可用,机房配置两地三中心的部署架构。
DNS层:通过配置多个实例ip,结合vip+keeplive实现DNS层的故障转移;
应用层:通过使用配置多个容器实例,结合负载均衡+心跳检测实现应用层的高可用;
数据层:通过主从冗灾架构模式,通过切换域名的IP或者MHA实现主从架构的切换。
三、系统性能优化
系统出现性能问题主要的影响因素有如下几个,1.高并发量的请求;2.服务器带宽瓶颈;3.客户端带宽瓶颈;4.长事务或者大量数据的查询。针对影响性能的因素,有如下的几个性能优化措施:
1、高并发请求优化思路
-
通过客户端浏览器缓存加载频繁的请求页面;
-
使用CDN做动静数据的分离查询;
-
服务层使用利用缓存服务器(例如:Redis)来应对频繁的查询;
2、服务器宽带瓶颈优化思路
-
增加网络带宽
3、客户端带宽瓶颈
-
增加友好的交付方式
4、长事务或者大量数据查询
-
通过对大量数据进行预聚合,然后在进行查询,并长事务进行异步处理等手段
四、使用可替换资源
服务资源可以在不影响应用程序的运行的情况下进行平滑替换,且能够进行动态的引流进行灰度发布。
-
避免使用对服务器IP进行硬编码;
-
尽量确保应用程序无状态。
五、系统松耦合
系统和系统之间直接调用,会让系统之间形成强依赖关系,例如一台服务器出现故障后,那么所有的web服务器都会接受到错误,通过SOA的架构形式,实现系统的松耦合。
-
业务集群和业务集群层松耦合:通过通用的网关服务,进行业务集群和业务集群之间的松耦合;
-
页面层和服务层的松耦合:通过负载均衡实现调用客户端和服务器之间的松耦合
-
服务和服务之间的松耦合:通过将消息发送到队列中,进行服务和服务之间的松耦合。
六、面向服务编程(SOA)
通过根据业务流程拆解流程节点,将各个流程节点进行独立开发、测试、部署等,从而实现系统的低耦合、独立伸缩的能力。
采用DDD做服务拆分,SpringCloud或者Dubbo做服务框架、zk(AP)、eureka(CP)、Nacos(AP&CP)做服务的注册中心等。
七、数据存储的选择
数据库的选择主要根据查询的快慢、事务的一致性、数据的结构、存储数据的大小等情况进行数据存储的选择。
事务性&结构化数据:MySql、Oracle等
高并发&大量数据:Hbase
查询条件复杂:需要大量关键字搜索查询:ES
分析性数据库:ClickHouse
高并发&数据量少:Redis
八、环境约束
在设计适合最适合的技术架构的同时,还需要兼顾架构的落地,这个时候,需要考虑系统所处的环境条件,包括:成本、时间、资源、范围等要素,如何平衡这些关系直接影响了项目是否能正常落地。
-
采用需求优先级排序,快速迭代出一个MVP最小价值产品,快速交付,在此基础上根据业务的发展做演进。
九、安全性
安全是系统架构设计中,最重要的方面之一。以下是在设计阶段需要考虑的几个安全要素:
-
未授权访问(JWT、Outh2.0)
-
敏感数据查询(姓名、电话、地址等)
-
数据传输(HTTPS)
-
安全监控(对访问异常的情况进行监控)
十、自动化开发部署流程
通过自动化的手段,处理事务性操作,避免人为操作导致的失误,从而提高系统生成效率、降低操作风险。
测试自动化:对测试用例进行沉淀,然后编写测试用例自动化执行脚本;
IT基础设施:通过Iac自动化的脚步,快速构建服务、实例等IT基础设施;
监控自动化:通过它对系统的日志进行收集、监控、依据阈值设置形成告警;
部署自动化:通过CI/CD,实现代码拉取、测试环境构建、生产部署自动化执行;
安全自动化:通过对访问异常监控,基于机器学习等技术分析数据,进行安全的检测和告警。