架构套路总结
Posted Shi Peng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构套路总结相关的知识,希望对你有一定的参考价值。
前言
系统的技术架构(相对于业务架构),主要会考虑下面5个点:
高性能、高可用、可伸缩、可扩展、安全。
一、高性能
1、架构层面
1.1、缓存
浏览器缓存
CDN缓存
反向代理缓存
本地缓存
分布式缓存
缓存注意的点:
1)避免缓存穿透:把空对象保存在内存缓存里
2)缓存与数据库的数据一致性:Cache Aside模式:先更新DB,再清除缓存,DB主从同步完成后,再清理缓存。
1.2、异步
本地队列
分布式队列
1.3、资源复用
线程池、连接池、对象池
单例
2、代码层面
2.1、多线程
线程池,线程数与CPU核数相关:看IO密集型还是计算密集型
线程数 = (任务执行时间 / (任务执行时间 - IO等待时间))* CPU核数
2.2、内存:空间换时间
2.3、锁
尽量不用锁
非要用锁,尽量降低锁粒度、控制锁总数、尽量使用无锁框架CAS,putIfAbsent等
2.4、数据结构的时间复杂度
Skiplist 替代 TreeMap
2.5、访问量大时可批量请求,降低请求次数
Kafka producer批量请求
3、DB层面
3.1、索引
InnoDB引擎 默认BTree+ 索引
3.2、SQL优化
3.3、NoSQL
4、附录:衡量性能指标
4.1、TPS & QPS
4.2、系统性能参数:CPU Load Average, CPU User Usage, 内存,网络IO,磁盘IOPS
CPU Load Average:平均每核CPU,理想值在100%
CPU User Usage:理想值在70%以内
4.3、响应时间
4.4、并发数:并发访问数、在线用户数
二、高可用
1、冗余:数据冗余 & 依赖服务冗余
2、限流、降级、熔断
3、故障自愈
4、自动扩缩容
5、自动化运维
6、自动化测试
7、预发布测试
8、灰度发布
9、服务自动失效转移
10、多维度监控,告警逐步升级
维度1:客户端APM打点 & Server端监控
维度2:业务级监控 & 系统指标参数监控
自动化巡检,发现问题
三、可伸缩
1、应用层可伸缩:无状态服务
微服务的拆分方式:
1)横向拆分:拆分成职责不同的应用:如chatroom和CMP
2)纵向拆分:如chatroom和chatroommessage服务
每个微服务都要可水平扩展
2、缓存层可伸缩:Redis容器云方案
Redis Cluster集群模式的负载均衡策略:槽位迁移
3、关系型数据库:在DB上游通过Proxy保证可伸缩
4、NoSQL:天然可伸缩
四、易扩展
易扩展主要指微服务的拆分时保证每个微服务“高内聚、低耦合”
1、应用间通过队列异步解耦
2、分布式微服务
五、安全
1、密码和手机校验码做身份认证
用户对于开放http API接口访问时,要携带秘钥做签名认证
2、登录、交易、敏感数据等,对网络通信做加密
加解密方式:
1)单向散列加密:如MD5,SHA等,通常加密后加点salt。
单向加密不可逆,仅能比较加密后数据是否一致,如用于做密码校验,但不能还原密码。
2)对称加密:即加密和解密用同一个秘钥,如DES,RC等
优点:算法简单、性能快
缺点:加解密用同一个秘钥,不够安全。
3)非对称加密:加密和解密用不同的秘钥,如RSA等
一个对外公开,叫公钥;一个只有网站系统知道,叫私钥
用公钥加密的信息,必须用私钥才能解密;反之,用私钥加密的信息,用公钥才能解开。
3、请求编码转换,避免XSS攻击、SQL注入等
1)XSS(Cross Site Script):指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
这些恶意网页程序通常是javascript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的html。
攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie、密码等各种内容。
防攻击手段:
1)消毒:对某些HTML危险字符转义,如">"转义为“>”等
2)HttpOnly:禁止浏览器JS访问带有HttpOnly属性的cookie。即对于存敏感信息的cookie,如用户密码等,未该cookie添加HttpOnly属性,防止被JavaScript窃取
2)SQL注入
通过预编译参数绑定,如ibatis, hibernate等框架都实现了参与预绑定。
常用响应时间
以上是关于架构套路总结的主要内容,如果未能解决你的问题,请参考以下文章