目录

互联网三高

目录

互联网三高,互相影响,可能提高了一方面其他的也跟着提高

  • 高可用
  • 高扩展
  • 高性能

可用性 Vs. 可靠性

– 如果系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。 与之类似,如果一个系统从来不崩溃,但是每 年要停机两星期,那么它是高度可靠的,但是 可用性只有96%。

高性能包含两部分内容,两者是一个与的关系,

系统优化就是从系统的上游到系统内部到缓存到数据库,提升这两个方面,也就是降低响应延迟,提高吞吐量

  • 低延迟(响应快 low-latency)
  • 高并发(吞吐量高 high-througput)

一般从降低系统延迟做文章,同时也会提高吞吐量,比如银行柜台从10s钟一个客户,改成5s一个客户,延迟降低了,同时吞吐量也上去了。但是在算法不能突破的情况下,降低系统的响应时间难度非常大,所以现在说的提高性能是指提高系统的吞吐量,可以多加机器(对银行来说就是多加柜台)

系统优化:

  • 异步处理:优化响应mq,bio编程nio 非阻塞协议,也是异步
  • 负载均衡集群-提高吞吐量
  • 热点数据多级缓存-响应
  • CDN(动静分离) - 响应(离地近) + 吞吐量(有从机)
  • 分库分表-优化吞吐
  • 锁优化(互斥-自旋)-响应时间
  • 线程池-吞吐量

有个服务需要启动多线程,启动多少个线程给服务最合适

理论上:

线程数=处理器核的数目 x 期望的CPU利用率 x (1+W/C)

W: 执行该任务所花费的等待时间(cpu等待从磁盘io读取数据),C:执行该任务所花费的计算时间,(1+w/c) = (w+c) / c

  • 单核cpu设定多线程是否有意义

    有,比如执行一个任务需要10s, 其中等待时间5s,计算时间5s, 那么显然最好是两个线程(1+5/5),也可以根据上述公式推导

  • 工作线程数是不是设置的越大越好,当然不是,根据公式可以算出最优解

  • 工作线程数(线程池中的线程数量)设置多少合适

w/c得不到精确的值,实际上是需要做压测才能推导出,一般是根据经验先设置一个初始值(2N+1),然后通过压测(jmeter)进行上下调整

压榨机器提升性能,两个方面:锁+多线程