设计高并发系统需要考虑哪些?

提问者:帅平 问题分类:微服务

在设计高并发系统的时候,我们需要如何进行设计,考虑哪些点?

5 个回答
Rae
Rae 管理员

在设计高并发系统的时候,需要考虑的第五个方面就是考虑缓存的问题,既然是高并发系统,那么缓存肯定是需要使用的。那么有哪些缓存我们可以用呢?例如:

1、DNS缓存
2、浏览器缓存
3、CDN缓存
4、nginx缓存(nginx proxy_cache)
5、数据层缓存(本地缓存,redis缓存等)

发布于:1个月前 (10-18)
Rae
Rae 管理员

在设计高并发系统的时候,需要考虑的第四个方面就是同步/异步的问题,这里主要是使用消息队列来达到以下目的:

1、服务解耦
2、异步处理
3、流量削峰

但是这种方式是为了牺牲业务数据的强一致性,但是也需要保证数据的最终一致性(例如:分布式事务)

发布于:1个月前 (10-18)
Rae
Rae 管理员

在设计高并发系统的时候,需要考虑的第三个方面就是服务化的完善。我们既然拆分了服务,那么必然会带来系统的复杂度,同时也增加了运维的难度,所以在这个时候我们一定要保证系统的文档运行,那么就需要采取各种措施来完善服务化。有哪些措施呢?例如:

1、服务分组
2、服务隔离
3、服务限流
4、黑白名单
5、服务超时/重试机制
6、服务路由
7、故障补偿
等等

发布于:1个月前 (10-18)
Rae
Rae 管理员

在设计高并发系统的时候,需要考虑的第二个方面就是服务的拆分。既然提到高并发了,那说明整个系统已经很大了,不再是只有几个人使用的小项目,那么整个系统的设计几乎都会向微服务进行靠拢。这时候我们就需要对系统进行完整的切分,切分方法有如下几种:

1、按照系统维度拆分,例如:商品、支付、搜索等。
2、按照功能维度拆分,例如:注册登录、用户的增删改查、商品的增删改查,相当于在系统维度里面再做一层细粒度的拆分。
3、按照读写维度拆分,系统越来越大,写场景少,读场景多,那么就会涉及到分库分表等,这种就是读写维度的拆分。
4、按照模块维度拆分,例如:web、servervice、dao分别拆分成不同的项目进行引用。这块主要是基于代码整体框架及代码规范的方面来操作的。

每个系统总是需要在线上经历各种场景的验证后才慢慢完善的,作为微服务,我们不需要一开始就拆分的很细,后续的话慢慢拓展即可。所以服务的拆分到底按照什么样的维度来拆分视具体业务场景而定。

发布于:1个月前 (10-18)
Rae
Rae 管理员

在设计高并发系统的时候,需要考虑的第一个方面就是服务的状态化,服务分为有状态化和无状态化:

无状态化指的是程序本身无状态只是负责数据的逻辑处理。
有状态化指的是程序本身有状态,需要进行状态及其他数据的存储。

在设计高并发系统的时候,我们需要把整个系统的逻辑根据有状态化和无状态化进行区分开来,无状态化的服务可以单独分为一组,运维方面无限伸缩,有状态化的可以使用配置中旬,存储中心进行存储对应。

发布于:1个月前 (10-18)
我来回答