请问如何构架一个高负载的系统?

2016-01-21 13:01:05 +08:00
 oldcai

请问如何构架一个高负载的系统?

  1. 高负载的系统构架的时候主要考虑哪几个因素?
  2. 如果需要独立出功能单独做服务以降低复杂性,多系统拆分或集成一般用什么原则来划分
  3. 多个系统之间一般用什么方式和方法通信
  4. 什么时候考虑数据库分布式,它除了演进和维护变得更复杂还有没有什么弊端
  5. 目前有没有什么成熟高可用的 postgresql 分布式集群构架推荐

我现在用的构架是 nginx+django(python)+redis+postgresql

之前用的 rabbitmq 通信,后来为了降低系统的复杂程度,就直接用 redis 了,现在暂时还没有碰到 redis 瓶颈

在日高峰已经遇到 8 核心单独做数据库的服务器 CPU 占用 100%的情况。
慢查询主要在第三方的 oauth2 库和 taggit 库的查询。

5677 次点击
所在节点    Python
28 条回复
wph95
2016-01-21 20:19:04 +08:00
@oldcai
我感觉还是数据库没优化好的原因
最快捷的办法还是去找个 DBA 把,做做分析,要分库的分库,要优化的优化,要分离的分离。
& Rabbitmq 的性能是靠谱的,百万级别的没问题的。 我说的大小是指每个消息的大小,数据大小超过了 4K , Redis 会慢的一塌糊涂。。。这是个坑点。

// 我只用过 青云的 postgresql , 简单的读写分离。 供参考。
strwei
2016-01-21 20:59:30 +08:00
用了 redis 为何还要 pgsql
bobuick
2016-01-21 21:19:36 +08:00
@strwei redis 和 pg 不是一回事吧, 也不冲突。
稍微有点事务需求的数据, 用 redis 行不通。
bobuick
2016-01-21 21:24:07 +08:00
”什么时候考虑数据库分布式?“
这个, 大概是等到你数据事务写很多,然后需要库分表,分库到一定阶段, 且在应用层这样分,已经很明显出现维护成本过高, 而且很多数据读写之间还有比较强的一致性要求(这导致不能从库来读),写入数据并发量较大, 从库的同步已经有过大的延迟, 且这个延迟已经超出业务容忍度。
就需要分布式了, 比较常见的做法是自己有一个数据中间件, 按业务或其他逻辑,分布到不同的数据节点去, Uber 就有类似案例, 可以学习一下。
bobuick
2016-01-21 21:30:32 +08:00
“多个系统之间用什么通信”
通常比较简单的做法就是 http 协议了, 写起来快, 且有成熟的负载均衡方法。微服务之间很多时候一开始都这样干
然后就是 RPC 了, 没有大规模 rpc 应用过, 只说自己的感觉应该是两个服务之间频率很高,接口之间有比较明显的逻辑调用式的场景,另外可能一些有状态的逻辑, 用 rpc 可以明显提升效率, 因为 http 协议太重了, rpc 的二进制流又非常高效,不过多节点的负载问题比 http 麻烦点吧。
laotaitai
2016-01-21 22:47:05 +08:00
请教如何写好代码, 谢谢!
stevenkang
2016-01-22 14:42:01 +08:00
在日高峰已经遇到 8 核心单独做数据库的服务器 CPU 占用 100%的情况。
stevenkang
2016-01-22 14:43:21 +08:00
@stevenkang 不小心点了回车,如果日高峰数据库服务器负载很高的话,可以使用消息队列进行异步处理一些数据,达到削峰填谷的效果。这样整个系统就比较稳定,也会因为某个时间段导致系统出现性能瓶颈了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/252337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX