课程名称:海量数据高并发场景,构建Go+ES8企业级搜索微服务
课程章节:5-5
课程讲师:少林码僧
课程内容:
服务隔离的目的
在系统发生故障的时候限制其影响范围
隔离在保障整个服务的可用性上具有重要作用
进程之间的通信方式
在不同的机器上需经过远程调用,比如RESTFul API,gRpc 等通信方式
如果是在同一台机器上,可以通过共享内存,线程管道,系统提供的的“收发消息”,系统信号
资源隔离
通过限制docker对资源的使用上限
将物理机分成多个虚拟机
如果消耗资源很大,可以尝试把消耗资源的服务部署到单独的机器或者集群
快慢隔离
避免整个队列被重任务阻塞
比如视频处理,视频审核,需要大规模分析的任务
比如error级别日志和非error级别日志分开采集处理
热点隔离
热点操作:读操作,写操作
热点数据:静态热点(能提前预测的,可以冷启动的),动态热点(不能提前预测)。
CAP理论
一致性指的是读操作保证能够返回最新的写操作结果,多个节点的情况下,无论读哪一个节点,都能读到任一节点最新的写操作
可用性指的是非故障节点在合理的时间内返回合理的响应
当出现网络分区后,系统能继续发挥作用
对热点数据的处理
实现动态发现热点的功能
提前预热缓存
隔离、使用单独的服务来处理
业务核心度隔离
按照服务的核心成都,将服务分级:比如账号服务,不要把账号服务和其他服务放在一起,公用一个库
重要程度高的服务使用单独资源,并提供冗余资源来提高容灾能力
非核心应用,如为了省资源,可以部署到同一个集群
读写分离
动静分离表分离
对表字段进行动静分离提高查询性能
尽可能让主表中存储更新频率低的字段,避免缓存页失效。但实际上,mysql8 以后都不用缓存了,但是mysql本身还是需要依赖内存进行update,undolog和redolog都是在内存中操作的。
以短视频为例,视频基本信息一旦生成基本不会变动,但是播放量,点赞点才都是频繁变更的,这部分就要数据进行分离
动静分离CDN
静态资源可以通过CDN来加速
静态资源要单独域名,cname映射到CDN服务厂商提供的DNS服务器
应用隔离
将系统划分为若干个服务模块,各个模块之间是相对独立的,这就是解耦
微服务就是一个应用隔离的方式
物理隔离
服务器,机房,集群等维度的隔离
比如 异地多活的设计
课程收获: