关于如何构建高性能web站点, 开场白先引用几句至理名言:
- Divide-and-conquer is usually the best approach for achieving any scalability goal(分而治之通常是实现可伸缩、高可用系统最好的方法);
- 技术服务于业务,不同的业务发展阶段伴随着不同的架构模型,所以具备架构演化意识和架构选型能力是一个合格架构师的必备条件;
分布式领域CAP理论
- Consistency(一致性), 数据一致更新,所有数据变动都是同步的
- Availability(可用性), 好的响应性能
- Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
本狮总结(copy)了一些关于HA构建相关的关键词,后面会对每一个点进行学习,如下:
动静分离
目前大部分一二三流的有一定规模的互联网公司应该都采用了该模式,前后端分离,前端界面相关静态资源存放CDN,后端开发人员只负责提供数据接口(http+json/jsonp),具体前端交互逻辑由前端开发人员实现,彻底解放了后端开发人员。负载分流 对用户请求进行负责分流,后端web服务分布式部署,不管公司大小,我相信只要是互联网公司应该都是这么做的,具体的负责策略和实现方式也有很多,如DNS负载、http重定向、反向代理、IP负载、直接路由。
异步
异步大致分为两类:1.服务内部的异步、并发请求,一般有java线程池、rxJava、akka等实现方式;2.基于MQ的消息排队机制,业界开源mq框架有很多,如Activemq、RabbitMQ、Kafka等,还有我们伟大的美团点评的mafka、swallow ~_~缓存机制
缓存一般使用方式大概分为两种:1.分布式缓存,比较常用的大概就redis、memcache;2.本地内存缓存,推荐guava cache。垂直扩展/水平扩展
削峰
降级