文章目录
架构模式方向优化方式
核心要素性能应用层优化服务层优化数据层优化
可用性应用层优化服务层优化数据层优化软件优化
伸缩性扩展性安全性
架构模式
方向
高内聚、低耦合。便于开发和维护、不同模块分布式部署提高并发能力。业务中台重点需要关注的是性能和可用性。伸缩性、扩展性、安全性需要兼顾。
优化方式
分层。应用的横向切分,做到分散关注、松散耦合、逻辑复用、标准定义。
应用层:具体业务和视图展示,和用户直接交互。服务层:提供服务支持。数据层:提供存储服务,如数据库、缓存、搜索引擎、文件。 分割。应用的纵向切分,通常按照不同业务划分,专人做专事、不同等级保障。分布式。网络稳定性、数据一致性需要考虑。
包括服务应用、静态资源、数据存储、计算、配置、锁、文件的分布式。 集群。负载均衡和失效转移提供并发特效和可用性。缓存。在数据热点不均匀、数据有一定有效期的情况下使用。异步。提高可用性、减少rt、削峰。冗余。包括集群备份、冷热备份、灾备数据中心。自动化。发布过程、代码管理、安全监测、监控、失效转移恢复、降级、分配资源都可以自动化。安全。密码、验证码、加密、过滤、风控等。
核心要素
性能
包括响应时间(rt)、并发数(同时处理的请求)、吞吐量(QPS TPS HPS)、服务器参数(load CPU等)。针对链路瓶颈优化。比如gc,redis,db等。
应用层优化
浏览器访问优化。
减少http请求。合并js,css,图片。浏览器缓存。文件压缩。服务端压缩,浏览器解压,时间换空间。css在上,js在下。防止阻塞页面加载:加载完所有css之后渲染,加载js后立刻执行。减少cookie传输量。 CDN加速。缓存静态文件,如css,js,html,图片,视频等。反向代理。安全、缓存静态内容、负载均衡。
服务层优化
分布式缓存。减少访问时间和计算时间。
缓存的数据不应频繁修改(读写比>2),有热点访问。需要处理实时问题带来的不一致和脏读。对于缓存穿透、击穿、雪崩的应对方案。需要提高缓存命中率。读写分离和代理缓存 解决热key问题。 本地缓存。项目中使用高性能的Caffeine。深入理解caffeine,参考1,参考2。异步。消息队列,异步dubbo等。集群。提升整体的qps等。代码优化。
多线程。由于IO阻塞和多CPU,提高资源利用率。可以用贫血模型对象、局部对象,注意并发资源处理线程安全问题。资源复用。单例和对象池(线程池、数据库连接池等)。垃圾回收。合理设置GC参数,尽量减少Full GC,或者G1避免。
数据层优化
固态硬盘。LSM树更新无需访问磁盘,记录更新的步骤。适合写为主,读操作集中在最近写入数据上。
参考hbase写入流程。 HDFS。管理block,每个block至少两个备份。
NameNode提供元数据服务,管理block分配,相当于FAT。DataNode提供数据服务。基于HDFS的Hbase。Hbase的region,Hbase的rowkey。
可用性
应用层优化
无状态性:不保存业务的上下文,只根据请求参数响应。通过session服务器管理状态。负载均衡,实现无状态服务的失效转移。
服务层优化
负载均衡,失效转移。服务分级。高优先级的服务占用更好的硬件资源,部署在不同的宿主机上,甚至异地容灾。超时设置。服务方挂掉,超时重试或者使用降级策略。异步调用。解耦,不影响调用方。需要调用结果进行下一步操作的不适合异步。服务降级。
拒绝服务。按照优先级或者随机拒绝,降低并发数,保证部分请求成功。关闭功能。关闭不重要的功能,减少开销。 幂等性设计。保证多次调用和一次调用结果相同。
数据层优化
CAP原理:一致性,可用性,分区耐受性(伸缩性)。 一致性:多副本时,所有程序访问得到相同的数据。 可用性:任何时候任何程序都可以读写访问,有好的响应性能。 分区耐受性:可跨网络分区线性伸缩,可靠性强。 大型网站通常会牺牲强一致性保证数据的用户一致性,即AP。
数据备份。
异步热备。例如mysql主从。同步热备。存储服务器没有主从之分。 失效转移。失效确认、访问转移、数据恢复(从健康的服务器复制数据)。
软件优化
自动化发布、自动化测试。预发布验证。预发机器不配置在对外的负载均衡服务器,或者需要带特定header才能访问。灰度发布。监控数据采集和管理。如cat监控告警,日志平台等。
伸缩性
增加资源规模增加整体的吞吐量。应用服务器负载均衡。大型网站通常使用修改mac地址的数据链路层负载均衡——三角传输模式。分布式缓存使用一致性hash+虚拟节点。存储层。cobar伸缩,hbase的region分裂。
扩展性
系统架构层面的开闭原则。需要模块化,并降低模块的耦合、提高模块的复用性。
安全性