前言 系统的技术架构(相对于业务架构),主要会考虑下面5个点: 高性能、高可用、可伸缩、可扩展、安全。 一、高性能 1、架构层面 1。1、缓存 浏览器缓存 CDN缓存 反向代理缓存 本地缓存 分布式缓存 缓存注意的点: 1)避免缓存穿透:把空对象保存在内存缓存里 2)缓存与数据库的数据一致性:CacheAside模式:先更新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、访问量大时可批量请求,降低请求次数 Kafkaproducer批量请求 3、DB层面 3。1、索引 InnoDB引擎默认BTree索引 3。2、SQL优化 3。3、NoSQL 4、附录:衡量性能指标 4。1、TPSQPS 4。2、系统性能参数:CPULoadAverage,CPUUserUsage,内存,网络IO,磁盘IOPS CPULoadAverage:平均每核CPU,理想值在100 CPUUserUsage:理想值在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容器云方案 RedisCluster集群模式的负载均衡策略:槽位迁移 3、关系型数据库:在DB上游通过Proxy保证可伸缩 4、NoSQL:天然可伸缩 四、易扩展 易扩展主要指微服务的拆分时保证每个微服务高内聚、低耦合 1、应用间通过队列异步解耦 2、分布式微服务 五、安全 1、密码和手机校验码做身份认证 用户对于开放httpAPI接口访问时,要携带秘钥做签名认证 2、登录、交易、敏感数据等,对网络通信做加密 加解密方式: 1)单向散列加密:如MD5,SHA等,通常加密后加点salt。 单向加密不可逆,仅能比较加密后数据是否一致,如用于做密码校验,但不能还原密码。 2)对称加密:即加密和解密用同一个秘钥,如DES,RC等 优点:算法简单、性能快 缺点:加解密用同一个秘钥,不够安全。 3)非对称加密:加密和解密用不同的秘钥,如RSA等 一个对外公开,叫公钥;一个只有网站系统知道,叫私钥 用公钥加密的信息,必须用私钥才能解密;反之,用私钥加密的信息,用公钥才能解开。 3、请求编码转换,避免XSS攻击、SQL注入等 1)XSS(CrossSiteScript):指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。 这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。 攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie、密码等各种内容。 防攻击手段: 1)消毒:对某些HTML危险字符转义,如转义为gt等 2)HttpOnly:禁止浏览器JS访问带有HttpOnly属性的cookie。即对于存敏感信息的cookie,如用户密码等,未该cookie添加HttpOnly属性,防止被JavaScript窃取 2)SQL注入 通过预编译参数绑定,如ibatis,hibernate等框架都实现了参与预绑定。 4、敏感词过滤 原文链接:https:blog。csdn。netshijinghan1126articledetails117906768