技术

高可用并发系统搭建

2018-10-08  本文已影响65人  lotusfan2018
分布式系统搭建-图.png

本篇是读《亿级流量网站架构核心技术》的一些总结;可以作为在实际项目搭建过程中架构核心点实施的扩展发散或是作为一个项目架构的参考

限流

限流算法

令牌桶

漏桶

计数器

分布式限流方案

超时、重试机制

读服务

天然适合重试

写服务

需要保证服务的幂等性

网络连接超时

代理层超时与重试

Web容器超时

中间件客户端超时与重试

数据库客户端超时

业务超时

异步并发

异步是针对CPU和IO的,是指当IO没有就绪时要让出CPU来处理其他任务。Java中真正实现异步化是非常困难的,大多数场景并不是真正的异步化

异步并发并不能使响应变得更快,更多是为了提升吞吐量、对请求更细粒度的控制

同步阻塞调用

异步Future

异步Callback

异步编排CompletableFuture

Hystrix

熔断、降级

采样统计(内存中存储)

计数统计

最大并发统计

延时百分比统计

Turbine + Hystrix-Dashboard实现可视化统计数据

请求合并

压测与预案

系统压测

线下压测

JMeter、Apache ab

全链路压测

线上压测

数据仿真度

读、写

业务服务

连接池、线程池

数据库连接池

C3P0

DBCP

Druid

HikariCP

切记要设置destroy-method=“close”,否则多次重启tomcat后旧的数据库连接池的连接不会释放

建议需要有熔断和快速失败机制

HttpClient连接池

连接复用条件还很苛刻,使用的时候要格外注意

JVM设置线程栈大小

线程池大小配置

java实现

ForkJoinPool

队列术

异步处理

系统解耦

数据同步

流量削峰

缓冲队列

任务队列

消息队列

订阅模式

双写模式

单写DB

通过消息队列可以实现异步处理、系统解耦和数据异构

请求队列

数据总线队列

混合队列

分布式服务隔离机制

线程

进程

集群

读、写隔离

动、静隔离

爬虫隔离

热点隔离

资源隔离

构建需求响应式

单品页技术架构发展

1.0

2.0

3.0

详情页架构设计原则

数据闭环

数据维度化

worker无状态化+任务化

异步化+并发化

多级缓存化

动态化

弹性化

降级开关

扩容

单体应用垂直扩容

单体应用水平扩容

应用拆分

数据拆分

单库查询要改为跨库查询

读、写分离

水平拆分;分库分表

数据异构

垂直拆分;宽表拆子表

缓存的应用

任务系统扩容

简单任务

分布式任务

回滚机制

事务回滚

分布式事务

代码库回滚

SVN

GIT

部署版本回滚

部署版本化

小版本增量发布

大版本灰度发布

架构升级并发发布

例:新、老共存迁移部署比例1%->10%->50%->100%

静态资源版本回滚

数据版本回滚

全量回滚

增量回滚

应用级缓存

五分钟法则

局布性原理

缓存命中率

回收策略

基于空间

基于容量

基于时间

基于Java对象引用

回收算法

FIFO(First In First Out)

LRU(Least Recently Used)

LFU(Least Frequently Used)

java缓存类型

堆缓存

堆外缓存

磁盘缓存

分布式缓存

单机方案:最热的数据到堆缓存,相对热的数据到堆外缓存,不热的数据到磁盘缓
集群方案:存储最热的数据到堆缓存,相对热的数据到堆外缓存,全量数据到分布式缓存

Cache-Aside方式

Cache-As-SoR方式

Guava Cache、Ehcache中的堆缓存都是基于引用,在存储到SoR时应该复制对象

性能测试

HTTP缓存

基于浏览器的last-modified

HttpClient客户端缓存

多级缓存

搭建层级

接入Nginx将请求负载均衡到应用Nginx

应用Nginx读取本地缓存

读取分布式缓存

回源Tomcat集群

Tomcat读取本地缓存

回源DB读取数据

数据缓存

时限

维度化缓存与增量缓存

大Value缓存

热点缓存

缓存的分步式

缓存崩溃与快速修复

写缓存操作不要放在事务中,防止写操作异常引起整个事务回滚

上一篇下一篇

猜你喜欢

热点阅读