架构师DotNet 2019-04-30
1.响应时间。
2.并发数。如果暂时没有对应的准确监控,针对不同业务模型,可以有不一样的并发数的预估。我们的系统进行峰值并发数预估的话,有一种比较粗略的计算方式,即全天请求平均每秒并发数 * 3。但也需要case by case。
3.吞吐量。比较常见的有QPS(每秒查询数)、HPS(每秒http请求数)以及TPS(每秒处理事务数)。
4.性能计数器。包括系统负载、线程数、cpu、内存使用情况等。可以用top、free、cat /proc/cpuinfo等命令来查看。系统负载的定义为当前被CPU执行的线程数/等待被CPU执行的总线程数。当其值与逻辑cpu个数相同时是最佳状态,其代表所有的资源都被最大限度地被利用。但也有人认为当负载为0.7倍逻辑CPU数时最佳。
1)系统负载、任务、cpu、内存使用情况:
$ top top - 22:50:09 up 1093 days, 6:14, 1 user, load average: 18.18, 14.55, 10.18 Tasks: 275 total, 12 running, 261 sleeping, 0 stopped, 2 zombie Cpu(s): 1.9% us, 8.5% sy, 42.1% ni, 47.3% id, 0.0% wa, 0.0% hi, 0.1% si Mem: 65878264k total, 65837688k used, 40576k free, 130476k buffers Swap: 1020088k total, 635080k used, 385008k free, 40273792k cached
2)内存使用:
$ free Mem: 65878264 65757048 121216 0 135408 39984028 -/+ buffers/cache: 25637612 40240652 Swap: 1020088 635080 385008
3)逻辑CPU处理器个数:
$ cat /proc/cpuinfo | grep "processor" | wc -l 12
需要格外注意的是。需以processor个数为准。cpu cores可能出现偏差。要想获取准确的服务器CPU信息,请根据model_name到网上去搜。
web前端性能优化
浏览器访问优化
CDN加速
缓存图片、文件、CSS以及script脚本。但是pc上的CDN加速效果要好于移动端。经过调研发现,last-mile的延迟越高,CDN的相对有效性越差。
反向代理
可以提供七层负载均衡(http请求进行均衡策略),并且可以提供静态资源的缓存,请求转发,防止网络攻击等。比较流行的有nginx。
应用服务器性能优化
分布式缓存
网站性能优化的第一定律:优先考虑使用缓存优化性能。
异步化
任何可以晚点做的事情都应该晚点再做。
通过分布式消息队列来实现削峰的目的。通过业务配合技术来解决问题。比如12306的排队。
集群
采用集群也是服务虚拟化的一个体现。用以避免单点问题,同时提供更加高可用,高性能的服务。
代码优化
存储性能优化
关系型数据库的索引采用B+树进行实现。而很多的nosql数据库则采用了LSM树进行存储。LSM在内存中保留最新增删改查的数据,直到内存无法放下,则与磁盘的下一级LSM树进行merge。所以对于写操作较多,而读操作更多的是查询最近写入数据的场景,其性能远高于b+树;采用HDFS结合map reduce进行海量数据存储和分析。其能自动进行并发访问和冗余备份,具有很高的可靠性。其等于是实现了RAID的功能。
高可用的应用
高可用的服务
高可用的数据
服务于高可用的监控
对用户行为以及服务器性能进行监控。并根据监控引申出系统报警、失效转移、自动降级等保证高可用的操作。
总结
贯穿这两章,其实也贯穿了整本书,本书的作者希望能够传达这样一个观点:技术是为业务服务的,怎么样在当前的业务领域里面最简单但最高效地实现一个高性能、高可用的服务是我们必须关注的,而这一切的立足点,则是业务。