须要关注性能、可用性、安全性、伸缩性,可扩展性五个要素css
性能:算法
浏览器端能够浏览器缓存,启用gzip,可是这样会增长CPU的压力sql
合理布局页面,css放在前面,js放在后面,由于页面是从上往下渲染数据库
CDN,将静态资源分发网络机房,网络机房前作反向代理存放静态资源浏览器
应用服务端,采用缓存,nosql数据库,分布式缓存等存放热点数据,减小应用端和数据库压力缓存
采用消息队列,安全
集群,使用负载均衡服务器
代码层级采用多线程操做网络
数据库方面优化服务端,使用缓存,分库分表,或者直接采用nosql数据库session
指标有tps,并发数,响应时间等
可用性:
采用集群,单台 宕机不影响集群内部工做,数据库作复制
伸缩性:
动态加入server,对集群内部无影响
若是应用服务是无状态的那么基本没啥影响,若是有状态的就要考虑session的问题,
缓存服务器会影响路由,须要优化路由算法
数据库若是采用了分库分表,也会影响,
nosql基本都有很好的扩展性
扩展性:
更快的实现新需求,可是新需求对现有系统是透明的,基本无感知,目前可伸缩框架通常是两中,一种是事件驱动架构,另外一种是分布式服务
事件驱动架构:一般是指消息队列,通常均可以动态加入生产者消费者
分布式服务:将业务和复用服务分开,经过分布式框架服务进行调用,基本无影响,如今国内比较好的就是阿里的Dubbo,Sina的Motan,和当当的Dubbox,不过dubbox实在dubbo的基础上开发的,
安全性