tmachc's notes

Stay Hungry, Stay Foolish.

0%

高可用的网站架构

实现高可用架构的主要手段是数据和服务的冗余备份以及失效转移,一旦某些服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备用的磁盘中读取数据。

典型的网站架构主要分为三层:应用层,服务层,数据层。

以百度为例:
应用层主要部署了文库、贴吧、百科等产品服务
服务层主要部署了登录、百度账户等百度的通用可复用的服务
数据层主要部署了文件、数据库、缓存、搜索等数据服务

阅读全文 »

性能测试

性能测试指标: 响应时间,并发数,吞吐量,性能计数器(负载)
性能测试方法: 性能测试(最佳运行点),负载测试(最大负载点),压力测试(崩溃点),稳定性测试

Web前端性能优化

浏览器访问优化

  • 减少http请求: 合并CSS、合并JavaScript,合并图片
  • 使用浏览器缓存: 设置Http头的Cache-Control和Expires属性
  • 启用压缩: 对静态资源如Html、CSS、JavaScript进行压缩
  • 页面CSS尽量靠上、JS靠下
  • 减少Cookie传输
阅读全文 »

大型网站软件系统特点

高并发,大流量: 高并发,大流量访问。如Google日均PV35亿
高可用: 系统需要24小时不间断服务
海量数据: 需要存储管理海量数据,使用大量的服务器
用户分布广泛 为全球用户提供服务,用户分布范围广,各地区情况差别较大
安全环境恶劣 由于互联网开放性,网站容易被黑客攻击
需求变更快,快速迭代 互联网产品为适应市场,需求变更非常快
渐进式发展: 渐进式发展,从小网站慢慢迭代发展起来的

阅读全文 »

ThreadPoolExecutor

ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为”存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。

阅读全文 »

Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。

下面这张图完整描述了线程池的类体系结构。

阅读全文 »